39 lines
1.2 KiB
Bash
Executable File
39 lines
1.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ENV_FILE="${1:-.env.prod}"
|
|
COMPOSE_FILE="${2:-docker-compose.prod.yml}"
|
|
HEALTH_URL="${DEPLOY_HEALTH_URL:-http://127.0.0.1:${APP_PORT:-8088}/healthz/}"
|
|
RUN_DJANGO_CHECK="${RUN_DJANGO_CHECK:-1}"
|
|
export APP_ENV_FILE="$ENV_FILE"
|
|
COMPOSE=(docker compose --env-file "$ENV_FILE" -f "$COMPOSE_FILE")
|
|
|
|
if [[ ! -f "$ENV_FILE" ]]; then
|
|
echo "Missing env file: $ENV_FILE" >&2
|
|
exit 1
|
|
fi
|
|
|
|
"${COMPOSE[@]}" build web worker caddy
|
|
"${COMPOSE[@]}" up -d db redis
|
|
"${COMPOSE[@]}" run --rm --user root web sh -c "mkdir -p /app/media/pdfs /app/staticfiles /app/backups && chown -R app:app /app/media /app/staticfiles /app/backups"
|
|
"${COMPOSE[@]}" run --rm web python manage.py migrate --noinput
|
|
"${COMPOSE[@]}" run --rm web python manage.py bootstrap_initial_users
|
|
"${COMPOSE[@]}" run --rm web python manage.py collectstatic --noinput
|
|
|
|
if [[ "$RUN_DJANGO_CHECK" == "1" ]]; then
|
|
"${COMPOSE[@]}" run --rm web python manage.py check
|
|
fi
|
|
|
|
"${COMPOSE[@]}" up -d web worker caddy
|
|
|
|
for i in $(seq 1 30); do
|
|
if curl --fail --silent --show-error --max-time 5 "$HEALTH_URL" >/dev/null; then
|
|
echo "Deployment healthy: $HEALTH_URL"
|
|
exit 0
|
|
fi
|
|
sleep 2
|
|
done
|
|
|
|
echo "Health check did not become ready in time: $HEALTH_URL" >&2
|
|
exit 1
|