init: 从 /root/zikai 根目录迁入
把原本散落在 /root/zikai 的 FastAPI 服务整理到 server/ 子目录, 开启独立 git 与 venv。运行时数据(config.yaml / keys / uploads) 按 .gitignore 留在工作目录但不入仓。
This commit is contained in:
61
start.sh
Executable file
61
start.sh
Executable file
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env bash
|
||||
# 启动 HTTP(uvicorn)与 SFTP;已在运行则跳过(幂等)。
|
||||
set -euo pipefail
|
||||
|
||||
cd "$(dirname "$0")"
|
||||
ROOT="$(pwd)"
|
||||
VENV="$ROOT/.venv"
|
||||
PY="$VENV/bin/python"
|
||||
|
||||
[ -x "$PY" ] || { echo "未找到 venv:$VENV,请先运行 ./setup.sh" >&2; exit 1; }
|
||||
[ -f "$ROOT/config.yaml" ] || { echo "未找到 config.yaml,请先运行 ./setup.sh" >&2; exit 1; }
|
||||
|
||||
mkdir -p "$ROOT/logs" "$ROOT/uploads"
|
||||
|
||||
# 启动前清理:upload_service.py 用 .part 后缀做原子写,进程已停时残留必为半成品。
|
||||
PART_COUNT=$(find "$ROOT/uploads" -type f -name '*.part' -printf '.' 2>/dev/null | wc -c)
|
||||
if [ "$PART_COUNT" -gt 0 ]; then
|
||||
find "$ROOT/uploads" -type f -name '*.part' -delete
|
||||
echo "清理:删除残留 .part 文件 $PART_COUNT 个"
|
||||
fi
|
||||
|
||||
is_running() { [ -f "$1" ] && kill -0 "$(cat "$1")" 2>/dev/null; }
|
||||
|
||||
# --- HTTP ---
|
||||
APP_PID="$ROOT/app.pid"
|
||||
if is_running "$APP_PID"; then
|
||||
echo "HTTP 已在运行 (pid $(cat "$APP_PID"))"
|
||||
else
|
||||
read -r HOST PORT <<<"$("$PY" - <<'PY'
|
||||
import yaml
|
||||
c = yaml.safe_load(open("config.yaml"))
|
||||
print(c["server"]["host"], c["server"]["port"])
|
||||
PY
|
||||
)"
|
||||
nohup "$VENV/bin/uvicorn" app.main:app \
|
||||
--host "$HOST" --port "$PORT" \
|
||||
>>"$ROOT/logs/app.log" 2>&1 &
|
||||
echo $! > "$APP_PID"
|
||||
echo "HTTP 启动 pid=$(cat "$APP_PID") 监听 ${HOST}:${PORT} 日志 logs/app.log"
|
||||
fi
|
||||
|
||||
# --- SFTP ---
|
||||
SFTP_PID="$ROOT/sftp.pid"
|
||||
SFTP_ENABLED="$("$PY" - <<'PY'
|
||||
import yaml
|
||||
print("true" if yaml.safe_load(open("config.yaml")).get("sftp", {}).get("enabled", True) else "false")
|
||||
PY
|
||||
)"
|
||||
if [ "$SFTP_ENABLED" = "true" ]; then
|
||||
if is_running "$SFTP_PID"; then
|
||||
echo "SFTP 已在运行 (pid $(cat "$SFTP_PID"))"
|
||||
else
|
||||
nohup "$PY" -m app.services.sftp_server >>"$ROOT/logs/sftp.log" 2>&1 &
|
||||
echo $! > "$SFTP_PID"
|
||||
echo "SFTP 启动 pid=$(cat "$SFTP_PID") 日志 logs/sftp.log"
|
||||
fi
|
||||
else
|
||||
echo "SFTP 已在配置中禁用,跳过。"
|
||||
fi
|
||||
|
||||
echo "docs: http://127.0.0.1:6867/docs (对外 https://f.zikai.wang/docs)"
|
||||
Reference in New Issue
Block a user