Spaces:
Sleeping
Sleeping
| set -e | |
| # Start Nginx. | |
| echo "Starting nginx..." | |
| /usr/sbin/nginx -c /etc/nginx/nginx.conf | |
| if [ $? -ne 0 ]; then | |
| echo "Failed to start nginx" | |
| exit 1 | |
| fi | |
| # Verify nginx is running. | |
| if ! ps aux | grep nginx | grep -v grep > /dev/null; then | |
| echo "Nginx failed to start" | |
| exit 1 | |
| fi | |
| echo "Nginx started successfully" | |
| # Start PostgreSQL. | |
| echo "Starting PostgreSQL..." | |
| if [ ! -f "$PGDATA/PG_VERSION" ]; then | |
| mkdir -p $PGDATA | |
| echo "Current user: $(whoami)" | |
| initdb -D $PGDATA --username=postgres --pwfile=<(echo "password") | |
| fi | |
| pg_ctl -D $PGDATA start | |
| # Create the db-user (but let Prisma handle the database) | |
| echo "Creating database user..." | |
| PGPASSWORD=password PGUSER=postgres createuser -s "db-user" || echo "User db-user already exists" | |
| PGPASSWORD=password PGUSER=postgres psql -c 'ALTER USER "db-user" WITH PASSWORD '\''password'\'';' postgres | |
| # Wait for PostgreSQL (using db-user). | |
| echo "Waiting for PostgreSQL..." | |
| until pg_isready -U db-user; do | |
| echo "Waiting for PostgreSQL to be ready..." | |
| sleep 2 | |
| if [ $SECONDS -gt 30 ]; then | |
| echo "Timeout waiting for PostgreSQL" | |
| exit 1 | |
| fi | |
| done | |
| echo "PostgreSQL is ready!" | |
| # Start Llamafiler. | |
| echo "Starting llamafiler services..." | |
| mkdir -p /tmp/llamafiler | |
| echo "Starting chat model..." | |
| TMPDIR=/tmp/llamafiler /usr/local/bin/llamafiler --model $HOME/models/gemma-2b.gguf --listen 0.0.0.0:8082 & | |
| GEMMA_PID=$! | |
| echo "Starting embedding model..." | |
| TMPDIR=/tmp/llamafiler /usr/local/bin/llamafiler --model $HOME/models/embeddings.gguf --listen 0.0.0.0:8081 & | |
| EMBEDDINGS_PID=$! | |
| # Wait for the models to be ready with a timeout | |
| echo "Waiting for models to be ready..." | |
| TIMEOUT=300 # 5 minutes timeout | |
| START_TIME=$SECONDS | |
| wait_for_services() { | |
| curl -s --fail -X POST http://127.0.0.1:7861/v1/chat/completions \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"model": "gemma-2b", "messages":[{"role":"user","content":"hi"}]}' >/dev/null 2>&1 && \ | |
| curl -s --fail -X POST http://127.0.0.1:7861/v1/embeddings \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"input":"test"}' >/dev/null 2>&1 | |
| } | |
| until wait_for_services; do | |
| ELAPSED=$((SECONDS - START_TIME)) | |
| if [ $ELAPSED -gt $TIMEOUT ]; then | |
| echo "Timeout waiting for services after ${TIMEOUT} seconds" | |
| exit 1 | |
| fi | |
| # Check if processes are still running | |
| if ! kill -0 $GEMMA_PID 2>/dev/null; then | |
| echo "Gemma model process died." | |
| exit 1 | |
| fi | |
| if ! kill -0 $EMBEDDINGS_PID 2>/dev/null; then | |
| echo "Embeddings model process died." | |
| exit 1 | |
| fi | |
| echo "Waiting for services... (${ELAPSED}s elapsed, PIDs: Gemma=$GEMMA_PID, Embeddings=$EMBEDDINGS_PID)" | |
| sleep 2 | |
| done | |
| echo 'Servers are ready!' | |
| echo 'All services are ready!' | |
| # Ensure we have the same environment as the base image. | |
| export PNPM_HOME=/root/.local/share/pnpm | |
| export PATH=$PNPM_HOME/bin:$PATH | |
| cd /base # Ensure we're in the correct directory | |
| ls -la prisma/ | |
| ls -la $PNPM_HOME | |
| ls -la $PNPM_HOME/global/5/node_modules/@prisma || echo "No global prisma found" | |
| prisma -v | |
| # Now execute the entrypoint with the proper environment. | |
| echo "Executing: /base/bin/entrypoint.sh node /base/app/main.bundle.js" | |
| set -x # Enable command tracing. | |
| exec /base/bin/entrypoint.sh node /base/app/main.bundle.js | |