fix: 优化启动脚本命令
This commit is contained in:
@@ -10,7 +10,7 @@ from urllib.parse import urlencode
|
||||
import httpx
|
||||
from fastapi import FastAPI, HTTPException, Query, Request
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
from fastapi.responses import HTMLResponse
|
||||
from fastapi.responses import HTMLResponse, Response
|
||||
from pydantic import BaseModel
|
||||
|
||||
try:
|
||||
@@ -431,7 +431,8 @@ def _slider_form_html(key_val: str, data62_val: str, ticket_val: str) -> str:
|
||||
k = html.escape(key_val, quote=True)
|
||||
d = html.escape(data62_val, quote=True)
|
||||
t = html.escape(ticket_val, quote=True)
|
||||
script_src = html.escape(f"{SLIDER_VERIFY_BASE_URL.rstrip('/')}/assets/N_jYM_2V.js", quote=True)
|
||||
# 脚本走本机代理 /auth/slider-assets/...,避免跨域加载 7765 被 CORS 拦截
|
||||
script_src = "/auth/slider-assets/N_jYM_2V.js"
|
||||
return f"""<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
@@ -477,13 +478,31 @@ def _slider_form_html(key_val: str, data62_val: str, ticket_val: str) -> str:
|
||||
</html>"""
|
||||
|
||||
|
||||
@app.get("/auth/slider-assets/{path:path}")
|
||||
async def slider_asset_proxy(path: str):
|
||||
"""代理 7765 的 assets(如 N_jYM_2V.js),避免跨域加载被 CORS 拦截。"""
|
||||
url = f"{SLIDER_VERIFY_BASE_URL.rstrip('/')}/assets/{path}"
|
||||
try:
|
||||
async with httpx.AsyncClient(timeout=15.0) as client:
|
||||
resp = await client.get(url)
|
||||
if resp.status_code >= 400:
|
||||
raise HTTPException(status_code=resp.status_code, detail=resp.text[:200])
|
||||
media_type = "application/javascript" if path.endswith(".js") else "application/octet-stream"
|
||||
return Response(content=resp.content, media_type=media_type)
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
logger.warning("Slider asset proxy error: %s", e)
|
||||
raise HTTPException(status_code=502, detail=str(e)) from e
|
||||
|
||||
|
||||
@app.get("/auth/slider-form", response_class=HTMLResponse)
|
||||
async def slider_form(
|
||||
key: str = Query(..., description="Key(提交到第三方滑块)"),
|
||||
data62: str = Query("", description="Data62"),
|
||||
ticket: str = Query(..., description="Original Ticket"),
|
||||
):
|
||||
"""本地滑块验证页:与 7765 同 DOM(#app、keyInput、data62Input、originalTicketInput),加载 7765 的 module 脚本,不用 iframe。"""
|
||||
"""本地滑块验证页:与 7765 同 DOM,脚本经本机代理加载,避免 CORS。"""
|
||||
data62 = _clean_data62(data62)
|
||||
return HTMLResponse(content=_slider_form_html(key, data62, ticket))
|
||||
|
||||
|
||||
@@ -1,14 +1,25 @@
|
||||
#!/usr/bin/env bash
|
||||
# 生产部署脚本:启动前拉取最新代码 → 构建镜像 → 停止旧容器 → 启动新容器
|
||||
# 用法: ./run-docker.sh [-p PORT] [-d HOST_DATA_DIR]
|
||||
# -p, --port PORT 宿主机端口,默认 3000
|
||||
# -d, --data-dir DIR 数据目录挂载,默认 ./data
|
||||
|
||||
set -e
|
||||
|
||||
IMAGE_NAME="wechat-admin-backend"
|
||||
CONTAINER_NAME="wechat-admin-backend"
|
||||
PORT="${PORT:-3000}"
|
||||
# 数据目录挂载到宿主机,防止容器删除后丢失(SQLite 库 wechat.db 及表数据)
|
||||
HOST_DATA_DIR="${HOST_DATA_DIR:-$(pwd)/data}"
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
-p|--port) PORT="$2"; shift 2 ;;
|
||||
-d|--data-dir) HOST_DATA_DIR="$2"; shift 2 ;;
|
||||
-h|--help) echo "Usage: $0 [-p PORT] [-d HOST_DATA_DIR]"; echo " -p, --port PORT default 3000"; echo " -d, --data-dir DIR default \$(pwd)/data"; exit 0 ;;
|
||||
*) echo "Unknown option: $1 (use -h for help)"; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# 启动前自动获取最新代码(与远端 master 一致,丢弃本地修改)
|
||||
if git rev-parse --git-dir >/dev/null 2>&1; then
|
||||
echo "Fetching and reset to origin/master..."
|
||||
|
||||
Reference in New Issue
Block a user