跳至内容

部署Repovio

Repovio 的生产部署、TLS 代理、备份、恢复、升级和回滚指南。

Repovio 的 Compose 堆栈启动 PostgreSQL,应用一次 Prisma 迁移,然后启动 API 和 Web 应用程序。它不会终止 TLS。将 Web 和 API 服务置于拥有公共主机名和证书的反向代理后面。

先决条件

  • 带有 Docker Compose v2 的 Docker 引擎。
  • 公共主机名的 DNS 记录。
  • 获取并更新 TLS 证书的反向代理。
  • 私有服务器目录只能由部署管理员读取。

Compose 堆栈将 PostgreSQL 数据(包括规范化的用户个人资料图片)保留在其名为 repovio-postgres 的卷中。除非您有意删除所有 Repovio 数据,否则请勿删除此卷。

第一次部署

步骤1:查看已发布的Repovio版本并创建私有环境文件:

cp .env.example .env
chmod 600 .env

步骤 2:替换 .env 中的每个占位符,尤其是 POSTGRES_PASSWORD、数据库 URL、AUTH_JWT_SECRET 和

TOKEN_ENCRYPTION_KEY。使用以下命令生成加密密钥:

openssl rand -base64 32

步骤 3:设置外部可见的 URL。对于 https://repovio.example.com 的部署,请使用:

PUBLIC_URL=https://repovio.example.com
OIDC_CALLBACK_URL=https://repovio.example.com/api/v1/auth/oidc/callback
CORS_ORIGIN=https://repovio.example.com
NUXT_PUBLIC_API_BASE_URL=https://repovio.example.com/api/v1
OAUTH_CALLBACK_URL=https://repovio.example.com/api/v1/provider-accounts/oauth/callback

步骤4:当反向代理运行在同一主机上时,将容器端口绑定到环回:

REPOVIO_API_PORT=127.0.0.1:3001
REPOVIO_WEB_PORT=127.0.0.1:3000

否则,请使用主机防火墙限制对端口 3000 和 3001 的访问。切勿暴露 PostgreSQL 容器。

步骤5:将.env中的REPOVIO_VERSION设置为精确发布的图像对,然后启动堆栈:

docker compose pull
docker compose up --detach --wait

将该值保留在 .env 中,以便以后的每个 Compose 命令都使用相同的 API 和 Web 版本。

步骤 6:在本地确认 API 运行状况端点:

curl --fail http://127.0.0.1:3001/api/health

步骤 7:打开公共 Repovio URL 并填写 一次性首次运行设置 以创建第一个

系统管理员。

反向代理和 TLS

将公共 Web 源代理到端口 3000,并将 API 和 Socket.IO 路径代理到端口 3001。例如,Caddy 站点块可以使用:

repovio.example.com {
  reverse_proxy /api/* 127.0.0.1:3001
  reverse_proxy /socket.io/* 127.0.0.1:3001
  reverse_proxy /mcp 127.0.0.1:3001
  reverse_proxy 127.0.0.1:3000
}

代理必须将 HTTP 重定向到 HTTPS,根据其本地策略验证上游连接,并保留公共主机名。使用 OAUTH_CALLBACK_URL 中设置的相同 HTTPS 回调 URL 配置 OAuth 提供程序。

升级

迁移早期安装

在启动重命名的堆栈之前,请按照 品牌升级 进行操作。将 REPOVIO_POSTGRES_VOLUME 设置为确切的现有卷名称。保留数据库凭据和加密密钥;品牌不需要复制或重置数据库。

第 1 步:在更改映像之前创建并验证数据库备份。

步骤2:将REPOVIO_VERSION设置为.env中的确切发行版本。

步骤 3:拉动并应用释放:

docker compose pull
docker compose up --detach --wait

migrate 服务在 API 启动之前应用待处理的 Prisma 迁移。每次更新后检查它:

docker compose logs migrate

步骤 4:在考虑更新完成之前验证运行状况端点和代理服务的仪表板。

数据库备份

从部署目录运行备份。这会将 PostgreSQL 自定义格式转储写入主机,而无需打印凭据或将其放入命令行中:

mkdir -p backups
backup_file="backups/repovio-$(date +%F-%H%M%S).dump"
docker compose exec -T postgres sh -c 'pg_dump -U "$POSTGRES_USER" -Fc "$POSTGRES_DB"' \
  > "$backup_file"
pg_restore --list "$backup_file"

将加密副本存储在主机之外,并定期在单独的系统上测试恢复。

数据库恢复

恢复替换当前数据库对象。首先进行新的备份并安排停机时间。

docker compose stop api web
docker compose exec -T postgres sh -c 'pg_restore -U "$POSTGRES_USER" --clean --if-exists --no-owner -d "$POSTGRES_DB"' \
  < backups/repovio-YYYY-MM-DD-HHMMSS.dump
docker compose up --detach --wait

然后,检查 docker compose logs migrate 和 API 运行状况端点。回滚架构更改时,还原由兼容的 Repovio 版本生成的转储。

回滚

步骤 1:保留升级失败之前所做的备份。

步骤 2:将 .env 中的 REPOVIO_VERSION 设置为最后一个已知良好的镜像版本。

步骤 3:运行 docker compose pull 和 docker compose up --detach --wait。

步骤4:如果新版本迁移数据库不兼容,请停止API和Web,恢复兼容的备份,然后

再次启动之前的镜像版本。

切勿使用 docker compose down --volumes 作为更新或回滚命令:它会删除指定的 PostgreSQL 卷。