fix prod ddeployment
This commit is contained in:
@@ -50,9 +50,63 @@ traefik_compose() {
|
||||
start_prod_services() {
|
||||
ensure_env_file
|
||||
ensure_api_uploads_volume
|
||||
|
||||
local services=("$@")
|
||||
local needs_migrations=0
|
||||
|
||||
for service in "${services[@]}"; do
|
||||
case "${service}" in
|
||||
api|marketplace|dashboard|admin)
|
||||
needs_migrations=1
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ ${needs_migrations} -eq 1 ]]; then
|
||||
prod_compose up --build -d postgres redis
|
||||
wait_for_healthy postgres 120
|
||||
prod_compose run --rm --build migrate
|
||||
fi
|
||||
|
||||
prod_compose up --build -d "$@"
|
||||
}
|
||||
|
||||
require_release_image() {
|
||||
if [[ -z "${APP_IMAGE:-}" || -z "${APP_VERSION:-}" ]]; then
|
||||
echo "APP_IMAGE and APP_VERSION must be set for pull-based production deploys." >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
login_registry_if_configured() {
|
||||
local configured=0
|
||||
|
||||
[[ -n "${REGISTRY_HOST:-}" ]] && configured=$((configured + 1))
|
||||
[[ -n "${REGISTRY_USER:-}" ]] && configured=$((configured + 1))
|
||||
[[ -n "${REGISTRY_PASSWORD:-}" ]] && configured=$((configured + 1))
|
||||
|
||||
if [[ ${configured} -eq 0 ]]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [[ ${configured} -ne 3 ]]; then
|
||||
echo "REGISTRY_HOST, REGISTRY_USER, and REGISTRY_PASSWORD must either all be set or all be unset." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "${REGISTRY_PASSWORD}" | docker login "${REGISTRY_HOST}" -u "${REGISTRY_USER}" --password-stdin
|
||||
}
|
||||
|
||||
pull_prod_release_images() {
|
||||
require_release_image
|
||||
prod_compose pull migrate api marketplace dashboard admin
|
||||
}
|
||||
|
||||
run_prod_migrations() {
|
||||
prod_compose run --rm migrate
|
||||
}
|
||||
|
||||
wait_for_healthy() {
|
||||
local service="$1"
|
||||
local timeout="${2:-120}"
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
source "${ROOT_DIR}/scripts/docker-prod-common.sh"
|
||||
|
||||
echo "Deploying production release ${APP_IMAGE:-<missing>}:${APP_VERSION:-<missing>}"
|
||||
|
||||
ensure_env_file
|
||||
ensure_traefik_network
|
||||
ensure_api_uploads_volume
|
||||
require_release_image
|
||||
login_registry_if_configured
|
||||
|
||||
echo "Pulling release images"
|
||||
pull_prod_release_images
|
||||
|
||||
echo "Starting shared infrastructure"
|
||||
start_traefik
|
||||
prod_compose up -d postgres redis
|
||||
wait_for_healthy postgres 120
|
||||
|
||||
echo "Running database migrations"
|
||||
run_prod_migrations
|
||||
|
||||
echo "Starting application services"
|
||||
prod_compose up -d api marketplace dashboard admin pgmanage
|
||||
wait_for_healthy api 180
|
||||
wait_for_healthy marketplace 180
|
||||
wait_for_healthy dashboard 180
|
||||
wait_for_healthy admin 180
|
||||
|
||||
echo "Pruning old images"
|
||||
docker image prune -f >/dev/null
|
||||
|
||||
echo "Production release ${APP_IMAGE}:${APP_VERSION} is up and healthy."
|
||||
@@ -6,7 +6,7 @@ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
source "${ROOT_DIR}/scripts/docker-prod-common.sh"
|
||||
|
||||
start_traefik
|
||||
start_prod_services
|
||||
start_prod_services postgres redis api marketplace dashboard admin pgmanage
|
||||
wait_for_healthy api
|
||||
wait_for_healthy marketplace
|
||||
wait_for_healthy dashboard
|
||||
|
||||
Reference in New Issue
Block a user