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

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` 由 nginx 反代到 `backend:8090`(同源,无跨域)。
- **后端**Go 二进制,监听 `8090`,连 `db` 服务。
- **构建期 SSR**`brands.astro` 在构建时拉数据,地址用 `API_SSR`(容器内部 `http://localhost:8090`,配合 `build.network: host` 访问已启动的 backend 容器);运行期浏览器走同源 `/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/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.yml``environment` 即可。
- `JWT_SECRET` 生产务必改成随机长串;默认值是占位的。
- 生产可去掉 `backend.ports``8090:8090` 暴露,仅由前端 nginx 在同一 compose 网络内反代访问,更安全。
- 前端 `PUBLIC_API_BASE` 在 Dockerfile 中置空(同源 `/api`);如需独立域名,改为绝对地址并在后端已开启 CORS`*`)。