#!/usr/bin/env bash # anuma2api Hugging Face Space 启动脚本 # - 持久化目录 /data(Space Storage):config.toml + account/ + logs/ # - 首启把镜像内的 config.toml / account/ 拷进 /data # - $PORT(HF 强制)覆盖 config 里的端口,启动 uvicorn set -euo pipefail DATA_DIR="${HF_DATA_DIR:-/data}" mkdir -p "$DATA_DIR/account" "$DATA_DIR/logs" # 首启:从镜像拷贝种子配置/账号(已存在的文件不覆盖,保留用户修改) if [ ! -f "$DATA_DIR/config.toml" ] && [ -f "/app/config.toml" ]; then cp /app/config.toml "$DATA_DIR/config.toml" fi if [ ! -f "$DATA_DIR/account/.keep" ]; then cp -rn /app/account/. "$DATA_DIR/account/" 2>/dev/null || true touch "$DATA_DIR/account/.keep" fi # config.toml 的日志/账号目录指向持久目录(若未配置) if [ -f "$DATA_DIR/config.toml" ] && ! grep -q 'dir = "/data' "$DATA_DIR/config.toml" 2>/dev/null; then # 在 [logging] 段补 dir = "/data/logs",在 [registry] 段补 account_dir = "/data/account" sed -i 's|^dir = "logs".*|dir = "/data/logs" # HF 持久化|' "$DATA_DIR/config.toml" || true sed -i 's|^account_dir = "account".*|account_dir = "/data/account" # HF 持久化|' "$DATA_DIR/config.toml" || true # 若上面 sed 没命中(键名不同),追加默认段 grep -q 'dir = "/data/logs"' "$DATA_DIR/config.toml" || \ printf '\n[logging]\nenabled = true\ndir = "/data/logs"\nfilename = "gateway.log"\n' >> "$DATA_DIR/config.toml" fi # HF 强制端口 $PORT(如 7860),缺省回退 7860(HF Space 约定端口;本地未注入 $PORT 时也监听 7860) PORT="${PORT:-7860}" export TWOAPI_CONFIG="$DATA_DIR/config.toml" echo "[init] using config=$TWOAPI_CONFIG port=$PORT accounts=$(ls "$DATA_DIR/account"/*.json 2>/dev/null | wc -l)" exec uv run uvicorn app.main:app --host 0.0.0.0 --port "$PORT"