Files
Nexus/docker/sync_root_env.py
T
2026-07-08 22:31:31 +08:00

86 lines
2.7 KiB
Python

#!/usr/bin/env python3
"""Write project-root .env from docker/.env for host uvicorn (127.0.0.1 MySQL/Redis)."""
from __future__ import annotations
import sys
from pathlib import Path
from urllib.parse import quote_plus
ROOT = Path(__file__).resolve().parent.parent
if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT))
from server.utils.text_io import read_utf8_lf, write_utf8_lf
DOCKER_ENV = ROOT / "docker" / ".env"
OUT = ROOT / ".env"
def _parse(path: Path) -> dict[str, str]:
data: dict[str, str] = {}
for line in read_utf8_lf(path).splitlines():
line = line.strip()
if not line or line.startswith("#") or "=" not in line:
continue
key, _, value = line.partition("=")
data[key.strip()] = value.strip()
return data
def main() -> None:
if not DOCKER_ENV.exists():
raise SystemExit(f"Missing {DOCKER_ENV} — run: python3 docker/generate_env.py")
d = _parse(DOCKER_ENV)
mysql_pass = d.get("MYSQL_PASSWORD", "")
if not mysql_pass:
raise SystemExit("MYSQL_PASSWORD missing in docker/.env")
for key in ("NEXUS_SECRET_KEY", "NEXUS_API_KEY", "NEXUS_ENCRYPTION_KEY"):
if not d.get(key):
raise SystemExit(f"{key} missing in docker/.env — run generate_env.py")
db_user = "nexus"
db_pass_q = quote_plus(mysql_pass)
deploy = str(ROOT)
cors = d.get("NEXUS_CORS_ORIGINS", "http://localhost:8600,http://127.0.0.1:8600")
api_base = d.get("NEXUS_API_BASE_URL", "http://localhost:8600")
lines = [
"# Nexus .env — host uvicorn dev (from docker/sync_root_env.py)",
"",
"NEXUS_HOST=0.0.0.0",
"NEXUS_PORT=8600",
f"NEXUS_DEPLOY_PATH={deploy}",
f"NEXUS_CORS_ORIGINS={cors}",
f"NEXUS_API_BASE_URL={api_base}",
"",
f"NEXUS_DATABASE_URL=mysql+aiomysql://{db_user}:{db_pass_q}@127.0.0.1:3306/nexus",
"NEXUS_DB_POOL_SIZE=20",
"NEXUS_DB_MAX_OVERFLOW=10",
"",
f"NEXUS_SECRET_KEY={d['NEXUS_SECRET_KEY']}",
f"NEXUS_API_KEY={d['NEXUS_API_KEY']}",
f"NEXUS_ENCRYPTION_KEY={d['NEXUS_ENCRYPTION_KEY']}",
"",
"NEXUS_REDIS_URL=redis://127.0.0.1:6379/0",
"NEXUS_SSH_STRICT_HOST_CHECKING=false",
"",
"# MySQL MCP (optional): python3 scripts/sync_mysql_mcp_env.py",
"MYSQL_HOST=127.0.0.1",
"MYSQL_PORT=3306",
f"MYSQL_USER={db_user}",
f"MYSQL_PASSWORD={mysql_pass}",
"MYSQL_DATABASE=nexus",
"MYSQL_READONLY=false",
"MYSQL_DATABASE_ALLOWLIST=nexus",
]
write_utf8_lf(OUT, "\n".join(lines) + "\n")
OUT.chmod(0o600)
print(f"Wrote {OUT}")
if __name__ == "__main__":
main()