Files

28 lines
1.2 KiB
Markdown
Raw Permalink Normal View History

# 2026-06-06 — Docker .env 持久化与 entrypoint 覆盖修复
## 摘要
修复 1Panel 安装向导完成后 `nx update`/容器重启导致 `nexus-state` 卷内 `.env` 缺少 `NEXUS_DATABASE_URL`、应用连 `127.0.0.1` 崩溃的问题。
## 动机
- `init-db` 仅写 `/app/.env`,卷同步依赖容器 EXIT trap,重建容器时 `restore_persisted_env` 可能恢复 entrypoint 生成的简版 env。
- `write_env_from_environment``NEXUS_INSTALL_WIZARD_PENDING=0` 时用 `env | grep NEXUS_` 写卷,Compose 无 `NEXUS_DATABASE_URL`
## 涉及文件
- `server/api/install.py``_sync_env_to_persist_volume``init-db` / Redis 修补 / lock 后立即同步卷
- `docker/entrypoint.sh` — 无 `NEXUS_DATABASE_URL` 的卷不 restore;无 `NEXUS_DATABASE_URL` 环境变量时不生成 `.env``export_app_env` 在启动前 source `/app/.env`,使向导写入的 `DATABASE_URL` / `REDIS_URL` 覆盖 Compose 占位符
## 迁移 / 重启
已损坏的卷内 `.env` 需手工补全 `NEXUS_DATABASE_URL` 与 Redis URL 后 `docker start`;新装/重装向导自动同步。
## 验证
```bash
.venv/bin/pytest tests/test_security_unit.py -q
# 向导 init-db 后:
docker exec nexus-prod-nexus-1 grep NEXUS_DATABASE_URL /var/lib/nexus/.env
```