Files
Nexus/docs/design/specs/2026-06-03-docker-design.md
T
Your Name 3cec226b89 feat(docker): add Compose stack for MySQL, Redis and Nexus API
- Dockerfile with healthcheck and entrypoint for deps + .env persistence
- generate_env.py for local secrets; design docs and changelog

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-03 00:58:46 +08:00

2.4 KiB
Raw Blame History

Docker 容器化设计

背景与目标

Nexus 此前仅支持 Supervisor + 裸机部署。需要提供 Docker Compose 一键拉起 MySQL、Redis 与 FastAPI,便于本地开发、CI 与可选生产部署,且不改变 Clean Architecture 与安装向导流程。

方案对比

方案 优点 缺点
仅 Dockerfile 简单 仍需自备 MySQL/Redis
Compose 全栈 一键、可复现 需处理 .env 与安装模式
K8s 大规模 过重,非当前需求

选定Dockerfile + docker-compose.ymlmysql + redis + nexus)。

架构

┌─────────────┐     ┌──────────┐     ┌─────────┐
│   Browser   │────▶│  nexus   │────▶│  mysql  │
│  :8600/app  │     │  :8600   │     │  :3306  │
└─────────────┘     └────┬─────┘     └─────────┘
                         │
                         ▼
                    ┌─────────┐
                    │  redis  │
                    │  :6379  │
                    └─────────┘
  • 单容器内 uvicorn 单 worker(后台任务由 Redis primary lock 协调;多副本可水平扩展)。
  • 静态前端:镜像内 web/app/(与 Git 跟踪的 Vite 产物一致)。
  • 安装模式:无 .env 时访问 /app/install.html
  • 正常模式docker/.env 或 Compose environment + entrypoint 写入 /app/.env 并持久化到 nexus-state 卷。

接口与配置

变量 说明
NEXUS_DATABASE_URL mysql+aiomysql://nexus:pass@mysql:3306/nexus
NEXUS_REDIS_URL redis://redis:6379/0
NEXUS_SECRET_KEY / API_KEY / ENCRYPTION_KEY 正常模式必填
NEXUS_DOCKER_WRITE_ENV 1 时由 entrypoint 从环境生成 .env

安全与性能

  • 默认密码仅用于开发;生产必须改 docker/.env 与 Compose secrets。
  • MySQL/Redis 数据用 named volume.env 同步到 nexus-state 卷(chmod 600)。
  • 健康检查:GET /healthok

验收标准

  • docker compose up -d --buildcurl http://localhost:8600/healthok
  • docker/.env 时可打开 /app/install.html
  • 配置 docker/.env 后重启仍保持登录态与 DB 数据
  • docs/changelogdocker/README 含启动说明