| #!/bin/bash |
|
|
| |
| mkdir -p /run/dbus |
| dbus-daemon --system --fork 2>/dev/null || true |
|
|
| export PATH=$PATH:/usr/local/bin:/root/.local/bin |
|
|
| |
| echo "=== Verifying dependencies ===" |
|
|
| python3 -c "import fastapi, uvicorn, httpx" 2>/dev/null \ |
| && echo "β
Python deps OK" \ |
| || { echo "β Python deps missing β installing..."; \ |
| pip3 install --break-system-packages fastapi "uvicorn[standard]" httpx; } |
|
|
| command -v ollama >/dev/null 2>&1 \ |
| && echo "β
ollama OK" \ |
| || { echo "β ollama missing β installing..."; \ |
| curl -fsSL https://ollama.com/install.sh | sh; } |
|
|
| command -v ttyd >/dev/null 2>&1 \ |
| && echo "β
ttyd OK" \ |
| || { echo "β ttyd missing β installing..."; \ |
| curl -fsSL https://github.com/tsl0922/ttyd/releases/download/1.7.4/ttyd.x86_64 \ |
| -o /usr/local/bin/ttyd && chmod +x /usr/local/bin/ttyd; } |
|
|
| command -v nginx >/dev/null 2>&1 \ |
| && echo "β
nginx OK" \ |
| || { echo "β nginx missing"; exit 1; } |
|
|
| echo "" |
|
|
| |
| echo "=== Starting Ollama ===" |
| ollama serve & |
| OLLAMA_PID=$! |
|
|
| for i in $(seq 1 30); do |
| if curl -sf http://127.0.0.1:11434/api/tags >/dev/null 2>&1; then |
| echo "β
Ollama is up" |
| break |
| fi |
| echo " Waiting for Ollama... ($i/30)" |
| sleep 1 |
| done |
|
|
| |
| |
| |
| |
| |
| |
| |
| echo "=== Starting app.py (port 8000) ===" |
| cd /workspace |
| python3 app.py & |
| APP_PID=$! |
| sleep 3 |
|
|
| |
| echo "=== Starting ttyd (port 8080) ===" |
| ttyd \ |
| --port 8080 \ |
| --interface 127.0.0.1 \ |
| --writable \ |
| bash & |
| TTYD_PID=$! |
| sleep 2 |
|
|
| |
| echo "=== Starting nginx ===" |
| nginx -g "daemon off;" & |
| NGINX_PID=$! |
|
|
| echo "" |
| echo "β
All services running:" |
| echo " π Main UI β port 7860 (nginx)" |
| echo " π Monitor β /monitor" |
| echo " π€ Ollama β /api/..." |
| echo " π» Terminal β / (root)" |
| echo "" |
|
|
| |
| while true; do |
| if ! kill -0 $OLLAMA_PID 2>/dev/null; then |
| echo "[watchdog] Restarting Ollama..." |
| ollama serve & |
| OLLAMA_PID=$! |
| fi |
| if ! kill -0 $APP_PID 2>/dev/null; then |
| echo "[watchdog] Restarting app.py..." |
| cd /workspace && python3 app.py & |
| APP_PID=$! |
| fi |
| if ! kill -0 $TTYD_PID 2>/dev/null; then |
| echo "[watchdog] Restarting ttyd..." |
| ttyd --port 8080 --interface 127.0.0.1 --writable bash & |
| TTYD_PID=$! |
| fi |
| if ! kill -0 $NGINX_PID 2>/dev/null; then |
| echo "[watchdog] Restarting nginx..." |
| nginx -g "daemon off;" & |
| NGINX_PID=$! |
| fi |
| sleep 10 |
| done |
|
|