Skip to content

Commit 3b71f35

Browse files
committed
fix(ci): 部署工作流对齐真实服务器结构并修复三处失效缺陷
依据服务器实测结构(/opt/Entropydecrease/server 存放 compose 与 .env.production, website 静态目录为 /opt/Entropydecrease/website,且该目录非 git 仓库)修正部署链路: 1) 路径大小写与层级:全部 /opt/entropydecrease → /opt/Entropydecrease, deploy-server 的 cd 目标补上 server 子目录。Linux 路径大小写敏感, 原配置会让部署在第一步 cd 即失败。 2) 缺少 --env-file:原脚本裸跑 docker-compose,不加载 .env.production, 导致 DB_PASSWORD/REDIS_PASSWORD 等被解析为空串(服务器实测已出现该 WARN)。 现统一为 docker compose -f docker-compose.prod.yml --env-file .env.production。 3) 代码从未上传:原工作流仅 ssh 执行 pull+up,而 CI 内 docker build 产出的镜像 从未 push 到任何 registry,服务器也不是 git 仓库——新代码永远无法上线。 现改为 scp 上传 server/ 源码后 up -d --build 重新构建自建服务。 scp 的 rm 保持 false:服务器上的 .env.production 为真实生产密钥且不在仓库内, 删除目标目录会导致密钥永久丢失。 4) 假回滚命令:docker-compose rollback 并非有效子命令,健康检查失败时只会报 unknown command 而不产生任何回滚。现改为输出容器日志便于定位, 并将 sync-service 也纳入健康检查;真正回滚由 revert 提交重新触发部署完成。
1 parent 724c964 commit 3b71f35

4 files changed

Lines changed: 43 additions & 14 deletions

File tree

‎.github/workflows/deploy-server.yml‎

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,48 @@ jobs:
1010
runs-on: ubuntu-latest
1111
steps:
1212
- uses: actions/checkout@v4
13-
- name: Build and push Docker image
14-
run: |
15-
cd server
16-
docker build -t ai-gateway:${{ github.sha }} .
17-
- name: Deploy to server
13+
14+
# 上传 server/ 源码到服务器(服务器非 git 仓库,代码由 CI 同步)
15+
# 注意:rm 必须为 false —— 服务器上的 .env.production 为真实生产密钥,
16+
# 不在仓库内(被 gitignore),删除目标目录会导致密钥永久丢失。
17+
- name: Upload server sources
18+
uses: appleboy/scp-action@v0.1.7
19+
with:
20+
host: ${{ secrets.SERVER_HOST }}
21+
username: ${{ secrets.SERVER_USER }}
22+
key: ${{ secrets.SSH_PRIVATE_KEY }}
23+
source: server/*
24+
target: /opt/Entropydecrease
25+
rm: false
26+
27+
- name: Rebuild and restart services
1828
uses: appleboy/ssh-action@v1
1929
with:
2030
host: ${{ secrets.SERVER_HOST }}
2131
username: ${{ secrets.SERVER_USER }}
2232
key: ${{ secrets.SSH_PRIVATE_KEY }}
2333
script: |
24-
cd /opt/entropydecrease
25-
docker-compose pull
26-
docker-compose up -d --force-recreate
27-
sleep 10
28-
curl -f http://localhost:8000/health || (docker-compose rollback && exit 1)
34+
set -e
35+
cd /opt/Entropydecrease/server
36+
37+
# .env.production 含生产密钥,必须显式传入,否则 DB_PASSWORD 等会被解析为空串
38+
COMPOSE="docker compose -f docker-compose.prod.yml --env-file .env.production"
39+
40+
# 拉取第三方镜像(postgres/redis/nginx),自建服务由 --build 重新构建
41+
$COMPOSE pull --ignore-buildable || true
42+
$COMPOSE up -d --build --force-recreate
43+
44+
# 健康检查:失败时输出日志便于定位(docker compose 无 rollback 子命令,
45+
# 回滚由 revert 提交重新触发部署完成)
46+
sleep 15
47+
if ! curl -fsS http://127.0.0.1:8000/health; then
48+
echo "::error::ai-gateway 健康检查失败,最近日志:"
49+
$COMPOSE logs --tail=60 ai-gateway
50+
exit 1
51+
fi
52+
if ! curl -fsS http://127.0.0.1:8080/health; then
53+
echo "::error::sync-service 健康检查失败,最近日志:"
54+
$COMPOSE logs --tail=60 sync-service
55+
exit 1
56+
fi
57+
echo "部署成功:ai-gateway 与 sync-service 健康检查通过"

‎.github/workflows/deploy-website.yml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ jobs:
2929
host: ${{ secrets.SERVER_HOST }}
3030
username: ${{ secrets.SERVER_USER }}
3131
key: ${{ secrets.SSH_PRIVATE_KEY }}
32-
script: mkdir -p /opt/entropydecrease/website
32+
script: mkdir -p /opt/Entropydecrease/website
3333

3434
- name: Upload static files to server
3535
uses: appleboy/scp-action@v0.1.7
@@ -38,7 +38,7 @@ jobs:
3838
username: ${{ secrets.SERVER_USER }}
3939
key: ${{ secrets.SSH_PRIVATE_KEY }}
4040
source: website/out/*
41-
target: /opt/entropydecrease/website
41+
target: /opt/Entropydecrease/website
4242
strip_components: 2
4343
rm: true
4444

‎server/docker-compose.prod.yml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ services:
145145
volumes:
146146
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
147147
- ./nginx/certs:/etc/nginx/certs:ro
148-
- /opt/entropydecrease/website:/usr/share/nginx/html:ro
148+
- /opt/Entropydecrease/website:/usr/share/nginx/html:ro
149149
depends_on:
150150
- ai-gateway
151151
- sync-service

‎server/nginx/nginx.conf‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ http {
189189
}
190190

191191
# -----------------------------------------------------------------
192-
# 官网静态站点(Next.js 静态导出,由 CI 同步至 /opt/entropydecrease/website)
192+
# 官网静态站点(Next.js 静态导出,由 CI 同步至 /opt/Entropydecrease/website)
193193
# -----------------------------------------------------------------
194194
location / {
195195
root /usr/share/nginx/html;

0 commit comments

Comments
 (0)