|
@@ -73,7 +73,7 @@ if [ -f "$ENV_FILE" ]; then
|
|
|
fi
|
|
fi
|
|
|
|
|
|
|
|
# 3. Validate required secrets
|
|
# 3. Validate required secrets
|
|
|
-required_vars=("DB_PASSWORD" "REDIS_PASSWORD" "JWT_SECRET" "JWT_REFRESH_SECRET" "S3_SECRET_KEY" "S3_PUBLIC_ENDPOINT" "NEXT_PUBLIC_API_URL" "ALLOWED_ORIGINS")
|
|
|
|
|
|
|
+required_vars=("DB_PASSWORD" "REDIS_PASSWORD" "JWT_SECRET" "JWT_REFRESH_SECRET" "S3_SECRET_KEY" "S3_PUBLIC_ENDPOINT" "NEXT_PUBLIC_API_URL" "ALLOWED_ORIGINS" "DOMAIN")
|
|
|
missing=()
|
|
missing=()
|
|
|
for var in "${required_vars[@]}"; do
|
|
for var in "${required_vars[@]}"; do
|
|
|
if [ -z "${!var:-}" ]; then
|
|
if [ -z "${!var:-}" ]; then
|
|
@@ -105,22 +105,26 @@ create_docker_secrets
|
|
|
echo ">>> Собираю и запускаю контейнеры..."
|
|
echo ">>> Собираю и запускаю контейнеры..."
|
|
|
docker compose -f deploy/docker-compose.prod.yml up -d --build
|
|
docker compose -f deploy/docker-compose.prod.yml up -d --build
|
|
|
|
|
|
|
|
-# 5. Health check (migrations run in entrypoint)
|
|
|
|
|
-echo ">>> Проверяю здоровье (ждём миграции + старт)..."
|
|
|
|
|
-for i in $(seq 1 30); do
|
|
|
|
|
- HEALTH=$(curl -sf http://localhost:8080/api/v1/health 2>/dev/null || echo '{"status":"fail"}')
|
|
|
|
|
- if echo "$HEALTH" | grep -q '"ok"'; then
|
|
|
|
|
- break
|
|
|
|
|
|
|
+# 6. Health check (Caddy -> backend -> migrations)
|
|
|
|
|
+echo ">>> Проверяю здоровье (ждём Caddy + миграции + старт)..."
|
|
|
|
|
+for i in $(seq 1 60); do
|
|
|
|
|
+ # Check Caddy health (port 2019 metrics endpoint)
|
|
|
|
|
+ if docker compose -f deploy/docker-compose.prod.yml exec -T caddy wget -q --spider http://localhost:2019/metrics 2>/dev/null; then
|
|
|
|
|
+ # Caddy is up, check backend through Caddy
|
|
|
|
|
+ HEALTH=$(curl -sf "https://${DOMAIN}/api/v1/health" 2>/dev/null || curl -sf http://localhost:8080/api/v1/health 2>/dev/null || echo '{"status":"fail"}')
|
|
|
|
|
+ if echo "$HEALTH" | grep -q '"ok"'; then
|
|
|
|
|
+ break
|
|
|
|
|
+ fi
|
|
|
fi
|
|
fi
|
|
|
- if [ $i -eq 30 ]; then
|
|
|
|
|
|
|
+ if [ $i -eq 60 ]; then
|
|
|
echo "✗ Таймаут ожидания здоровья API"
|
|
echo "✗ Таймаут ожидания здоровья API"
|
|
|
- docker compose -f deploy/docker-compose.prod.yml logs --tail=30 backend
|
|
|
|
|
|
|
+ docker compose -f deploy/docker-compose.prod.yml logs --tail=30 caddy backend
|
|
|
exit 1
|
|
exit 1
|
|
|
fi
|
|
fi
|
|
|
sleep 2
|
|
sleep 2
|
|
|
done
|
|
done
|
|
|
|
|
|
|
|
echo "✓ Деплой успешен!"
|
|
echo "✓ Деплой успешен!"
|
|
|
-echo "API: ${NEXT_PUBLIC_API_URL}"
|
|
|
|
|
-echo "Фронтенд: http://localhost:3000"
|
|
|
|
|
-echo "MinIO консоль: ${S3_PUBLIC_ENDPOINT}:9001"
|
|
|
|
|
|
|
+echo "Фронтенд: https://${DOMAIN}"
|
|
|
|
|
+echo "API: https://api.${DOMAIN}/api/v1"
|
|
|
|
|
+echo "MinIO консоль: https://minio.${DOMAIN} (basic auth)"
|