deploy.sh 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. cd "$(dirname "$0")/.."
  4. ENV_FILE="${1:-deploy/env.prod}"
  5. if [ ! -f "$ENV_FILE" ]; then
  6. echo "Ошибка: файл $ENV_FILE не найден"
  7. echo "Создай его из шаблона: cp deploy/env.prod.example deploy/env.prod"
  8. exit 1
  9. fi
  10. echo "=== PhotoPlaces — деплой ==="
  11. # 1. Генерация секретов, если не заменены
  12. check_secret() {
  13. local var=$1
  14. local val
  15. val=$(grep "^${var}=" "$ENV_FILE" | cut -d'=' -f2-)
  16. if [[ "$val" == *"CHANGE_ME"* ]] || [[ -z "$val" ]]; then
  17. echo "!!! $var не настроен. Сгенерировать случайный? [y/N]"
  18. read -r answer
  19. if [[ "$answer" == "y" ]]; then
  20. local secret
  21. secret=$(openssl rand -hex 32)
  22. if [[ "$OSTYPE" == "darwin"* ]]; then
  23. sed -i '' "s/^${var}=.*/${var}=${secret}/" "$ENV_FILE"
  24. else
  25. sed -i "s/^${var}=.*/${var}=${secret}/" "$ENV_FILE"
  26. fi
  27. echo "✓ $var сгенерирован"
  28. fi
  29. fi
  30. }
  31. check_secret "DB_PASSWORD"
  32. check_secret "REDIS_PASSWORD"
  33. check_secret "JWT_SECRET"
  34. check_secret "JWT_REFRESH_SECRET"
  35. check_secret "S3_SECRET_KEY"
  36. # 2. Экспорт переменных
  37. set -a
  38. source "$ENV_FILE"
  39. set +a
  40. # 3. Билд и запуск
  41. echo ">>> Собираю и запускаю контейнеры..."
  42. docker compose -f deploy/docker-compose.prod.yml up -d --build
  43. # 4. Проверка
  44. echo ">>> Проверяю здоровье..."
  45. sleep 5
  46. HEALTH=$(curl -s http://localhost:8080/api/v1/health || echo '{"status":"fail"}')
  47. echo "API health: $HEALTH"
  48. if echo "$HEALTH" | grep -q '"ok"'; then
  49. echo "✓ Деплой успешен!"
  50. echo "API: http://localhost:8080/api/v1"
  51. echo "Фронтенд: http://localhost:3000"
  52. echo "MinIO консоль: http://localhost:9001"
  53. else
  54. echo "✗ Что-то пошло не так. Логи:"
  55. docker compose -f deploy/docker-compose.prod.yml logs --tail=20
  56. fi