60 lines
1.7 KiB
Bash
Executable File
60 lines
1.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Deploy the Docker Compose production stack from the repo root.
|
|
# Prerequisites: `.env` (from `.env.example`) on the SAME host/path as this repo.
|
|
#
|
|
# Usage:
|
|
# ./scripts/deploy-prod.sh # pull pinned images, build, up -d
|
|
# ./scripts/deploy-prod.sh --no-pull # offline / cached images only
|
|
#fdf
|
|
set -euo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
COMPOSE_ABS="${ROOT}/docker-compose.prod.yml"
|
|
|
|
cd "$ROOT"
|
|
|
|
DO_PULL=1
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--no-pull) DO_PULL=0 ;;
|
|
-h|--help)
|
|
grep -E '^#( |$)' "$0" | sed 's/^# \{0,1\}//'
|
|
exit 0
|
|
;;
|
|
*)
|
|
printf 'Unknown argument: %s\n' "$1" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [[ ! -f "$ROOT/.env" ]]; then
|
|
printf 'Missing %s\nRun: cp .env.example .env && edit secrets\n' "$ROOT/.env" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "→ Validating prod environment..."
|
|
"$ROOT/scripts/verify-prod-env.sh"
|
|
|
|
echo "→ Validating compose file..."
|
|
docker compose --env-file "$ROOT/.env" -f "$COMPOSE_ABS" config >/dev/null
|
|
|
|
if [[ "$DO_PULL" -eq 1 ]]; then
|
|
echo "→ Pulling images..."
|
|
docker compose --env-file "$ROOT/.env" -f "$COMPOSE_ABS" pull
|
|
fi
|
|
|
|
echo "→ Building images..."
|
|
docker compose --env-file "$ROOT/.env" -f "$COMPOSE_ABS" build
|
|
|
|
echo "→ Starting stack..."
|
|
docker compose --env-file "$ROOT/.env" -f "$COMPOSE_ABS" up -d --remove-orphans
|
|
|
|
echo "→ Status"
|
|
docker compose --env-file "$ROOT/.env" -f "$COMPOSE_ABS" ps
|
|
|
|
printf '\nDeployed. Logs: docker compose --env-file .env -f docker-compose.prod.yml logs -f be0\n'
|
|
printf 'Connectivity: bash scripts/check-prod-stack.sh\n'
|
|
printf 'Postgres auth is FIXED on first DB init — docs/deploy-production-docker.md\n'
|