加入了登录注册页面(ptstation-register文件夹),需启动react前端和创建虚拟环境并安装requirements.txt并运行run_server.py
Change-Id: I6abba3854c517286245d118a591e00761ac98685
diff --git a/ptstation-register/backend/run_server.py b/ptstation-register/backend/run_server.py
new file mode 100644
index 0000000..22f2292
--- /dev/null
+++ b/ptstation-register/backend/run_server.py
@@ -0,0 +1,69 @@
+import subprocess
+import time
+import requests
+import os
+import signal
+from flask import Flask
+from flask_cors import CORS
+
+
+
+NGROK_PORT = 6001
+NGROK_API = 'http://127.0.0.1:4040/api/tunnels'
+NGROK_URL_FILE = 'ngrok_url.txt'
+
+def start_backend():
+ print("🚀 启动 Flask 后端...")
+ return subprocess.Popen(
+ ["venv\\Scripts\\python.exe", "backend.py"],
+ creationflags=subprocess.CREATE_NEW_CONSOLE
+ )
+
+def start_ngrok():
+ print("🌐 启动 Ngrok 隧道(窗口隐藏)...")
+ startupinfo = subprocess.STARTUPINFO()
+ startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
+
+ return subprocess.Popen(
+ ["ngrok", "http", str(NGROK_PORT)],
+ stdout=subprocess.DEVNULL,
+ stderr=subprocess.DEVNULL,
+ startupinfo=startupinfo
+ )
+
+
+def fetch_ngrok_url(retries=10):
+ print("⏳ 正在获取 Ngrok 公网地址...")
+ for _ in range(retries):
+ try:
+ res = requests.get(NGROK_API).json()
+ tunnels = res.get("tunnels")
+ if tunnels:
+ public_url = tunnels[0]["public_url"]
+ with open(NGROK_URL_FILE, "w", encoding="utf-8") as f:
+ f.write(public_url)
+ print(f"✅ Ngrok 地址: {public_url} 已写入 {NGROK_URL_FILE}")
+ return public_url
+ except Exception:
+ pass
+ time.sleep(1)
+ print("❌ 获取 Ngrok 地址失败!")
+ return None
+
+if __name__ == "__main__":
+ backend_proc = start_backend()
+ time.sleep(3) # 等后端稍微先启动
+
+ ngrok_proc = start_ngrok()
+ time.sleep(3) # 等 ngrok 启动
+
+ try:
+ fetch_ngrok_url()
+ print("\n✅ 所有服务已启动,按 Ctrl+C 退出。")
+ while True:
+ time.sleep(1)
+ except KeyboardInterrupt:
+ print("\n🛑 正在关闭服务...")
+ backend_proc.terminate()
+ ngrok_proc.terminate()
+ print("✅ 已关闭")