Skip to content

Руководство по запуску микросервисов

Это руководство поможет вам запустить все микросервисы локально для разработки и тестирования.

Источник: ранее файл services/STARTUP_GUIDE.md (перенесён и стандартизирован).

Предварительные требования

  • Docker и Docker Compose
  • Go 1.23+ (для локальной разработки без Docker)
  • PostgreSQL 15+ (если запускаете БД локально)
  • Redis 7+ (если запускаете Redis локально)

Быстрый старт с Docker Compose

1. Запуск всех сервисов

bash
# Из корневой директории проекта
docker-compose -f docker-compose.microservices.yml up -d

Это запустит:

  • PostgreSQL для каждого сервиса:
    • postgres-auth на порту 5433 (БД: nimbus_auth)
    • postgres-core на порту 5434 (БД: nimbus_core)
    • postgres-billing на порту 5435 (БД: nimbus_billing)
  • Redis для каждого сервиса:
    • redis-auth на порту 6379 (для auth-service)
    • redis-core на порту 6380 (для core-service)
    • redis-billing на порту 6381 (для billing-service)
  • auth-service на порту 8001
  • core-service на порту 8002
  • billing-service на порту 8003

2. Проверка работоспособности

bash
# Проверка auth-service
curl http://localhost:8001/health

# Проверка core-service
curl http://localhost:8002/health

# Проверка billing-service
curl http://localhost:8003/health

3. Просмотр логов

bash
# Все сервисы
docker-compose -f docker-compose.microservices.yml logs -f

# Конкретный сервис
docker-compose -f docker-compose.microservices.yml logs -f auth-service

4. Остановка сервисов

bash
docker-compose -f docker-compose.microservices.yml down

Локальная разработка (без Docker для сервисов)

1. Настройка баз данных

Создайте три базы данных PostgreSQL:

sql
CREATE DATABASE nimbus_auth;
CREATE DATABASE nimbus_core;
CREATE DATABASE nimbus_billing;

Или используйте Docker только для БД и Redis:

bash
docker-compose -f docker-compose.microservices.yml up -d postgres-auth postgres-core postgres-billing redis-auth redis-core redis-billing

2. Настройка переменных окружения

Создайте файлы .env в каждой директории сервиса:

services/auth-service/.env:

env
APP_ENV=dev
HTTP_PORT=8001
DATABASE_URL=postgres://postgres:postgres@localhost:5433/nimbus_auth?sslmode=disable
REDIS_URL=redis://localhost:6379/0
JWT_SECRET=uNnBTZJojS6nyp9QHKzlr41BWvyeVQemTHzGwXT3z8c=
CORS_ORIGIN=http://localhost:5173
USE_HTTPS=false
DOMAIN=localhost

services/core-service/.env:

env
APP_ENV=dev
HTTP_PORT=8002
DATABASE_URL=postgres://postgres:postgres@localhost:5434/nimbus_core?sslmode=disable
REDIS_URL=redis://localhost:6380/0
JWT_SECRET=uNnBTZJojS6nyp9QHKzlr41BWvyeVQemTHzGwXT3z8c=
CORS_ORIGIN=http://localhost:5173
AUTH_SERVICE_URL=http://localhost:8001
USE_HTTPS=false
DOMAIN=localhost

services/billing-service/.env:

env
APP_ENV=dev
HTTP_PORT=8003
DATABASE_URL=postgres://postgres:postgres@localhost:5435/nimbus_billing?sslmode=disable
REDIS_URL=redis://localhost:6381/0
JWT_SECRET=uNnBTZJojS6nyp9QHKzlr41BWvyeVQemTHzGwXT3z8c=
CORS_ORIGIN=http://localhost:5173
AUTH_SERVICE_URL=http://localhost:8001
CORE_SERVICE_URL=http://localhost:8002
USE_HTTPS=false
DOMAIN=localhost

3. Установка зависимостей

bash
# Auth Service
cd services/auth-service
go mod download
go mod tidy

# Core Service
cd ../core-service
go mod download
go mod tidy

# Billing Service
cd ../billing-service
go mod download
go mod tidy

4. Запуск сервисов

В отдельных терминалах:

bash
# Terminal 1: Auth Service
cd services/auth-service
go run cmd/server/main.go

# Terminal 2: Core Service
cd services/core-service
go run cmd/server/main.go

# Terminal 3: Billing Service
cd services/billing-service
go run cmd/server/main.go

Миграция данных из монолита

Важно: порядок миграции

  1. Сначала запустите auth-service и выполните миграцию пользователей.
  2. Затем запустите core-service и выполните миграцию организаций и связанных данных.
  3. В конце запустите billing-service и выполните миграцию начислений.

Шаги миграции

1. Миграция пользователей (auth-service)

bash
# Подключитесь к БД монолита и экспортируйте пользователей
psql -d nimbus -c "COPY (SELECT * FROM users) TO STDOUT WITH CSV HEADER" > users.csv

# Импортируйте в auth-service БД
psql -d nimbus_auth -c "COPY users FROM STDIN WITH CSV HEADER" < users.csv

2. Миграция организаций и связанных данных (core-service)

bash
# Экспорт организаций
psql -d nimbus -c "COPY (SELECT * FROM organizations) TO STDOUT WITH CSV HEADER" > organizations.csv
psql -d nimbus_core -c "COPY organizations FROM STDIN WITH CSV HEADER" < organizations.csv

# Экспорт домов
psql -d nimbus -c "COPY (SELECT * FROM houses) TO STDOUT WITH CSV HEADER" > houses.csv
psql -d nimbus_core -c "COPY houses FROM STDIN WITH CSV HEADER" < houses.csv

# И так далее для всех таблиц core-service

3. Миграция начислений (billing-service)

bash
# Экспорт начислений
psql -d nimbus -c "COPY (SELECT * FROM bills) TO STDOUT WITH CSV HEADER" > bills.csv
psql -d nimbus_billing -c "COPY bills FROM STDIN WITH CSV HEADER" < bills.csv

API‑эндпоинты

Auth Service (порт 8001)

  • POST /api/auth/register — Регистрация пользователя
  • POST /api/auth/login — Вход в систему
  • POST /api/auth/logout — Выход из системы
  • POST /api/auth/refresh — Обновление токенов
  • GET /api/auth/user — Получить текущего пользователя
  • GET /api/auth/csrf-token — Получить CSRF токен
  • GET /api/auth/2fa/status — Статус 2FA
  • POST /api/auth/2fa/setup — Настройка 2FA
  • POST /api/auth/2fa/verify-setup — Подтверждение настройки 2FA
  • POST /api/auth/2fa/disable — Отключение 2FA
  • POST /api/auth/2fa/verify-login — Проверка 2FA при входе

Core Service (порт 8002)

  • GET /api/organizations — Список организаций
  • GET /api/organizations/:id — Получить организацию
  • POST /api/organizations — Создать организацию
  • PUT /api/organizations/:id — Обновить организацию
  • DELETE /api/organizations/:id — Удалить организацию

Billing Service (порт 8003)

  • Заготовка для будущей реализации

Тестирование

Тест регистрации и входа

bash
# 1. Получить CSRF токен
CSRF_TOKEN=$(curl -s -c cookies.txt http://localhost:8001/api/auth/csrf-token | jq -r '.csrfToken')

# 2. Регистрация
curl -X POST http://localhost:8001/api/auth/register \
  -H "Content-Type: application/json" \
  -H "X-CSRF-Token: $CSRF_TOKEN" \
  -b cookies.txt \
  -c cookies.txt \
  -d '{
    "firstName": "Test",
    "lastName": "User",
    "username": "testuser",
    "email": "test@example.com",
    "password": "password123"
  }'

# 3. Вход
curl -X POST http://localhost:8001/api/auth/login \
  -H "Content-Type: application/json" \
  -b cookies.txt \
  -c cookies.txt \
  -d '{
    "username": "testuser",
    "password": "password123"
  }'

# 4. Получить текущего пользователя
curl http://localhost:8001/api/auth/user \
  -b cookies.txt

Устранение неполадок

Проблема: сервис не запускается

  1. Проверьте логи: docker-compose -f docker-compose.microservices.yml logs <service-name>.
  2. Убедитесь, что БД доступна: docker-compose -f docker-compose.microservices.yml ps.
  3. Проверьте переменные окружения.

Проблема: ошибка подключения к БД

  1. Убедитесь, что PostgreSQL запущен.
  2. Проверьте DATABASE_URL в переменных окружения.
  3. Проверьте, что БД создана: psql -l | grep nimbus.

Проблема: ошибка подключения к Redis

  1. Убедитесь, что Redis запущен: redis-cli ping.
  2. Проверьте REDIS_URL в переменных окружения.

Проблема: CORS‑ошибки

  1. Убедитесь, что CORS_ORIGIN правильно настроен.
  2. Проверьте, что фронтенд использует правильный URL.

Следующие шаги

  1. Настройте мониторинг (Prometheus, Grafana).
  2. Настройте логирование (ELK Stack или Loki).
  3. Настройте API Gateway для маршрутизации запросов.
  4. Добавьте остальные handlers для core-service.
  5. Реализуйте функциональность billing-service.