Перейти к содержанию

Environments

Окружения разработки и деплоя AqStream.

Обзор окружений

Environment Назначение URL
Local Локальная разработка localhost
Production Продакшен aqstream.ru

Production URLs:

  • Frontend: https://aqstream.ru
  • API Gateway: https://api.aqstream.ru
  • Documentation: https://docs.aqstream.ru

Local Development

Требования

  • Docker 24+ и Docker Compose v2
  • JDK 25
  • Node.js 20 LTS
  • pnpm 9+
  • 16 GB RAM (рекомендуется)

Быстрый старт

# Клонировать репозиторий
git clone https://github.com/egorov-ma/aqstream.git
cd aqstream

# Скопировать конфигурацию
cp .env.example .env

# Запустить инфраструктуру
make local-up

# Запустить все backend сервисы (в одном терминале)
make run-all

# Или запустить frontend (в отдельном терминале)
make run-frontend

Порты

Сервис Порт
Frontend 3000
Gateway 8080
User Service 8081
Event Service 8082
Payment Service 8083
Notification Service 8084
Media Service 8085
Analytics Service 8086
PostgreSQL (shared) 5432
PostgreSQL (user) 5433
PostgreSQL (payment) 5434
PostgreSQL (analytics) 5435
Redis 6379
RabbitMQ 5672
RabbitMQ Management 15672
MinIO 9000
MinIO Console 9001

Запуск отдельных сервисов

# Только инфраструктура (БД, Redis, RabbitMQ)
make local-up

# Один backend сервис
make run-event          # Event Service
make run-user           # User Service
make run-gateway        # API Gateway

# Все backend сервисы (в правильном порядке)
make run-all

# Frontend
make run-frontend

Hot Reload

Backend: Spring DevTools (автоматический restart при изменениях).

Frontend: Next.js Fast Refresh.

Управление инфраструктурой

# Запустить инфраструктуру
make local-up

# Остановить инфраструктуру
make local-down

# Посмотреть логи
make log-infra

# Статус контейнеров
make local-status

# Проверить health сервисов
make health

# Полный сброс (удаление данных)
make local-reset

Docker Compose файлы

Файл Назначение
docker-compose.yml Основная конфигурация инфраструктуры
docker-compose.override.yml Dev-специфичные настройки (verbose logging)

Полезные URL

URL Описание Credentials
http://localhost:3000 Frontend
http://localhost:8080/swagger-ui.html API Docs (Gateway)
http://localhost:8082/swagger-ui.html Event Service API
http://localhost:15672 RabbitMQ Management guest/guest
http://localhost:9001 MinIO Console minioadmin/minioadmin

Production

Характеристики

  • High availability
  • Автоматическое масштабирование
  • Мониторинг и алертинг
  • Бэкапы

Деплой

Автоматический деплой при push в main:

# .github/workflows/deploy-production.yml
on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    environment: production
    steps:
      - name: Deploy via SSH
        uses: appleboy/ssh-action@v1.0.3
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USER }}
          key: ${{ secrets.SSH_KEY }}
          script: |
            cd /app
            docker compose pull
            docker compose up -d

Конфигурация

Environment Variables

# Общие
NODE_ENV=development|production
LOG_LEVEL=debug|info|warn|error

# Database
DATABASE_URL=jdbc:postgresql://host:port/db
DATABASE_USERNAME=user
DATABASE_PASSWORD=secret

# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=your-redis-password

# RabbitMQ
RABBITMQ_HOST=localhost
RABBITMQ_PORT=5672
RABBITMQ_USERNAME=guest
RABBITMQ_PASSWORD=guest

# JWT
JWT_SECRET=your-secret-key

# External Services
PAYMENT_API_KEY=...
PAYMENT_WEBHOOK_SECRET=...

# Telegram Bot (см. секцию "Telegram Bot Setup")
TELEGRAM_BOT_TOKEN=...
TELEGRAM_BOT_USERNAME=...

Telegram Bot Setup

Для работы уведомлений через Telegram необходимо создать бота:

  1. Создание бота через @BotFather:
  2. Откройте Telegram и найдите @BotFather
  3. Отправьте команду /newbot
  4. Введите имя бота (например, "AqStream Notifications")
  5. Введите username бота (должен заканчиваться на "bot", например: AqStreamBot)
  6. Скопируйте полученный токен

  7. Настройка команд бота:

/setcommands

Выберите вашего бота и отправьте:

start - Начать работу с ботом
help - Показать справку
  1. Настройка переменных окружения:
# Токен от @BotFather (формат: 123456789:ABCdefGHIjklMNOpqrsTUVwxyz)
TELEGRAM_BOT_TOKEN=your-bot-token

# Username бота без @
TELEGRAM_BOT_USERNAME=AqStreamBot

# Опционально: URL для webhook (если пусто — используется long polling)
TELEGRAM_WEBHOOK_URL=https://api.aqstream.ru/telegram/webhook

# Опционально: таймаут long polling в секундах (по умолчанию 30)
TELEGRAM_LONG_POLLING_TIMEOUT=30
  1. Проверка работы:
  2. Запустите notification-service
  3. Откройте бота в Telegram
  4. Отправьте /start — должно прийти приветственное сообщение

Режимы работы:

  • Long Polling (по умолчанию) — бот опрашивает Telegram API. Подходит для разработки.
  • Webhook — Telegram отправляет updates на ваш сервер. Требует HTTPS. Рекомендуется для production.

Для локальной разработки с webhook:

# Используйте ngrok для туннелирования
ngrok http 8084
# Укажите полученный URL в TELEGRAM_WEBHOOK_URL

Profiles

# application.yml
spring:
  profiles:
    active: ${SPRING_PROFILES_ACTIVE:local}

---
spring:
  config:
    activate:
      on-profile: local
  datasource:
    url: jdbc:postgresql://localhost:5432/event_service

---
spring:
  config:
    activate:
      on-profile: production
  datasource:
    url: ${DATABASE_URL}
    hikari:
      maximum-pool-size: 20

Troubleshooting

Порт занят

# Найти процесс
lsof -i :8080

# Или убить все Docker контейнеры
docker compose down

База не запускается

# Проверить логи
docker compose logs postgres-shared

# Удалить volume и пересоздать
docker compose down -v
docker compose up -d postgres-shared

Миграции не применяются

# Применить вручную
./gradlew :services:event-service:liquibaseUpdate

# Проверить статус
docker compose exec postgres-shared psql -U aqstream -d shared_services_db \
  -c "SELECT * FROM event_service.databasechangelog ORDER BY orderexecuted DESC LIMIT 5;"

Дальнейшее чтение

  • GitHub Secrets — настройка секретов для production
  • CI/CD Pipeline — автоматизация деплоя
  • Deploy — процесс деплоя
  • Tooling — инструменты