Skip to content

Commit d6da999

Browse files
committed
ci: use least-privilege deploy environment
1 parent c0431a9 commit d6da999

3 files changed

Lines changed: 12 additions & 9 deletions

File tree

.github/workflows/deploy.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,4 +92,4 @@ jobs:
9292
-o IdentitiesOnly=yes \
9393
-o StrictHostKeyChecking=yes \
9494
"${{ secrets.DEPLOY_USER }}@${{ secrets.DEPLOY_HOST }}" \
95-
"sudo /usr/bin/bash -c 'set -a; source /etc/agentcode.env; set +a; exec sudo --preserve-env=DATABASE_URL -u agentcode /usr/bin/bash /opt/agentcode/scripts/deploy.sh'"
95+
"sudo -n -u agentcode /usr/bin/bash /opt/agentcode/scripts/deploy.sh"

docs/zh/deployment.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ GitHub Actions 依次执行:
1313
5. Vitest、typecheck、lint、Next.js build
1414
6. 全部通过后才允许 SSH 到生产机
1515

16-
服务器部署顺序是:由 root 从 `/etc/agentcode.env` 读取生产配置、只把 `DATABASE_URL` 传给 `agentcode` 部署用户、拉取 `origin/main`、按需安装依赖、`prisma generate``prisma migrate deploy`、build、重启 Web 服务、健康检查。迁移失败时不会重启;数据库 migration 不执行自动 down。部署脚本通过 Corepack 使用 `packageManager` 锁定的 pnpm 版本。
16+
服务器部署顺序是:`agentcode` 部署用户从 `/etc/agentcode-deploy.env` 读取仅包含 `DATABASE_URL` 的受限配置、拉取 `origin/main`、按需安装依赖、`prisma generate``prisma migrate deploy`、build、重启 Web 服务、健康检查。迁移失败时不会重启;数据库 migration 不执行自动 down。部署脚本通过 Corepack 使用 `packageManager` 锁定的 pnpm 版本。
1717

1818
## 生产环境变量
1919

@@ -32,7 +32,7 @@ TASK_RUNNER_ENABLED=false
3232

3333
GitHub OAuth callback 为 `/api/admin/auth/callback/github`。普通训练用户保持匿名,GitHub OAuth 只用于 reviewer 后台。
3434

35-
`/etc/agentcode.env` 应保持 `root:root``0600`,由 systemd 注入 Web 服务;不要为了部署把完整 OAuth 或数据库凭据改成普通用户可读。首次开启持久化前必须完成数据库备份与恢复演练。现有部署如果曾使用 `prisma db push`,baseline migration 使用 guarded SQL 接管已有 Challenge schema;仍应先在数据库副本执行 migration。
35+
`/etc/agentcode.env` 应保持 `root:root``0600`,由 systemd 注入 Web 服务。另建 `root:agentcode``0640``/etc/agentcode-deploy.env`,其中只能放部署所需的 `DATABASE_URL`;不要把 OAuth 等完整生产密钥复制进去。首次开启持久化前必须完成数据库备份与恢复演练。现有部署如果曾使用 `prisma db push`,baseline migration 使用 guarded SQL 接管已有 Challenge schema;仍应先在数据库副本执行 migration。
3636

3737
## 数据保留
3838

scripts/deploy.sh

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@ HEALTH_URL="http://127.0.0.1:3000/"
88

99
cd "${APP_DIR}"
1010

11-
if [[ -f "${APP_DIR}/.env" ]]; then
12-
set -a
13-
# shellcheck disable=SC1091
14-
source "${APP_DIR}/.env"
15-
set +a
16-
fi
11+
for env_file in "${APP_DIR}/.env" "/etc/agentcode-deploy.env"; do
12+
if [[ -r "${env_file}" ]]; then
13+
set -a
14+
# shellcheck disable=SC1090
15+
source "${env_file}"
16+
set +a
17+
break
18+
fi
19+
done
1720

1821
run_pnpm() {
1922
corepack pnpm "$@"

0 commit comments

Comments
 (0)