Files
frontend_v2/DEPLOY.md
toom1996 eee2265e15
Some checks failed
deploy / deploy (push) Has been cancelled
update
2026-08-26 19:42:10 +08:00

79 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 部署与 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/v1` 由 nginx 反代到 `backend:8090`(同源,无跨域)。
- **后端**:Go 二进制,监听 `8090`,连 `db` 服务。
- **构建期取数**:品牌页等通过 SSG 内部接口(`/api/v1/ssg/*`,基址 `BASE_API_SSG`,默认 `http://localhost:8091`)在构建时拉数据;运行期浏览器走同源 `/api/v1`(基址 `BASE_API` 置空)。
## 二、服务器目录约定
```bash
/opt/fashion/
├── test/ # 前端仓 git clone(含 docker-compose.yml / deploy.sh / Dockerfile / nginx.conf)
└── admin/
└── backend/ # 后端仓 git clone(含 Dockerfile)
```
初始化(在服务器上):
```bash
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 过去)执行:
```bash
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 网络内反代访问,更安全。
- 前端 `BASE_API` 在 Dockerfile 中置空(同源 `/api`);如需独立域名,改为绝对地址并在后端已开启 CORS(`*`)。