137 lines
3.9 KiB
Markdown
137 lines
3.9 KiB
Markdown
# CCDI Docker 后端部署 Implementation Plan
|
|
|
|
> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
|
|
|
|
**Goal:** 为 Spring Boot 后端与 `lsfx mock server` 建立可构建、可上传、可在服务器运行的 Docker 部署链路。
|
|
|
|
**Architecture:** 后端产物继续使用 Maven 构建出的 `ruoyi-admin.jar`,运行时通过 Java 21 容器加载 `local` profile。`lsfx mock server` 作为独立 Python 服务纳入仓库,并在 Compose 中与后端共享网络命名空间,以兼容现有 `http://localhost:8000` 配置。
|
|
|
|
**Tech Stack:** Maven, Spring Boot 3, Java 21, Docker Compose, Python 3.11, FastAPI, PowerShell, Paramiko
|
|
|
|
---
|
|
|
|
### Task 1: 整理 `lsfx mock server` 到主仓库
|
|
|
|
**Files:**
|
|
- Create: `lsfx-mock-server/**`
|
|
- Modify: `docs/plans/2026-03-13-ccdi-docker-deployment-design.md`
|
|
- Test: `lsfx-mock-server/tests/test_api.py`
|
|
|
|
**Step 1: 复制并清理运行文件**
|
|
|
|
- 从现有工作树复制 `main.py`、`config/`、`models/`、`routers/`、`services/`、`utils/`、`requirements.txt`、`tests/`
|
|
- 排除 `__pycache__`、`.pytest_cache`
|
|
|
|
**Step 2: 运行 mock server 测试**
|
|
|
|
Run: `python -m pytest lsfx-mock-server/tests -q`
|
|
Expected: 测试通过,接口与健康检查可用
|
|
|
|
**Step 3: 修正最小必要问题**
|
|
|
|
- 若路径、依赖或导入失败,仅做最小修复
|
|
|
|
**Step 4: 记录目录用途**
|
|
|
|
- 在 `lsfx-mock-server/README.md` 补充与主项目集成的启动说明
|
|
|
|
### Task 2: 编写后端与 mock 的 Docker 文件
|
|
|
|
**Files:**
|
|
- Create: `docker/backend/Dockerfile`
|
|
- Create: `docker/mock/Dockerfile`
|
|
- Modify: `lsfx-mock-server/README.md`
|
|
|
|
**Step 1: 创建后端镜像定义**
|
|
|
|
- 使用 Java 21 运行时镜像
|
|
- 工作目录统一为 `/app`
|
|
- 复制 `backend/ruoyi-admin.jar`
|
|
- 默认入口使用 `java -jar /app/ruoyi-admin.jar`
|
|
|
|
**Step 2: 创建 mock 镜像定义**
|
|
|
|
- 使用 `python:3.11-slim`
|
|
- 安装 `lsfx-mock-server/requirements.txt`
|
|
- 启动 `python main.py`
|
|
|
|
**Step 3: 本地验证镜像定义**
|
|
|
|
Run: `docker build -f docker/mock/Dockerfile -t ccdi-lsfx-mock:test .`
|
|
Expected: 构建成功
|
|
|
|
### Task 3: 编写 Compose 编排
|
|
|
|
**Files:**
|
|
- Create: `docker-compose.yml`
|
|
- Create: `.env.example`
|
|
|
|
**Step 1: 定义 `backend` 服务**
|
|
|
|
- 端口映射 `62318:8080`
|
|
- 环境变量包含 `SPRING_PROFILES_ACTIVE=local` 与 `RUOYI_PROFILE=/app/data/ruoyi`
|
|
- 卷挂载运行目录与日志目录
|
|
|
|
**Step 2: 定义 `lsfx-mock-server` 服务**
|
|
|
|
- 使用 `network_mode: "service:backend"`
|
|
- 依赖 `backend`
|
|
- 不额外对外暴露端口
|
|
|
|
**Step 3: 做配置校验**
|
|
|
|
Run: `docker compose config`
|
|
Expected: Compose 文件能正常展开且无语法错误
|
|
|
|
### Task 4: 编写后端打包与远端部署脚本
|
|
|
|
**Files:**
|
|
- Create: `deploy/deploy.ps1`
|
|
- Create: `deploy/remote-deploy.py`
|
|
|
|
**Step 1: 编写本地打包流程**
|
|
|
|
- 执行 Maven 打包
|
|
- 收集 `ruoyi-admin.jar`
|
|
- 检查 `lsfx-mock-server` 运行文件完整性
|
|
|
|
**Step 2: 编写上传脚本**
|
|
|
|
- 使用 Paramiko 建立 SSH 与 SFTP 连接
|
|
- 创建远端目录 `/volume1/webapp/ccdi`
|
|
- 上传 Compose、Dockerfile、后端 JAR、mock 目录
|
|
|
|
**Step 3: 编写远端启动命令**
|
|
|
|
- 兼容 `docker compose` 与 `docker-compose`
|
|
- 执行 `up -d --build`
|
|
- 返回容器状态与后端日志摘要
|
|
|
|
### Task 5: 构建与联调验证
|
|
|
|
**Files:**
|
|
- Modify: `docs/plans/2026-03-13-ccdi-docker-deployment-design.md`
|
|
|
|
**Step 1: 本地构建后端**
|
|
|
|
Run: `mvn clean package -DskipTests`
|
|
Expected: `ruoyi-admin/target/ruoyi-admin.jar` 生成成功
|
|
|
|
**Step 2: 本地跑通 Compose 校验**
|
|
|
|
Run: `docker compose config`
|
|
Expected: 无错误
|
|
|
|
**Step 3: 远端部署验证**
|
|
|
|
- 验证 `backend` 容器启动
|
|
- 验证 `mock server` 在后端网络命名空间内可访问
|
|
- 验证 `http://116.62.17.81:62318/swagger-ui/index.html`
|
|
|
|
**Step 4: 提交**
|
|
|
|
```bash
|
|
git add lsfx-mock-server docker docker-compose.yml .env.example deploy docs/plans/2026-03-13-ccdi-docker-deployment-*.md
|
|
git commit -m "新增Docker后端部署方案"
|
|
```
|