Files
CapacityReport/DEPLOY.md
T

179 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.
# CapacityReport Docker 部署指南
## 环境要求
- Docker Engine 20.10+
- Docker Compose 2.0+
## 快速启动
```bash
# 启动所有服务
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止服务
docker-compose down
```
## 内网离线部署
### 步骤1:准备镜像(在有外网的机器上)
```bash
# 拉取所需镜像
docker pull python:3.11-slim
docker pull mysql:8.0
# 导出为文件
docker save -o capacity-images.tar python:3.11-slim mysql:8.0
# 将 capacity-images.tar 传输到目标机器
```
### 步骤2:加载镜像(在目标机器上)
```bash
# 加载镜像
docker load -i capacity-images.tar
```
### 步骤3:构建并启动
```bash
# 构建应用镜像
docker-compose build
# 启动服务
docker-compose up -d
```
## 配置说明
### 数据库连接
Docker 环境下,需要修改 `Configure.json` 中的数据库地址:
```json
{
"MySQL_DBInfo": {
"host": "mysql",
"port": 3306,
"user": "root",
"passwd": "gmcc123",
"dbname": "CapacityReport"
}
}
```
**注意**:
- Docker Compose 中 host 应设置为 `mysql`(服务名),而不是 `localhost` 或 `127.0.0.1`
- 数据库 `CapacityReport` 会在容器首次启动时自动创建(使用 utf8mb4 字符集)
- 如果数据目录已存在(从持久化卷恢复),数据库不会被重复创建,这是安全的
### 端口映射
| 服务 | 端口 | 说明 |
|-----|------|-----|
| app | 9081 | Web 应用 |
| mysql | 3306 | MySQL 数据库 |
## LOAD DATA INFILE 支持
MySQL 容器已配置支持 `LOAD DATA LOCAL INFILE`:
1. 服务端配置:`mysql/conf.d/custom.cnf` 中 `local_infile = ON`
2. 启动参数:`--local-infile=ON`
3. Python 客户端:PyMySQL 连接时 `local_infile=True`
验证是否启用:
```bash
docker exec -it capacity-mysql mysql -uroot -pgmcc123 -e "SHOW VARIABLES LIKE 'local_infile';"
```
预期输出:
```
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile | ON |
+---------------+-------+
```
## 数据持久化
| 路径 | 说明 |
|-----|-----|
| ./cache | 处理缓存和历史记录 |
| ./logs | 应用日志 |
| mysql-data | MySQL 数据(Docker 卷) |
## 常用命令
```bash
# 查看运行状态
docker-compose ps
# 查看应用日志
docker-compose logs -f app
# 查看 MySQL 日志
docker-compose logs -f mysql
# 重启应用
docker-compose restart app
# 进入应用容器
docker exec -it capacity-report bash
# 进入 MySQL
docker exec -it capacity-mysql mysql -uroot -pgmcc123
# 备份数据库
docker exec capacity-mysql mysqldump -uroot -pgmcc123 CapacityReport > backup.sql
# 恢复数据库
docker exec -i capacity-mysql mysql -uroot -pgmcc123 CapacityReport < backup.sql
# 清空数据重新开始
docker-compose down -v
docker-compose up -d
```
## 故障排查
### 应用无法连接 MySQL
1. 检查 MySQL 是否就绪:
```bash
docker-compose logs mysql
```
2. 验证 MySQL 健康状态:
```bash
docker exec capacity-mysql mysqladmin ping -uroot -pgmcc123
```
3. 检查 Configure.json 中 host 设置是否为 `mysql`
### LOAD DATA INFILE 不工作
1. 检查 MySQL 变量:
```bash
docker exec -it capacity-mysql mysql -uroot -pgmcc123 -e "SHOW VARIABLES LIKE 'local_infile';"
```
2. 检查配置文件:
```bash
docker exec -it capacity-mysql cat /etc/mysql/conf.d/custom.cnf
```
### cache 目录权限问题
```bash
chmod -R 777 cache/
```