fix(install): 安装向导 Redis 密码不被 nx update/Compose 覆盖

Compose 不再注入 NEXUS_REDIS_URL;nx update 保留卷内带密码 URL;步骤 4 可从 install state 修复无密码 URL。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Nexus Deploy
2026-06-06 11:34:26 +08:00
parent beb802802a
commit 850038a3ec
5 changed files with 102 additions and 5 deletions
+27 -1
View File
@@ -408,6 +408,27 @@ def _init_db_request_from_redis_url(redis_url: str) -> InitDbRequest | None:
)
def _redis_repair_request(redis_url: str) -> InitDbRequest | None:
"""Build InitDbRequest for connection-check repair (URL + install state password)."""
req = _init_db_request_from_redis_url(redis_url)
if not req:
return None
if (req.redis_pass or "").strip():
return req
if not STATE_FILE.is_file():
return req
import json
try:
state = json.loads(read_utf8_text(STATE_FILE))
except (json.JSONDecodeError, OSError):
return req
saved_pass = (state.get("redis_pass") or "").strip()
if saved_pass:
return req.model_copy(update={"redis_pass": saved_pass})
return req
def _mask_redis_url(redis_url: str) -> str:
parsed = urlparse(redis_url)
if not parsed.password:
@@ -957,7 +978,7 @@ async def connection_check():
resolved_display: str | None = None
if not redis_ok and redis_url:
req_from_env = _init_db_request_from_redis_url(redis_url)
req_from_env = _redis_repair_request(redis_url)
if req_from_env:
ok, msg, resolved = _resolve_redis_url(_sanitize_redis_request(req_from_env))
if ok and resolved:
@@ -1124,6 +1145,11 @@ async def init_db(req: InitDbRequest):
"install_dir": install_dir,
"site_url": site_url,
"api_port": req.api_port,
"redis_host": req.redis_host,
"redis_port": req.redis_port,
"redis_db": req.redis_db,
# Step 4 connection-check repair only; removed when install locks
"redis_pass": req.redis_pass,
"guardian_results": guardian_results,
"docker_mode": _is_docker_install_mode(),
"step": 4,