#!/usr/bin/env bash set -euo pipefail cd "$(dirname "$0")" # Share a lock with manual deployments and config application. if [ ! -f .management.lock ]; then (umask 022; : > .management.lock); fi exec 9<.management.lock flock -n 9 || { echo 'Another deployment is running' >&2; exit 1; } touch config.local compose() { docker compose --env-file config.local --env-file .env "$@"; } # Validate before stopping any container. compose config --quiet compose up -d --force-recreate --remove-orphans echo '→ ждём готовности api' for _ in $(seq 1 90); do if compose exec -T nginx wget -qO- http://127.0.0.1/readyz >/dev/null 2>&1; then echo 'Конфигурация применена; API готов' exit 0 fi sleep 2 done echo 'API не стал готов: проверьте docker compose logs api' >&2 exit 1