#!/bin/bash set -e echo "🚀 Starting Document Translation API..." # Wait for database to be ready (if DATABASE_URL is set) if [ -n "$DATABASE_URL" ]; then echo "⏳ Waiting for database to be ready..." # Extract host and port from DATABASE_URL # postgresql://user:pass@host:port/db DB_HOST=$(echo $DATABASE_URL | sed -e 's/.*@\([^:]*\):.*/\1/') DB_PORT=$(echo $DATABASE_URL | sed -e 's/.*:\([0-9]*\)\/.*/\1/') # Wait up to 30 seconds for database for i in {1..30}; do if python -c " import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: s.connect(('$DB_HOST', $DB_PORT)) s.close() exit(0) except: exit(1) " 2>/dev/null; then echo "✅ Database is ready!" break fi echo " Waiting for database... ($i/30)" sleep 1 done # Run database migrations echo "📦 Running database migrations..." alembic upgrade head || echo "⚠️ Migration skipped (may already be up to date)" fi # Wait for Redis if configured if [ -n "$REDIS_URL" ]; then echo "⏳ Waiting for Redis..." REDIS_HOST=$(echo $REDIS_URL | sed -e 's/redis:\/\/\([^:]*\):.*/\1/') REDIS_PORT=$(echo $REDIS_URL | sed -e 's/.*:\([0-9]*\)\/.*/\1/') for i in {1..10}; do if python -c " import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: s.connect(('$REDIS_HOST', $REDIS_PORT)) s.close() exit(0) except: exit(1) " 2>/dev/null; then echo "✅ Redis is ready!" break fi echo " Waiting for Redis... ($i/10)" sleep 1 done fi # Start the application echo "🎯 Starting uvicorn..." exec uvicorn main:app --host 0.0.0.0 --port ${PORT:-8000} --workers ${WORKERS:-4}