# 2026-06-04 — 生产 Compose 移除外置 MySQL

## 摘要

生产 Docker 栈从「MySQL + Nexus」改为**仅 Nexus 容器**；MySQL 与 Redis 均由用户在宿主机或 1Panel 自行安装，安装向导步骤 3 填写连接信息。

## 动机

- 用户希望数据库自行创建与管理，不随安装脚本附带 MySQL 容器与自动密码。
- 与已移除外置 Redis Compose 服务的设计一致，降低 bind mount / 卷冲突风险。

## 涉及文件

| 文件 | 变更 |
|------|------|
| `docker/docker-compose.prod.yml` | 移除 `mysql` 服务与数据卷 |
| `docker/.env.prod.example` | 移除 `MYSQL_*` |
| `docker/profiles/*.env` | 移除 `MYSQL_CNF_FILE` 等 |
| `docker/entrypoint.sh` | MySQL 等待改为 `host.docker.internal`（可选） |
| `scripts/generate_nexus_secrets.py` | 新机仅生成 `NEXUS_*` |
| `deploy/nexus-1panel.sh` | 备份改读外置 `NEXUS_DATABASE_URL` |
| `deploy/uninstall-mysql-compose.sh` | 卸载遗留 Compose MySQL 容器 |
| `deploy/README-1panel.md` / `docker/README.md` | 文档更新 |
| `web/app/install.html` | MySQL 自建说明 |
| `server/api/install.py` | Docker 默认 `db_host=host.docker.internal` |

## 迁移 / 重启

```bash
cd /opt/nexus && git pull
bash deploy/uninstall-mysql-compose.sh          # 可选：删旧 Compose MySQL
bash deploy/nexus-1panel.sh upgrade
bash deploy/sync-install-wizard-to-container.sh
```

自建 MySQL 后完成 `/app/install.html` 步骤 3（主机 `host.docker.internal`）。

## 验证

- `docker compose -f docker/docker-compose.prod.yml config` 仅含 `nexus` 服务
- `python3 scripts/generate_nexus_secrets.py write-prod --fresh` 输出无 `MYSQL_*`
- 安装向导步骤 3 可连接外置 MySQL 并完成 `init-db`
- `docker ps` 无 `nexus-prod-mysql-*`；`nexus-1panel.sh upgrade` 自动 `--remove-orphans`

## 2026-06-04 补充

- `install` / `upgrade` 前自动执行 `uninstall-mysql-compose.sh`
- `compose up` 增加 `--remove-orphans`，从 `nexus-prod` 项目移除已删服务的孤儿容器
