120 lines
3.4 KiB
Markdown
120 lines
3.4 KiB
Markdown
# Docker 部署指南
|
||
|
||
本项目提供两种部署:开发环境与生产环境。以下说明已与当前 `docker-compose` 配置、镜像与反向代理实现对齐。
|
||
|
||
## 开发环境
|
||
|
||
使用 `docker compose`(Docker Desktop 或 Docker CE 20.10+):
|
||
|
||
```bash
|
||
# 启动(首次建议带 --build)
|
||
docker compose up -d --build
|
||
|
||
# 查看状态/日志
|
||
docker compose ps
|
||
docker compose logs -f backend
|
||
|
||
# 停止
|
||
docker compose down
|
||
```
|
||
|
||
### 访问地址(开发)
|
||
- 前端: http://localhost:18080
|
||
- 后端 API: http://localhost:18888
|
||
- MySQL: localhost:13306(数据库、用户、密码见 compose)
|
||
|
||
## 生产环境
|
||
|
||
使用 `docker-compose.prod.yml`:
|
||
|
||
```bash
|
||
# 启动生产环境
|
||
docker compose -f docker-compose.prod.yml up -d
|
||
|
||
# 查看服务状态
|
||
docker compose -f docker-compose.prod.yml ps
|
||
```
|
||
|
||
### 生产配置说明
|
||
- 后端配置文件已通过卷挂载至容器内:
|
||
- 开发:`backend/configs/config.dev.yaml` → 容器内 `/app/backend/cmd/config.yaml`
|
||
- 生产:`backend/configs/config.prod.yaml` → 容器内 `/app/backend/cmd/config.yaml`
|
||
- 前端 Nginx 反向代理已指向容器网络内的 `backend:18888`,无需依赖 `host.docker.internal`。
|
||
- 健康检查统一使用 `curl`,后端镜像已内置 `curl`。
|
||
- 如需隐藏后端对外端口,可在生产 compose 中移除后端端口映射,仅通过前端或网关暴露。
|
||
|
||
## 服务说明
|
||
|
||
### MySQL 8.0
|
||
- 端口:3306(生产)/ 13306(开发宿主机映射)
|
||
- 库:`license_manager`,用户:`license_user`
|
||
- 字符集/排序:`utf8mb4`/`utf8mb4_unicode_ci`
|
||
- 开启慢查询日志(生产)
|
||
|
||
### 后端服务
|
||
- 端口:18888
|
||
- 健康检查:`/health`
|
||
- 配置:通过卷挂载 `config.dev.yaml` / `config.prod.yaml` 为容器内 `config.yaml`
|
||
- 日志:标准输出 + `./logs` 挂载目录
|
||
|
||
### 前端服务
|
||
- 端口:80(生产)/ 18080(开发映射)
|
||
- 反向代理:`/api/` → `backend:18888`
|
||
- 静态资源:启用 Gzip 与长缓存
|
||
|
||
### Redis(可选,仅生产)
|
||
- 端口:6379,AOF 持久化
|
||
|
||
## 常用命令
|
||
|
||
```bash
|
||
# 重新构建镜像
|
||
docker compose build
|
||
|
||
# 启动指定服务
|
||
docker compose up -d mysql backend
|
||
|
||
# 进入容器
|
||
docker compose exec backend sh
|
||
docker compose exec mysql mysql -uroot -p
|
||
|
||
# 备份/恢复数据库
|
||
docker compose exec mysql mysqldump -uroot -p license_manager > backup.sql
|
||
docker compose exec -T mysql mysql -uroot -p license_manager < backup.sql
|
||
|
||
# 清理未使用资源
|
||
docker system prune -f
|
||
```
|
||
|
||
## 故障排查
|
||
|
||
1) MySQL 启动失败
|
||
```bash
|
||
docker compose logs mysql
|
||
docker compose down -v && docker compose up -d
|
||
```
|
||
|
||
2) 后端连接数据库失败
|
||
```bash
|
||
# 确认 MySQL 健康
|
||
docker compose ps
|
||
|
||
# 检查容器内配置(已挂载到 /app/backend/cmd/config.yaml)
|
||
docker compose exec backend cat /app/backend/cmd/config.yaml
|
||
```
|
||
|
||
3) 前端无法访问后端 API
|
||
```bash
|
||
# 容器内连通性
|
||
docker compose exec frontend sh -c "curl -sS http://backend:18888/health"
|
||
|
||
# 检查 nginx 配置
|
||
docker compose exec frontend cat /etc/nginx/conf.d/default.conf
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
- 生产环境请修改默认账号、数据库口令与 JWT 秘钥(见 `backend/configs/config.prod.yaml`)。
|
||
- 如使用较新 Docker,YAML 顶部 `version` 字段会被忽略,可按需移除提示。
|
||
- `deploy.resources` 仅在 Swarm/K8s 生效,单机 Compose 可忽略。
|
||
- 如置于公网,建议仅暴露前端端口,通过前端或网关转发后端 API。 |