Initial standalone crypto_okx with one-click deploy.

Add deploy/manage.sh bootstrap for git.bz121.com/dekun/crypto_okx and point docs at this repo.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-08-13 20:00:59 +08:00
commit a1abe159fa
238 changed files with 69214 additions and 0 deletions
+67
View File
@@ -0,0 +1,67 @@
#!/usr/bin/env python3
"""首次部署:自动生成登录会话密钥与初始账号(仅空/占位时写入,不覆盖已有).
- FLASK_SECRET_KEY
- APP_USERNAME=admin / APP_PASSWORD=admin123(仅空时)
"""
from __future__ import annotations
import argparse
import os
import secrets
import sys
_REPO = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if _REPO not in sys.path:
sys.path.insert(0, _REPO)
from lib.env.env_file_lib import apply_env_updates, env_get, read_env_lines
FLASK_PLACEHOLDERS = frozenset(
{"", "CHANGE_TO_LONG_RANDOM_SECRET", "crypto_monitor_2026_secret_key"}
)
PASSWORD_PLACEHOLDERS = frozenset({"", "CHANGE_ME_STRONG_PASSWORD"})
def main() -> int:
parser = argparse.ArgumentParser(description="Bootstrap deploy secrets for crypto_okx")
parser.add_argument("--dry-run", action="store_true", help="只打印将写入的项,不改文件")
args = parser.parse_args()
env_path = os.path.join(_REPO, ".env")
if not os.path.isfile(env_path):
print(f" 跳过: 未找到 {env_path}")
return 0
lines = read_env_lines(env_path)
updates: dict[str, str] = {}
cur_secret = env_get(lines, "FLASK_SECRET_KEY")
if (cur_secret or "").strip() in FLASK_PLACEHOLDERS:
updates["FLASK_SECRET_KEY"] = secrets.token_urlsafe(48)
if not (env_get(lines, "APP_USERNAME") or "").strip():
updates["APP_USERNAME"] = "admin"
cur_pass = env_get(lines, "APP_PASSWORD")
if (cur_pass or "").strip() in PASSWORD_PLACEHOLDERS:
updates["APP_PASSWORD"] = "admin123"
if not updates:
print(" 密钥已存在,无需写入")
return 0
print(f" 将更新 {env_path}: {', '.join(updates.keys())}")
if args.dry_run:
for k, v in updates.items():
shown = v if k != "APP_PASSWORD" and "SECRET" not in k else "***"
print(f" {k}={shown}")
return 0
apply_env_updates(env_path, updates)
print(" 已写入初始密钥/账号(请尽快修改 APP_PASSWORD)")
return 0
if __name__ == "__main__":
sys.exit(main())