From 1fc14331b85d0f287369411b6d23af787a1a738b Mon Sep 17 00:00:00 2001 From: Dominik George <dominik.george@teckids.org> Date: Fri, 19 Mar 2021 00:08:37 +0100 Subject: [PATCH] [Docker] Comment startup script --- docker-startup.sh | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/docker-startup.sh b/docker-startup.sh index 09422e194..98705fb16 100755 --- a/docker-startup.sh +++ b/docker-startup.sh @@ -1,10 +1,33 @@ #!/bin/sh +#- +# Startup/entrypoint script for deployments based on Docker, vanilla or K8s +# +# Designed to be used in Kubernetes in a way such that this container is used +# in four places: +# +# 1. The app pod(s), setting PREPARE = 0 +# 2. The celery-worker pod(s), setting PREPARE = 0 and RUN_MODE = celery-worker +# 3. One celery-beat pod, setting PREPARE = 0 and RUN_MODE = celery-beat +# 4. A post-deploy job, setting RUN_MODE = prepare +# +# To run as stand-alone Docker container, bundling all components, set +# ALEKSIS_dev__uwsgi__celery = true. +# Run mode to start container in +# +# uwsgi - application server +# celery-$foo - celery commands (e.g. worker or beat) +# * - Anything else to run arguments verbatim RUN_MODE=${RUN_MODE:-uwsgi} + +# HTTP port to let uWSGI bind to HTTP_PORT=${HTTP_PORT:-8000} + +# Run preparation steps before real command PREPARE=${PREPARE:-1} wait_migrations() { + # Wait for migrations to be applied from elsewhere, e.g. a K8s job echo -n "Waiting for migrations to appear" until aleksis-admin migrate --check >/dev/null 2>&1; do sleep 0.5 @@ -14,6 +37,7 @@ wait_migrations() { } wait_database() { + # Wait for database to be reachable echo -n "Waiting for database." until aleksis-admin dbshell -- -c "SELECT 1" >/dev/null 2>&1; do sleep 0.5 @@ -23,16 +47,20 @@ wait_database() { } prepare_static() { + # Prepare static files; should only be run in app container or job aleksis-admin compilescss aleksis-admin collectstatic --no-input --clear } prepare_database() { + # Migrate database; should only be run in app container or job aleksis-admin migrate aleksis-admin createinitialrevisions } if [ -z "$ALEKSIS_secret_key" ]; then + # Use a random session secret key if none was provided + # In K8s, should be provided from a K8s secret if [ ! -e /var/lib/aleksis/secret_key ]; then touch /var/lib/aleksis/secret_key chmod 600 /var/lib/aleksis/secret_key @@ -41,33 +69,44 @@ if [ -z "$ALEKSIS_secret_key" ]; then ALEKSIS_secret_key=$(cat /var/lib/aleksis/secret_key) fi +# Wait for database to be reachable under all conditions wait_database case "$RUN_MODE" in uwsgi) + # uWSGI app server mode + if [ $PREPARE = 1 ]; then + # Responsible for running migratiosn and preparing staticfiles prepare_database prepare_static else + # Wait for migrations to be applied elsewhere wait_migrations fi exec aleksis-admin runuwsgi -- --http-socket=:$HTTP_PORT ;; celery-*) + # Celery command mode + if [ $PREPARE = 1 ]; then + # Responsible for running migrations prepare_database else + # Wait for migrations to be applied elsewhere wait_migrations fi exec celery -A aleksis.core ${RUN_MODE#celery-} ;; prepare) + # Preparation only mode prepare_database prepare_static ;; *) + # Run arguments as command verbatim exec "$@" ;; esac -- GitLab