64 lines
2.1 KiB
Python
64 lines
2.1 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
将 kr 宝塔(或任意面板)下载的环境文件写入 api/.env,并可选追加本机覆盖层。
|
||
|
||
用法:
|
||
python3 scripts/apply_bt_download_env.py ~/Downloads/mbti_api.env
|
||
|
||
可选: 在 api 目录放置 .env.local.merge(勿提交,已加入 .gitignore),
|
||
脚本会在主内容后追加,便于覆盖宝塔里写死的 127.0.0.1 数据库等为本地隧道端口等。
|
||
"""
|
||
from __future__ import annotations
|
||
|
||
import argparse
|
||
import shutil
|
||
import sys
|
||
import time
|
||
from pathlib import Path
|
||
|
||
ROOT = Path(__file__).resolve().parents[1]
|
||
API_ENV = ROOT / "api" / ".env"
|
||
MERGE = ROOT / "api" / ".env.local.merge"
|
||
|
||
|
||
def main() -> int:
|
||
p = argparse.ArgumentParser(description="合并宝塔下载的 .env 到 api/.env")
|
||
p.add_argument("source", help="从宝塔下载的环境文件路径")
|
||
args = p.parse_args()
|
||
src = Path(args.source).expanduser().resolve()
|
||
if not src.is_file():
|
||
print(f"源文件不存在: {src}", file=sys.stderr)
|
||
return 1
|
||
|
||
data = src.read_bytes()
|
||
if data.startswith(b"\xef\xbb\xbf"):
|
||
data = data[3:]
|
||
try:
|
||
text = data.decode("utf-8")
|
||
except UnicodeDecodeError:
|
||
text = data.decode("utf-8-sig", errors="replace")
|
||
|
||
API_ENV.parent.mkdir(parents=True, exist_ok=True)
|
||
if API_ENV.exists():
|
||
bak = API_ENV.parent / f".env.bak.{int(time.time())}"
|
||
shutil.copy2(API_ENV, bak)
|
||
print(f"已备份: {bak}")
|
||
|
||
out = text.rstrip() + "\n"
|
||
if MERGE.is_file():
|
||
merge_txt = MERGE.read_text(encoding="utf-8").strip()
|
||
if merge_txt:
|
||
out += "\n# ----- merged from api/.env.local.merge (本机覆盖,勿提交) -----\n"
|
||
out += merge_txt + "\n"
|
||
print(f"已追加: {MERGE}")
|
||
|
||
API_ENV.write_text(out, encoding="utf-8", newline="\n")
|
||
print(f"已写入: {API_ENV}")
|
||
print("提示: 管理端请用 admin/.env.development 留空 VITE_API_BASE_URL,并先起 api/public 的 PHP 再 npm run dev。")
|
||
return 0
|
||
|
||
|
||
if __name__ == "__main__":
|
||
raise SystemExit(main())
|