Files
license-manager/README-Docker.md
T
2025-08-09 01:34:49 +08:00

120 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.
# 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。