Files
thebet365/docs/Docker部署指南.md
Mars e52cac7444 feat(deploy): add Docker full-stack deployment and server pack scripts
Enable one-click production deploy via docker-compose.prod.yml, with deployment docs and zip packaging for Baota upload.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-08 16:24:06 +08:00

230 lines
5.9 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.
# TheBet365 Docker 全栈部署指南
本文档说明如何使用 Docker **一键部署** API、玩家前台、管理后台、PostgreSQL 与 Redis。
> 本地开发仍可使用根目录 `docker-compose.yml` 仅启动数据库,应用在本机 `pnpm dev` 运行。
---
## 一、架构
```text
浏览器
├─ :8080 player (Nginx) ── /api、/uploads ──► api (NestJS :3000)
└─ :8081 admin (Nginx) ── /api ────────────► api (NestJS :3000)
api ──► postgres:5432
└──► redis:6379
```
| 容器 | 默认端口 | 说明 |
|------|----------|------|
| `thebet365-player` | 8080 | 玩家 H5 前台 |
| `thebet365-admin` | 8081 | 管理后台(平台 + 代理) |
| `thebet365-api` | 3000 | NestJS API / Swagger |
| `thebet365-postgres` | 不对外暴露 | PostgreSQL 16 |
| `thebet365-redis` | 不对外暴露 | Redis 7 |
---
## 二、服务器要求
| 项目 | 要求 |
|------|------|
| 系统 | Linux推荐 Ubuntu 22.04+ |
| Docker | 24+ |
| Docker Compose | v2`docker compose` |
| 内存 | 建议 ≥ 2 GB首次构建需更多 |
| 磁盘 | 建议 ≥ 10 GB |
宝塔面板:左侧 **Docker** → 确认 Docker 服务已安装并运行。
---
## 三、一键部署(命令行)
### 1. 上传代码
将项目放到服务器,例如 `/www/wwwroot/thebet365`(宝塔 **文件** 上传或 `git clone`)。
### 2. 配置环境变量
```bash
cd /www/wwwroot/thebet365
cp .env.docker.example .env.docker
```
**生产环境务必修改:**
- `POSTGRES_PASSWORD` — 数据库密码
- `JWT_SECRET` — 足够长的随机字符串
- 首次部署可保持 `SEED_DATABASE=true`,写入演示账号与默认数据;**种子跑完后改回 `false` 并重启 api**
### 3. 构建并启动
```bash
docker compose -f docker-compose.prod.yml --env-file .env.docker up -d --build
```
或使用脚本:
```bash
chmod +x scripts/docker-up.sh
./scripts/docker-up.sh
```
### 4. 查看状态
```bash
docker compose -f docker-compose.prod.yml --env-file .env.docker ps
docker compose -f docker-compose.prod.yml --env-file .env.docker logs -f api
```
启动成功后访问:
| 服务 | 地址 |
|------|------|
| 玩家前台 | http://服务器IP:8080 |
| 管理后台 | http://服务器IP:8081 |
| API 文档 | http://服务器IP:3000/api/docs |
---
## 四、宝塔面板操作
### 方式 A容器编排推荐
1. **文件** — 上传/克隆项目到 `/www/wwwroot/thebet365`
2. **终端** — 执行 `cp .env.docker.example .env.docker` 并编辑密钥
3. **Docker****容器编排****添加**
- 编排文件:选择 `docker-compose.prod.yml`
- 环境文件:选择 `.env.docker`(若面板支持)
4. **构建并启动**
若面板不支持指定 env 文件,在 **终端** 中执行第三节第 3 步命令即可。
### 方式 B绑定域名Nginx 反代)
在宝塔 **网站** 中为玩家站、管理站分别建站,**不**使用 PHP只做反向代理
**玩家站**(根目录可留空或任意):
```nginx
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
```
**管理站** — 将 `8080` 改为 `8081`
API 端口 3000 建议**不要**直接公网暴露Swagger 仅供内网或通过 VPN 访问。
---
## 五、演示账号
`SEED_DATABASE=true` 首次启动后可用(详见 [默认数据说明.md](./默认数据说明.md)
| 角色 | 用户名 | 密码 | 入口 |
|------|--------|------|------|
| 平台管理员 | admin | Admin@123 | 管理后台 :8081 |
| 一级代理 | agent1 | Agent@123 | 管理后台 :8081 |
| 玩家 | player1 | Player@123 | 玩家前台 :8080 |
---
## 六、常用命令
```bash
# 停止
docker compose -f docker-compose.prod.yml --env-file .env.docker down
# 停止并删除数据卷(清空数据库,慎用)
docker compose -f docker-compose.prod.yml --env-file .env.docker down -v
# 仅重建 API
docker compose -f docker-compose.prod.yml --env-file .env.docker up -d --build api
# 手动种子(容器已运行时)
docker compose -f docker-compose.prod.yml --env-file .env.docker exec api npx prisma db seed
# 查看 API 日志
docker compose -f docker-compose.prod.yml --env-file .env.docker logs -f api
```
根目录 `package.json` 快捷脚本(需已存在 `.env.docker`
```bash
pnpm docker:up
pnpm docker:down
pnpm docker:logs
pnpm docker:ps
```
---
## 七、数据持久化
| 卷名 | 内容 |
|------|------|
| `postgres_data` | 数据库 |
| `redis_data` | Redis |
| `uploads_data` | Banner 等用户上传文件 |
备份 PostgreSQL 示例:
```bash
docker exec thebet365-postgres pg_dump -U thebet365 thebet365 > backup.sql
```
---
## 八、更新部署
```bash
cd /www/wwwroot/thebet365
git pull # 或重新上传代码
docker compose -f docker-compose.prod.yml --env-file .env.docker up -d --build
```
API 容器启动时会自动执行 `prisma migrate deploy`,无需手动迁移。
---
## 九、故障排查
### 1. API 一直重启
```bash
docker logs thebet365-api
```
常见原因:数据库未就绪(稍等重试)、`DATABASE_URL` 密码与 `POSTGRES_PASSWORD` 不一致。
### 2. 前端 502 / 接口失败
确认 `thebet365-api` 为 running且 player/admin 容器能解析主机名 `api`(同一 compose 网络)。
### 3. 构建慢或内存不足
首次 `docker compose build` 会安装 pnpm 依赖并编译三端,建议服务器 ≥ 2 GB 内存;可在低峰期构建。
### 4. 端口被占用
修改 `.env.docker` 中的 `API_PORT` / `PLAYER_PORT` / `ADMIN_PORT` 后重新 `up -d`
---
## 十、与本地开发的区别
| 场景 | 命令 |
|------|------|
| 本地开发(仅 DB 用 Docker | `docker compose up -d` + `pnpm dev` |
| 生产全栈 Docker | `docker compose -f docker-compose.prod.yml --env-file .env.docker up -d --build` |
相关文档:[项目启动指南.md](./项目启动指南.md)