openclaw / start.sh
Arshit Malik
fix: python status server on 8080 so nginx never 502s regardless of openclaw
5b9367d
#!/bin/bash
echo "[boot] Configuring Kaggle credentials..."
if [ -n "$KAGGLE_USERNAME" ] && [ -n "$KAGGLE_KEY" ]; then
mkdir -p ~/.kaggle
printf '{"username":"%s","key":"%s"}' "$KAGGLE_USERNAME" "$KAGGLE_KEY" > ~/.kaggle/kaggle.json
chmod 600 ~/.kaggle/kaggle.json
fi
echo "[boot] Configuring YouTube client secrets..."
if [ -n "$YOUTUBE_CLIENT_ID" ] && [ -n "$YOUTUBE_CLIENT_SECRET" ]; then
python3 -c "
import json,os
d={'installed':{'client_id':os.environ['YOUTUBE_CLIENT_ID'],'project_id':'yt-ai-bot','auth_uri':'https://accounts.google.com/o/oauth2/auth','token_uri':'https://oauth2.googleapis.com/token','auth_provider_x509_cert_url':'https://www.googleapis.com/oauth2/v1/certs','client_secret':os.environ['YOUTUBE_CLIENT_SECRET'],'redirect_uris':['http://localhost']}}
open('/app/client_secrets.json','w').write(json.dumps(d))
print('[boot] client_secrets.json written')"
fi
echo "[boot] Pulling state from HF Dataset..."
python3 -c "
import sys; sys.path.insert(0,'/app')
try:
from sync_hub import pull_state
from pathlib import Path
pull_state(Path('/app'))
except Exception as e:
print(f'[boot] Hub pull skipped: {e}')
"
echo "[boot] Starting nginx..."
nginx
echo "[boot] Starting Ollama..."
OLLAMA_HOST=127.0.0.1 ollama serve &
echo "[boot] Starting status server on port 8080..."
python3 -c "
import http.server, threading, os, time
class Handler(http.server.BaseHTTPRequestHandler):
def do_GET(self):
try:
log = open('/app/pipeline.log').read()[-3000:]
except:
log = 'No log yet.'
body = f'''<!DOCTYPE html><html><head><meta charset=utf-8>
<meta http-equiv=refresh content=30>
<title>YT Pipeline</title>
<style>body{{font-family:monospace;background:#111;color:#0f0;padding:20px}}
pre{{background:#000;padding:10px;overflow-x:auto;white-space:pre-wrap}}</style>
</head><body>
<h2>YouTube Shorts Pipeline</h2>
<p>Space is running. Pipeline log (last 3000 chars, auto-refreshes every 30s):</p>
<pre>{log}</pre>
</body></html>'''.encode()
self.send_response(200)
self.send_header('Content-Type','text/html')
self.send_header('Content-Length',str(len(body)))
self.end_headers()
self.wfile.write(body)
def log_message(self, *a): pass
httpd = http.server.HTTPServer(('0.0.0.0', 8080), Handler)
print('[status] Server running on port 8080')
httpd.serve_forever()
" &
echo "[boot] Waiting for Ollama..."
for i in $(seq 1 60); do
if curl -sf http://127.0.0.1:11434/api/tags > /dev/null 2>&1; then
echo "[boot] Ollama ready after ${i}s"; break
fi
sleep 2
done
echo "[boot] Pulling qwen2.5-coder:7b-instruct..."
ollama pull qwen2.5-coder:7b-instruct
echo "[boot] Starting pipeline..."
python3 /app/automation.py >> /app/pipeline.log 2>&1 &
echo "[boot] Pipeline PID: $!"
echo "[boot] Trying OpenClaw (optional)..."
export OLLAMA_HOST=http://127.0.0.1:11434
openclaw gateway start || echo "[boot] OpenClaw unavailable, status server is active"
sleep infinity