diff --git a/backend/Dockerfile b/backend/Dockerfile index 8a25a60..25b03cd 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -31,10 +31,10 @@ COPY requirements.txt ./ RUN pip install --no-cache-dir -r requirements.txt # Copy the entrypoint script first -COPY --chown=archivist:archivist ./entrypoint.sh /app/entrypoint.sh +COPY ./entrypoint.sh /entrypoint.sh # Ensure it's executable inside the container too -RUN chmod +x /app/entrypoint.sh +RUN chmod +x /entrypoint.sh # Copy the rest of the backend source code COPY --chown=archivist:archivist . . @@ -43,7 +43,7 @@ COPY --chown=archivist:archivist . . USER archivist # Set the entrypoint script -ENTRYPOINT ["/app/entrypoint.sh"] +ENTRYPOINT ["/entrypoint.sh"] # Set the default command that the entrypoint will execute if none is provided by compose # This is useful if you run the image directly without compose sometimes diff --git a/backend/entrypoint.sh b/backend/entrypoint.sh new file mode 100644 index 0000000..e3867ff --- /dev/null +++ b/backend/entrypoint.sh @@ -0,0 +1,33 @@ +#!/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 "$@"