# 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/design/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/design/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/design/2026-03-13-ccdi-docker-deployment-design.md docs/plans/backend/2026-03-13-ccdi-docker-deployment-backend-implementation.md docs/plans/frontend/2026-03-13-ccdi-docker-deployment-frontend-implementation.md
git commit -m "新增Docker后端部署方案"
```
