Skip to content
Snippets Groups Projects
Select Git revision
  • 123ffd8f709a8dac3ee0e5695f0b5162781f34e4
  • master default protected
  • 1182-migration-to-vue-3-and-vuetify-3
  • effective-person
  • 1336-server-search-on-personfield-doesn-t-work-with-single-items
  • renovate/graphene-django-3.x
  • 1345-introduce-annotate-methods-for-more-person-related-rules
  • migrate-crud-to-vue-3-and-generalize
  • check/update-pyproject-toml
  • check/update-merge-request-template
  • check/update-builddeps-package-json
  • check/update-tox-ini
  • 1297-freebusy-calendar-does-not-work-over-caldav
  • 1268-add-specific-availability-planning-frontend
  • renovate/ipython-9.x
  • renovate/django-guardian-3.x
  • 1343-fix-person-related-permissions
  • newer-and-rebased-migrate-crud-to-vue-3-and-generalize
  • stable/4.0.0
  • db-init
  • 1314-fix-handling-of-end-datetime-in-calendar-events-query
  • 4.0.4 protected
  • 4.1.0.dev1 protected
  • 4.1.0.dev0 protected
  • 4.0.3 protected
  • 4.0.2 protected
  • 4.0.1 protected
  • 4.0.0 protected
  • 4.0.0.dev16 protected
  • 3.2.2 protected
  • 3.1.7 protected
  • 4.0.0.dev15 protected
  • 4.0.0.dev14 protected
  • 4.0.0.dev13 protected
  • 4.0.0.dev12 protected
  • 4.0.0.dev11 protected
  • 3.2.1 protected
  • 3.1.6 protected
  • 4.0.0.dev10 protected
  • 4.0.0.dev9 protected
  • 4.0.0.dev8 protected
41 results

docker-startup.sh

Blame
  • docker-startup.sh 2.15 KiB
    #!/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
    		echo -n .
    	done
    	echo
    }
    
    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
    		echo -n .
    	done
    	echo
    }
    
    prepare_database() {
    	# Migrate database; should only be run in app container or job
    	aleksis-admin migrate && aleksis-admin createinitialrevisions
    }
    
    # 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
    	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
    	;;
    *)
    	# Run arguments as command verbatim
    	exec "$@"
    	;;
    esac