3.4 KiB
3.4 KiB
部署与 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服务。 - 构建期 SSR:
brands.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/CD(Gitea 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.yml的environment即可。 JWT_SECRET生产务必改成随机长串;默认值是占位的。- 生产可去掉
backend.ports的8090:8090暴露,仅由前端 nginx 在同一 compose 网络内反代访问,更安全。 - 前端
PUBLIC_API_BASE在 Dockerfile 中置空(同源/api);如需独立域名,改为绝对地址并在后端已开启 CORS(*)。