| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #!/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
|