#!/usr/bin/env bash set -euo pipefail cd "$(dirname "$0")/.." ENV_FILE="${1:-deploy/env.prod}" if [ ! -f "$ENV_FILE" ]; then echo "Ошибка: файл $ENV_FILE не найден" echo "Создай его из шаблона: cp deploy/env.prod.example deploy/env.prod" exit 1 fi echo "=== PhotoPlaces — деплой ===" # 1. Генерация секретов, если не заменены check_secret() { local var=$1 local val val=$(grep "^${var}=" "$ENV_FILE" | cut -d'=' -f2-) if [[ "$val" == *"CHANGE_ME"* ]] || [[ -z "$val" ]]; then echo "!!! $var не настроен. Сгенерировать случайный? [y/N]" read -r answer if [[ "$answer" == "y" ]]; then local secret secret=$(openssl rand -hex 32) if [[ "$OSTYPE" == "darwin"* ]]; then sed -i '' "s/^${var}=.*/${var}=${secret}/" "$ENV_FILE" else sed -i "s/^${var}=.*/${var}=${secret}/" "$ENV_FILE" fi echo "✓ $var сгенерирован" fi fi } check_secret "DB_PASSWORD" check_secret "REDIS_PASSWORD" check_secret "JWT_SECRET" check_secret "JWT_REFRESH_SECRET" check_secret "S3_SECRET_KEY" # 2. Экспорт переменных set -a source "$ENV_FILE" set +a # 3. Билд и запуск echo ">>> Собираю и запускаю контейнеры..." docker compose -f deploy/docker-compose.prod.yml up -d --build # 4. Проверка echo ">>> Проверяю здоровье..." sleep 5 HEALTH=$(curl -s http://localhost:8080/api/v1/health || echo '{"status":"fail"}') echo "API health: $HEALTH" if echo "$HEALTH" | grep -q '"ok"'; then echo "✓ Деплой успешен!" echo "API: http://localhost:8080/api/v1" echo "Фронтенд: http://localhost:3000" echo "MinIO консоль: http://localhost:9001" else echo "✗ Что-то пошло не так. Логи:" docker compose -f deploy/docker-compose.prod.yml logs --tail=20 fi