chore: initial commit of ai site platform

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
whm
2026-07-31 10:19:22 +08:00
commit 6366859bb3
222 changed files with 47313 additions and 0 deletions

100
scripts/linux/start-host.sh Normal file
View File

@@ -0,0 +1,100 @@
#!/usr/bin/env bash
# 宿主机物理目录模式Docker 不可用或 ./start.sh --host
# shellcheck disable=SC1091
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=common.sh
source "$SCRIPT_DIR/common.sh"
REBUILD=0
NO_BROWSER=0
for arg in "$@"; do
case "$arg" in
--rebuild|-Rebuild) REBUILD=1 ;;
--no-browser) NO_BROWSER=1 ;;
esac
done
start_bg() {
local name="$1" logfile="$2"
shift 2
local pidfile="$PID_DIR/$name.pid"
if [[ -f "$pidfile" ]] && kill -0 "$(cat "$pidfile")" 2>/dev/null; then
c_warn "$name 已在运行 pid=$(cat "$pidfile")"
return 0
fi
c_info "启动 $name"
nohup "$@" >>"$logfile" 2>&1 &
echo $! >"$pidfile"
c_ok "$name pid=$(cat "$pidfile") 日志 $logfile"
}
ensure_postgres_running() {
local pg_ctl=""
pg_ctl="$(command -v pg_ctl 2>/dev/null || true)"
if [[ -z "$pg_ctl" ]]; then
for d in /usr/lib/postgresql/*/bin /usr/pgsql-*/bin; do
[[ -x "$d/pg_ctl" ]] && pg_ctl="$d/pg_ctl" && break
done
fi
if [[ -n "$pg_ctl" && -f "$PGDATA/PG_VERSION" ]]; then
if ! "$pg_ctl" -D "$PGDATA" status >/dev/null 2>&1; then
c_info "启动物理目录 Postgres → $PGDATA"
mkdir -p "$RUNTIME/pg_sockets"
"$pg_ctl" -D "$PGDATA" -l "$LOG_DIR/postgres.log" -o "-k $RUNTIME/pg_sockets" start
sleep 1
fi
fi
}
c_warn "宿主机模式:数据落在 $RUNTIME"
if [[ ! -f "$RUNTIME/setup.ok" || "$REBUILD" -eq 1 ]]; then
bash "$SCRIPT_DIR/setup-host.sh"
fi
# shellcheck source=/dev/null
[[ -f "$RUNTIME/env.sh" ]] && source "$RUNTIME/env.sh"
ensure_postgres_running
if [[ "$REBUILD" -eq 1 || ! -x "$ROOT/platform/platform" ]]; then
(cd "$ROOT/platform" && go build -o platform .)
fi
if [[ "$REBUILD" -eq 1 || ! -x "$ROOT/gateway/gateway" ]]; then
(cd "$ROOT/gateway" && go build -o gateway .)
fi
PY="$VENV_DIR/bin/python"
[[ -x "$PY" ]] || PY="$(command -v python3)"
start_bg platform "$LOG_DIR/platform.log" \
bash -c "cd '$ROOT/platform' && exec ./platform -f etc/platform.yaml"
start_bg ai "$LOG_DIR/ai.log" \
bash -c "cd '$ROOT/ai-service' && exec '$PY' -m uvicorn app:app --host 127.0.0.1 --port 8001"
start_bg gateway "$LOG_DIR/gateway.log" \
bash -c "cd '$ROOT/gateway' && exec ./gateway -f etc/gateway.yaml"
start_bg web "$LOG_DIR/web.log" \
bash -c "cd '$ROOT/web' && exec npm run dev -- --host 127.0.0.1 --port 5173"
wait_port 8888 platform 45 || true
wait_http "http://127.0.0.1:8001/health" ai-service 45 || true
wait_http "http://127.0.0.1:8180/gateway/health" gateway 45 || true
wait_port 5173 web 60 || true
cat <<EOF
========================================
前端 http://127.0.0.1:5173
网关 http://127.0.0.1:8180
账号 demo / demo123
模式 宿主机物理目录
停止 ./stop.sh
========================================
EOF
if [[ "$NO_BROWSER" -eq 0 ]] && have_cmd xdg-open; then
xdg-open "http://127.0.0.1:5173" >/dev/null 2>&1 || true
fi