3cec226b89
- 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>
2.4 KiB
2.4 KiB
Docker 容器化设计
背景与目标
Nexus 此前仅支持 Supervisor + 裸机部署。需要提供 Docker Compose 一键拉起 MySQL、Redis 与 FastAPI,便于本地开发、CI 与可选生产部署,且不改变 Clean Architecture 与安装向导流程。
方案对比
| 方案 | 优点 | 缺点 |
|---|---|---|
| 仅 Dockerfile | 简单 | 仍需自备 MySQL/Redis |
| Compose 全栈 | 一键、可复现 | 需处理 .env 与安装模式 |
| K8s | 大规模 | 过重,非当前需求 |
选定:Dockerfile + docker-compose.yml(mysql + 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或 Composeenvironment+ 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 /health→ok。
验收标准
docker compose up -d --build后curl http://localhost:8600/health为ok- 无
docker/.env时可打开/app/install.html - 配置
docker/.env后重启仍保持登录态与 DB 数据 docs/changelog与docker/README含启动说明