Optimize for HF Spaces: Robust start.sh, Celery worker, and permissions
Browse files- Dockerfile +2 -0
- start.sh +23 -43
Dockerfile
CHANGED
|
@@ -26,6 +26,8 @@ COPY --chown=user . .
|
|
| 26 |
# Create necessary directories for the backend
|
| 27 |
RUN mkdir -p backend/runs backend/tmp
|
| 28 |
|
|
|
|
|
|
|
| 29 |
ENV PYTHONPATH=$HOME/app/backend:$PYTHONPATH
|
| 30 |
|
| 31 |
# Tell your start.sh script to boot Streamlit on 7860 (the only port HF exposes)
|
|
|
|
| 26 |
# Create necessary directories for the backend
|
| 27 |
RUN mkdir -p backend/runs backend/tmp
|
| 28 |
|
| 29 |
+
RUN chmod +x start.sh
|
| 30 |
+
|
| 31 |
ENV PYTHONPATH=$HOME/app/backend:$PYTHONPATH
|
| 32 |
|
| 33 |
# Tell your start.sh script to boot Streamlit on 7860 (the only port HF exposes)
|
start.sh
CHANGED
|
@@ -1,59 +1,39 @@
|
|
| 1 |
#!/bin/bash
|
| 2 |
-
|
|
|
|
|
|
|
| 3 |
|
| 4 |
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
| 5 |
cd "$SCRIPT_DIR"
|
| 6 |
|
| 7 |
-
cleanup() {
|
| 8 |
-
echo "Shutting down services..."
|
| 9 |
-
[ -n "$BACKEND_PID" ] && kill "$BACKEND_PID" 2>/dev/null || true
|
| 10 |
-
[ -n "$FRONTEND_PID" ] && kill "$FRONTEND_PID" 2>/dev/null || true
|
| 11 |
-
[ -n "$REDIS_PID" ] && kill "$REDIS_PID" 2>/dev/null || true
|
| 12 |
-
exit 0
|
| 13 |
-
}
|
| 14 |
-
trap cleanup INT TERM
|
| 15 |
-
|
| 16 |
export PYTHONPATH="$SCRIPT_DIR/backend:$PYTHONPATH"
|
|
|
|
| 17 |
|
| 18 |
-
# Start Redis
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
echo "Redis is running."
|
| 27 |
-
fi
|
| 28 |
-
else
|
| 29 |
-
echo "redis-server not installed; skipping local Redis startup."
|
| 30 |
-
fi
|
| 31 |
-
|
| 32 |
-
# Start backend on internal port
|
| 33 |
cd "$SCRIPT_DIR/backend"
|
| 34 |
python -m uvicorn main:app --host 0.0.0.0 --port 8000 --timeout-keep-alive 600 &
|
| 35 |
BACKEND_PID=$!
|
| 36 |
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
fi
|
| 43 |
-
sleep 1
|
| 44 |
-
done
|
| 45 |
|
| 46 |
-
# Start
|
|
|
|
| 47 |
cd "$SCRIPT_DIR/frontend"
|
| 48 |
-
|
| 49 |
-
python -m streamlit run app.py --server.port $PORT --server.headless true --server.address 0.0.0.0 &
|
| 50 |
FRONTEND_PID=$!
|
| 51 |
|
| 52 |
-
echo "
|
| 53 |
-
|
| 54 |
-
echo "AutoML Studio services are now running."
|
| 55 |
-
echo "Backend: http://127.0.0.1:8000 (internal)"
|
| 56 |
-
echo "Frontend: http://0.0.0.0:$PORT (external)"
|
| 57 |
|
| 58 |
-
|
| 59 |
-
wait -n
|
|
|
|
| 1 |
#!/bin/bash
|
| 2 |
+
|
| 3 |
+
# 🛡️ ROBUST START SCRIPT FOR HUGGING FACE SPACES
|
| 4 |
+
# This script launches Redis, FastAPI, Celery, and Streamlit in one container.
|
| 5 |
|
| 6 |
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
| 7 |
cd "$SCRIPT_DIR"
|
| 8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
export PYTHONPATH="$SCRIPT_DIR/backend:$PYTHONPATH"
|
| 10 |
+
export HOME="/home/user"
|
| 11 |
|
| 12 |
+
# 1. Start Redis (Internal Broker)
|
| 13 |
+
# We run it in the background using & and point it to /tmp for write access.
|
| 14 |
+
echo "Starting Redis..."
|
| 15 |
+
redis-server --port 6379 --dir /tmp --dbfilename dump.rdb --daemonize no &
|
| 16 |
+
REDIS_PID=$!
|
| 17 |
+
|
| 18 |
+
# 2. Start FastAPI Backend (Internal API)
|
| 19 |
+
echo "Starting FastAPI Backend..."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 20 |
cd "$SCRIPT_DIR/backend"
|
| 21 |
python -m uvicorn main:app --host 0.0.0.0 --port 8000 --timeout-keep-alive 600 &
|
| 22 |
BACKEND_PID=$!
|
| 23 |
|
| 24 |
+
# 3. Start Celery Worker (Task Processor)
|
| 25 |
+
echo "Starting Celery Worker..."
|
| 26 |
+
# We run this from the backend directory where core.worker is accessible
|
| 27 |
+
python -m celery -A core.worker.celery_app worker --loglevel=info --concurrency=1 &
|
| 28 |
+
WORKER_PID=$!
|
|
|
|
|
|
|
|
|
|
| 29 |
|
| 30 |
+
# 4. Start Streamlit Frontend (Public UI)
|
| 31 |
+
echo "Starting Streamlit Frontend on port ${PORT:-7860}..."
|
| 32 |
cd "$SCRIPT_DIR/frontend"
|
| 33 |
+
python -m streamlit run app.py --server.port "${PORT:-7860}" --server.headless true --server.address 0.0.0.0 &
|
|
|
|
| 34 |
FRONTEND_PID=$!
|
| 35 |
|
| 36 |
+
echo "🚀 All services launched!"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
|
| 38 |
+
# Keep the script alive. If the Frontend or Backend fails, the container should stop.
|
| 39 |
+
wait -n $FRONTEND_PID $BACKEND_PID
|