#!/bin/sh # Exit immediately if a command exits with a non-zero status. set -e # Optional: Wait for the database to be ready # This simple loop tries to connect using Django's checks until it succeeds. # Requires DATABASE_URL environment variable to be set correctly. echo "Waiting for database..." # You might need to install netcat (nc) in your Dockerfile for this: # RUN apt-get update && apt-get install -y netcat-openbsd && rm -rf /var/lib/apt/lists/* # Or use a more robust python script check if nc is not available/preferred. # Simple check using Django shell (assumes DATABASE_URL is configured) # Loop until the db connection is successful until python manage.py shell -c "import sys; from django.db import connections; sys.exit(0) if connections['default'].cursor() else sys.exit(1)"; do echo "Database is unavailable - sleeping" sleep 1 done echo "Database is up - continuing..." # Apply database migrations echo "Applying database migrations..." python manage.py migrate --noinput # --- Create Superuser using the management command --- echo "Attempting to create superuser if needed..." python manage.py createadmin # Start the main process (passed as arguments to the script) # "$@" executes the command passed in the docker-compose 'command' or the Dockerfile 'CMD'. echo "Starting server..." exec "$@"