From 3e2dcfbced610175b7dd86d64515270d16209dcd Mon Sep 17 00:00:00 2001 From: Lxy Date: Sun, 24 May 2026 09:24:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9docker=E6=89=93?= =?UTF-8?q?=E5=8C=85=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DOCKER_DEPLOY.md | 215 +++++++++++++++++++++++++++++---------------- Dockerfile | 7 +- docker-compose.yml | 26 ++++-- 3 files changed, 161 insertions(+), 87 deletions(-) diff --git a/DOCKER_DEPLOY.md b/DOCKER_DEPLOY.md index 0e48975..72271cc 100644 --- a/DOCKER_DEPLOY.md +++ b/DOCKER_DEPLOY.md @@ -1,56 +1,62 @@ -# 数据缓冲平台 Docker 部署文档 +# 期货智析缓冲平台 - Docker部署文档 ## 目录结构 ``` buffer_platform/ ├── app/ # 应用代码 -├── config/ # 配置文件 -├── data/ # 本地数据目录 -├── Dockerfile # Docker 镜像构建文件 -├── docker-compose.yml # Docker Compose 配置文件 -├── .dockerignore # Docker 构建忽略文件 -└── requirements.txt # Python 依赖 +├── static/ # 前端静态文件 +├── data/ # 本地数据目录(开发用) +├── Dockerfile # Docker镜像构建文件 +├── docker-compose.yml # Docker Compose配置文件 +├── .env # 环境变量配置 +├── .dockerignore # Docker构建忽略文件 +├── requirements.txt # Python依赖 +├── deploy.bat # 一键部署脚本 +├── start.bat # 启动服务 +├── stop.bat # 停止服务 +├── logs.bat # 查看日志 +└── backup.bat # 数据库备份 ``` ## 环境要求 - Docker Desktop for Windows - Docker Compose v3.8+ -- Windows 10/11 或 Windows Server +- Windows 10/11 ## 快速部署 -### 1. 构建并启动容器 +### 方式一:一键部署(推荐) ```powershell -cd d:\alpha_workspace\buffer_platform -docker-compose up -d --build +cd e:\docker_workspace\cobot2.0_WorkHorse\app\working\workspaces\default\share_data\project\market_data_colector_platform\buffer_platform +deploy.bat ``` -### 2. 查看容器状态 +### 方式二:手动部署 ```powershell -docker-compose ps -``` - -### 3. 查看日志 +# 1. 创建数据目录 +mkdir E:\docker_workspace\futures_datas +mkdir E:\docker_workspace\futures_datas\logs -```powershell -# 查看实时日志 -docker-compose logs -f +# 2. 构建并启动 +docker-compose up -d --build -# 查看最近 100 行日志 -docker-compose logs --tail=100 +# 3. 查看状态 +docker-compose ps ``` ## 访问地址 -| 服务 | 地址 | +| 页面 | 地址 | |------|------| -| 前端页面 | http://localhost:9600/ui | -| API 文档 | http://localhost:9600/docs | -| 健康检查 | http://localhost:9600/api/v1/health | +| **品种分析** | http://localhost:9600/futures-analysis | +| **配置管理** | http://localhost:9600/ui | +| **AI配置** | http://localhost:9600/ai-config | +| **API文档** | http://localhost:9600/docs | +| **健康检查** | http://localhost:9600/api/v1/health | ## 数据持久化 @@ -58,7 +64,8 @@ docker-compose logs --tail=100 | 宿主机路径 | 容器路径 | 说明 | |-----------|----------|------| -| `E:\docker_workspace\futures_datas` | `/app/data` | SQLite 数据库及缓存数据 | +| `E:\docker_workspace\futures_datas` | `/app/data` | SQLite数据库及缓存数据 | +| `E:\docker_workspace\futures_datas\logs` | `/app/logs` | 日志文件 | ### 数据目录结构 @@ -66,67 +73,58 @@ docker-compose logs --tail=100 ``` E:\docker_workspace\futures_datas\ -└── buffer.db # SQLite 数据库文件 +├── buffer.db # SQLite数据库文件 +├── futures_analysis.db # AI分析数据库 +└── logs/ # 日志目录 + └── (应用日志文件) ``` -## 常用操作 +## 常用管理命令 -### 停止服务 +### 使用批处理脚本 ```powershell -docker-compose stop +deploy.bat # 一键部署 +start.bat # 启动服务 +stop.bat # 停止服务 +logs.bat # 查看日志 +backup.bat # 数据库备份 ``` -### 启动服务 +### 使用Docker Compose命令 ```powershell +# 启动服务 docker-compose start -``` -### 重启服务 +# 停止服务 +docker-compose stop -```powershell +# 重启服务 docker-compose restart -``` - -### 停止并删除容器 - -```powershell -docker-compose down -``` -### 停止并删除容器及数据卷 - -> ⚠️ 警告:此操作将删除所有持久化数据! +# 查看状态 +docker-compose ps -```powershell -docker-compose down -v -``` +# 查看日志 +docker-compose logs -f -### 重新构建并启动 +# 停止并删除容器 +docker-compose down -```powershell +# 重新构建并启动 docker-compose up -d --build ``` -### 更新镜像 - -```powershell -# 拉取最新代码后 -docker-compose down -docker-compose build --no-cache -docker-compose up -d -``` - ## 环境变量配置 -可在 `docker-compose.yml` 中修改以下环境变量: +可在 `.env` 文件或 `docker-compose.yml` 中修改: | 变量名 | 默认值 | 说明 | |--------|--------|------| | `BUFFER_DB_PATH` | `/app/data/buffer.db` | 数据库文件路径 | | `BUFFER_HOST` | `0.0.0.0` | 服务监听地址 | -| `BUFFER_PORT` | `8600` | 容器内服务端口 | +| `BUFFER_PORT` | `8600` | 容器内端口 | | `CACHE_TTL` | `300` | 缓存过期时间(秒) | | `BUFFER_LOG_LEVEL` | `INFO` | 日志级别 | | `MAX_WORKERS` | `2` | 并发采集数 | @@ -137,19 +135,25 @@ docker-compose up -d ```yaml ports: - - "9600:8600" # 修改 9600 为其他端口 + - "9600:8600" # 将9600改为其他端口 ``` -## 数据备份 +## 数据备份与恢复 + +### 方式一:使用备份脚本 -### 备份数据库 +```powershell +backup.bat +``` + +### 方式二:手动备份 ```powershell # 停止服务 docker-compose stop -# 复制数据文件 -xcopy E:\docker_workspace\futures_datas\buffer.db E:\backup\buffer_$(Get-Date -Format 'yyyyMMdd').db +# 复制数据库 +xcopy E:\docker_workspace\futures_datas\buffer.db E:\backup\buffer_%date:~0,4%%date:~5,2%%date:~8,2%.db # 启动服务 docker-compose start @@ -161,8 +165,8 @@ docker-compose start # 停止服务 docker-compose stop -# 复制备份文件到数据目录 -copy E:\backup\buffer_20260517.db E:\docker_workspace\futures_datas\buffer.db +# 恢复数据库 +copy E:\backup\buffer_20260523.db E:\docker_workspace\futures_datas\buffer.db # 启动服务 docker-compose start @@ -178,40 +182,50 @@ docker-compose logs # 检查容器状态 docker ps -a + +# 删除容器重新构建 +docker-compose down +docker-compose up -d --build +``` + +### 端口冲突 + +```powershell +# 检查端口占用 +netstat -ano | findstr "9600" + +# 修改docker-compose.yml中的端口映射 ``` ### 数据库权限问题 -确保 `E:\docker_workspace\futures_datas` 目录存在且有写入权限: +确保数据目录存在: ```powershell -# 创建数据目录 mkdir E:\docker_workspace\futures_datas +mkdir E:\docker_workspace\futures_datas\logs ``` -### 端口冲突 +### 进入容器 ```powershell -# 检查端口占用 -netstat -ano | findstr "9600" +docker exec -it futures-buffer-platform /bin/bash ``` -### 进入容器 +### 查看资源使用 ```powershell -docker exec -it buffer-platform /bin/bash +docker stats futures-buffer-platform ``` ## 健康检查 -服务内置健康检查端点: - ```powershell # PowerShell Invoke-WebRequest -Uri http://localhost:9600/api/v1/health -# 或使用 curl -curl http://localhost:9600/api/v1/health +# 浏览器访问 +http://localhost:9600/api/v1/health ``` 正常响应: @@ -222,3 +236,48 @@ curl http://localhost:9600/api/v1/health "service": "market-data-buffer" } ``` + +## 更新应用 + +```powershell +# 1. 备份数据库 +backup.bat + +# 2. 停止服务 +docker-compose stop + +# 3. 删除旧容器 +docker-compose rm -f + +# 4. 重新构建 +docker-compose build --no-cache + +# 5. 启动新容器 +docker-compose up -d + +# 6. 验证服务 +curl http://localhost:9600/api/v1/health +``` + +## 安全建议 + +1. **定期备份数据库** - 使用 `backup.bat` 定期备份 +2. **监控日志** - 使用 `logs.bat` 查看异常 +3. **限制端口访问** - 防火墙只开放必要端口 +4. **数据目录权限** - 确保数据目录有适当权限 + +## 技术支持 + +遇到问题请查看日志: + +```powershell +logs.bat +``` + +或进入容器检查: + +```powershell +docker exec -it futures-buffer-platform /bin/bash +cd /app/logs +ls -la +``` diff --git a/Dockerfile b/Dockerfile index b673678..c682cbe 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,8 +21,11 @@ RUN pip install --no-cache-dir -r requirements.txt -i https://mirrors.aliyun.com COPY . . -RUN mkdir -p /app/data +RUN mkdir -p /app/data /app/logs EXPOSE 8600 -CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8600"] +HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ + CMD curl -f http://localhost:8600/api/v1/health || exit 1 + +CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8600", "--log-level", "info"] diff --git a/docker-compose.yml b/docker-compose.yml index 24b2411..e3bf4c8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,22 +2,34 @@ version: '3.8' services: buffer-platform: - build: . - container_name: buffer-platform + build: + context: . + dockerfile: Dockerfile + container_name: futures-buffer-platform + restart: unless-stopped ports: - "9600:8600" - volumes: - - E:\docker_workspace\futures_datas:/app/data environment: - BUFFER_DB_PATH=/app/data/buffer.db - BUFFER_HOST=0.0.0.0 - BUFFER_PORT=8600 - CACHE_TTL=300 - BUFFER_LOG_LEVEL=INFO - restart: unless-stopped + - MAX_WORKERS=2 + volumes: + # 数据持久化 - SQLite数据库 + - E:\docker_workspace\futures_datas:/app/data + # 日志持久化(可选) + - E:\docker_workspace\futures_datas\logs:/app/logs healthcheck: - test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8600/api/v1/health')"] + test: ["CMD", "curl", "-f", "http://localhost:8600/api/v1/health"] interval: 30s timeout: 10s retries: 3 - start_period: 40s + start_period: 10s + networks: + - futures-network + +networks: + futures-network: + driver: bridge