ElevenClip-AI / deploy /setup_droplet.sh
JakgritB
Deploy safe hackathon demo
102f4d2
#!/bin/bash
# ElevenClip AI — Full AMD Droplet Setup Script
# Run once after fresh boot: bash /root/setup_droplet.sh
set -e
LOG=/tmp/elevnclip_setup.log
exec > >(tee -a "$LOG") 2>&1
echo "=== ElevenClip AI Droplet Setup $(date) ==="
# ── 1. Update repo ────────────────────────────────────────────────────────────
echo "[1/5] Pulling latest code..."
cd /root/ElevenClip-AI
git pull origin master
# ── 2. Python venv + pip install ─────────────────────────────────────────────
echo "[2/5] Installing Python dependencies..."
if [ ! -f /root/venv/bin/activate ]; then
python3 -m venv /root/venv
fi
source /root/venv/bin/activate
pip install --upgrade pip -q
pip install -r backend/requirements.txt -q
echo "PACKAGES_DONE"
# ── 3. Start vLLM inside Docker container ────────────────────────────────────
echo "[3/5] Starting vLLM with Qwen2.5-VL-7B-Instruct..."
docker start rocm 2>/dev/null || true
sleep 3
# Kill any stale vllm process
docker exec rocm bash -c "pkill -f 'vllm serve' 2>/dev/null || true"
sleep 2
# Start vLLM detached
docker exec -d rocm bash -c '
vllm serve Qwen/Qwen2.5-VL-7B-Instruct \
--port 8000 \
--dtype float16 \
--trust-remote-code \
--max-model-len 4096 \
--gpu-memory-utilization 0.7 \
--limit-mm-per-prompt "image=3" \
> /tmp/vllm.log 2>&1
'
echo "vLLM started in background (downloading model, may take 5-15 min)"
# ── 4. Start FastAPI backend on port 8080 ────────────────────────────────────
echo "[4/5] Starting FastAPI backend on :8080..."
pkill -f "uvicorn backend.main" 2>/dev/null || true
sleep 1
cd /root/ElevenClip-AI
VLLM_BASE_URL=http://localhost:8000/v1 \
VLLM_MODEL=Qwen/Qwen2.5-VL-7B-Instruct \
WORK_DIR=/tmp/elevnclip \
NEXT_PUBLIC_API_URL=http://localhost:8080 \
nohup /root/venv/bin/uvicorn backend.main:app \
--host 0.0.0.0 \
--port 8080 \
--workers 1 \
--log-level info \
> /tmp/fastapi.log 2>&1 &
echo "FastAPI PID: $!"
echo "FASTAPI_STARTED"
# ── 5. Poll vLLM health ───────────────────────────────────────────────────────
echo "[5/5] Waiting for vLLM to load model..."
for i in $(seq 1 180); do
if curl -sf http://localhost:8000/health > /dev/null 2>&1; then
echo "vLLM READY after $((i * 5))s!"
echo "VLLM_READY"
break
fi
if [ $((i % 12)) -eq 0 ]; then
echo " Still loading... $((i * 5))s elapsed"
docker exec rocm bash -c "tail -3 /tmp/vllm.log 2>/dev/null"
fi
sleep 5
done
echo ""
echo "=== Setup complete! ==="
echo " FastAPI: http://129.212.178.101:8080"
echo " vLLM API: http://129.212.178.101:8000/v1"
echo " Logs: /tmp/fastapi.log | docker exec rocm cat /tmp/vllm.log"