面向 AI 代理的工作者: 必需子技能:使用 superpowers:executing-plans 逐任务实现此计划。步骤使用复选框(
- [ ])语法来跟踪进度。
目标: 构建可升级的 Docker 服务,并保证 SQLite 始终由宿主机 ./data 持久保存。
架构: 多阶段 Dockerfile 生成包含前端静态资源的 Spring Boot JAR;Compose 通过 bind mount 将 ./data 映射到 /app/data。启动脚本只准备目录,由应用现有初始化器区分首次建库和增量升级。
技术栈: Docker、Docker Compose、Node 20、Maven 3.9、Eclipse Temurin 17、Spring Boot、SQLite。
镜像名称: emoon-okr。
文件:
创建:scripts/test-docker-config.sh
[ ] 编写断言:Dockerfile 多阶段构建、Compose 使用 ./data:/app/data、数据源及备份目录指向 /app/data、.dockerignore 排除运行数据。
[ ] 运行 bash scripts/test-docker-config.sh,确认因文件缺失而失败。
[ ] 保留该脚本作为后续 Docker 配置回归测试。
文件:
Dockerfiledocker/entrypoint.sh创建:.dockerignore
[ ] 使用 Node 阶段执行 npm ci && npm run build。
[ ] 使用 Maven 阶段复制前端产物并执行 mvn package -DskipTests。
[ ] 使用 JRE 阶段安装 gosu,启动时创建并检查 /app/data,再以非 root 用户运行 JAR。
[ ] 运行配置契约测试,确认通过。
文件:
compose.yaml.env.example创建:docs/docker-deployment.md
[ ] 将宿主机 ./data 绑定到 /app/data,显式配置 SQLite URL 和备份目录。
[ ] 提供 JWT、管理员密码和 CORS 必填环境变量示例。
[ ] 记录首次部署、升级、备份和恢复命令,明确禁止删除 ./data。
[ ] 运行 docker compose config 验证配置可解析。
文件:
创建:scripts/test-docker-persistence.sh
[ ] 在临时宿主机目录启动容器,确认自动生成 SQLite 文件。
[ ] 向数据库写入哨兵数据,重建同一镜像的容器。
[ ] 确认数据库文件和哨兵数据仍存在,随后清理测试容器和临时目录。
[ ] 运行前后端全量测试与 git diff --check。