#!/bin/bash set -e # Cloudron PostgreSQL connection DB_NAME=${CLOUDRON_POSTGRESQL_DATABASE:-app} DB_USER=${CLOUDRON_POSTGRESQL_USERNAME:-app} DB_PASSWORD=${CLOUDRON_POSTGRESQL_PASSWORD} DB_HOST=${CLOUDRON_POSTGRESQL_HOST:-127.0.0.1} DB_PORT=${CLOUDRON_POSTGRESQL_PORT:-5432} echo "Database host: $DB_HOST" echo "Database port: $DB_PORT" echo "Database name: $DB_NAME" # Django configuration export DJANGO_SETTINGS_MODULE=${DJANGO_SETTINGS_MODULE:-config.production} export SECRET_KEY=${SECRET_KEY:-cloudron-secret-key-change-in-production} export ALLOWED_HOSTS=${ALLOWED_HOSTS:-'*'} # Database URL (for non-Django apps) export DATABASE_URL=postgres://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME} # Wait for PostgreSQL to be ready echo "Waiting for PostgreSQL to be ready..." until PGPASSWORD=$DB_PASSWORD psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -c '\q' 2>/dev/null; do echo "PostgreSQL is unavailable - sleeping" sleep 2 done echo "PostgreSQL is ready!" # Run Django migrations (if Django) if [ -f "manage.py" ]; then echo "Running Django migrations..." python manage.py migrate --noinput echo "Collecting static files..." python manage.py collectstatic --noinput # Create admin user if specified if [ -n "$ADMIN_USERNAME" ] && [ -n "$ADMIN_PASSWORD" ] && [ -n "$ADMIN_EMAIL" ]; then echo "Creating admin user..." echo "from django.contrib.auth import get_user_model; from django.core.management import call_command; User = get_user_model(); User.objects.create_superuser('$ADMIN_USERNAME', '$ADMIN_EMAIL', '$ADMIN_PASSWORD') if not User.objects.filter(email='$ADMIN_EMAIL').exists() else None" | \ python manage.py shell 2>/dev/null || echo "Admin user may already exist" fi fi # Start application (modify as needed) if [ -f "wsgi.py" ] || [ -f "config/wsgi.py" ]; then echo "Starting Django with gunicorn..." exec gunicorn config.wsgi:application --bind 0.0.0.0:5000 --workers ${NUM_WORKERS:-4} elif [ -f "app.py" ]; then echo "Starting Flask application..." exec python app.py else echo "No entrypoint found, trying default..." exec "$@" fi