Files
frontend_v2/DEPLOY.md
toom1996 5a8dbf41cb
Some checks failed
deploy / deploy (push) Has been cancelled
update
2026-08-11 22:29:47 +08:00

3.4 KiB
Raw Blame History

部署与 CI/CD 说明

项目结构:前端 Astro 静态站 + 后端 Go 服务 + MySQL。采用 Docker 容器化 + Gitea Actions 上线。

一、架构

浏览器
  │  HTTP (80)
  ▼
[frontend]  nginx:80  ── 静态资源 / , 反代 /api ──▶ [backend]  Go :8090
                                                    │
                                                    ▼
                                              [db]  MySQL 8.0
  • 前端Astro 构建为静态 dist/,用 nginx 托管;/api 由 nginx 反代到 backend:8090(同源,无跨域)。
  • 后端Go 二进制,监听 8090,连 db 服务。
  • 构建期 SSRbrands.astro 在构建时拉数据,地址用 API_SSR(容器内部 http://localhost:8090,配合 build.network: host 访问已启动的 backend 容器);运行期浏览器走同源 /api

二、服务器目录约定

/opt/fashion/
├── test/                 # 前端仓 git clone含 docker-compose.yml / deploy.sh / Dockerfile / nginx.conf
└── admin/
    └── backend/          # 后端仓 git clone含 Dockerfile

初始化(在服务器上):

mkdir -p /opt/fashion && cd /opt/fashion
git clone <前端仓地址> test
git clone <后端仓地址> admin/backend
cd test
cp .env.example .env      # 按需修改 JWT_SECRET / DB_PASSWORD

前置:服务器已安装 Docker Engine + Docker Compose v2且当前用户可免 sudo 执行 docker。

三、手动一键上线

在服务器上(或本地 SSH 过去)执行:

cd /opt/fashion/test
./deploy.sh

deploy.sh 会:① 拉两个仓库最新代码 → ② docker compose up -d db backend → ③ 轮询等待 backend 健康 → ④ docker compose build frontend(构建期 SSR 拉数据)→ ⑤ docker compose up -d frontend

完成后访问服务器 http://<服务器IP>/ 即可。

四、CI/CDGitea Actions

仓库根已放入 .gitea/workflows/deploy.yml。push 到 main/master 即自动 SSH 到服务器执行 ./deploy.sh

前置Gitea 仓库 → Settings → Secrets / Actions

Secret 说明
DEPLOY_HOST 服务器 IP / 域名
DEPLOY_USER SSH 用户名
DEPLOY_KEY 服务器私钥(对应公钥已放入 ~/.ssh/authorized_keys

后端仓库也放一份相同的 .gitea/workflows/deploy.yml,这样前后端任意仓库 push 都会触发一次完整上线deploy.sh 会同时 pull 两个仓)。

五、HTTPS可选

在服务器前置一个反向代理(如 Caddy / 已有 nginx终止 TLS把 80 转发到 frontend 容器,并加 X-Forwarded-Proto。或把 frontend 的 ports 换成 443 + 挂载证书。此处从简,未内置。

六、注意事项

  • 后端环境变量名(DB_HOST/JWT_SECRET 等)需与实际 config 读取一致;如后端用别的变量名,改 docker-compose.ymlenvironment 即可。
  • JWT_SECRET 生产务必改成随机长串;默认值是占位的。
  • 生产可去掉 backend.ports8090:8090 暴露,仅由前端 nginx 在同一 compose 网络内反代访问,更安全。
  • 前端 PUBLIC_API_BASE 在 Dockerfile 中置空(同源 /api);如需独立域名,改为绝对地址并在后端已开启 CORS*)。