72 lines
1.8 KiB
Bash
72 lines
1.8 KiB
Bash
#!/bin/zsh
|
||
# 神射手 本地版启动脚本 - 纯 shell,无 Python/tkinter 依赖
|
||
|
||
PROJECT="/Users/karuo/Documents/开发/2、私域银行/神射手"
|
||
export PATH="/opt/homebrew/bin:/usr/local/bin:${HOME}/.volta/bin:${PATH}"
|
||
[ -d "${HOME}/.fnm/current/bin" ] && export PATH="${HOME}/.fnm/current/bin:${PATH}"
|
||
|
||
notify() { osascript -e "display notification \"$1\" with title \"神射手\"" 2>/dev/null; }
|
||
open_url() { open "$1" 2>/dev/null || true; }
|
||
|
||
cd "$PROJECT" || { notify "项目路径不存在"; exit 1; }
|
||
|
||
# 1. Ollama
|
||
notify "检查本地大模型..."
|
||
if ! curl -s --connect-timeout 2 "http://localhost:11434/api/tags" >/dev/null 2>&1; then
|
||
notify "正在启动 Ollama..."
|
||
open -a Ollama 2>/dev/null || true
|
||
for i in {1..45}; do
|
||
curl -s --connect-timeout 2 "http://localhost:11434/api/tags" >/dev/null 2>&1 && break
|
||
sleep 1
|
||
done
|
||
fi
|
||
notify "Ollama 就绪"
|
||
|
||
# 2. Docker
|
||
notify "检查 Docker..."
|
||
open -a Docker 2>/dev/null || true
|
||
for i in {1..60}; do
|
||
docker info >/dev/null 2>&1 && break
|
||
sleep 2
|
||
done
|
||
notify "Docker 就绪"
|
||
|
||
# 3. MongoDB
|
||
notify "启动 MongoDB..."
|
||
docker start datacenter_mongodb 2>/dev/null || true
|
||
sleep 3
|
||
notify "MongoDB 就绪"
|
||
|
||
# 4. 若 3117 已监听,直接打开
|
||
if lsof -i :3117 -sTCP:LISTEN >/dev/null 2>&1; then
|
||
notify "服务已在运行,打开浏览器"
|
||
open_url "http://localhost:3117"
|
||
exit 0
|
||
fi
|
||
|
||
# 5. 启动 pnpm dev(后台)
|
||
notify "启动神射手开发服务..."
|
||
if command -v pnpm >/dev/null 2>&1; then
|
||
pnpm dev &
|
||
else
|
||
npm run dev &
|
||
fi
|
||
PID=$!
|
||
trap "kill $PID 2>/dev/null; exit" EXIT INT TERM
|
||
|
||
# 6. 等待 3117
|
||
for i in {1..90}; do
|
||
lsof -i :3117 -sTCP:LISTEN >/dev/null 2>&1 && break
|
||
sleep 1
|
||
done
|
||
|
||
# 7. 打开浏览器
|
||
notify "神射手已启动"
|
||
open_url "http://localhost:3117"
|
||
echo "神射手已启动: http://localhost:3117"
|
||
echo "关闭此窗口将停止服务"
|
||
echo ""
|
||
|
||
# 8. 保持运行
|
||
wait $PID
|