Appearance
Руководство по запуску микросервисов
Это руководство поможет вам запустить все микросервисы локально для разработки и тестирования.
Источник: ранее файл
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/health3. Просмотр логов
bash
# Все сервисы
docker-compose -f docker-compose.microservices.yml logs -f
# Конкретный сервис
docker-compose -f docker-compose.microservices.yml logs -f auth-service4. Остановка сервисов
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-billing2. Настройка переменных окружения
Создайте файлы .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=localhostservices/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=localhostservices/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=localhost3. Установка зависимостей
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 tidy4. Запуск сервисов
В отдельных терминалах:
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Миграция данных из монолита
Важно: порядок миграции
- Сначала запустите auth-service и выполните миграцию пользователей.
- Затем запустите core-service и выполните миграцию организаций и связанных данных.
- В конце запустите 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.csv2. Миграция организаций и связанных данных (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-service3. Миграция начислений (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.csvAPI‑эндпоинты
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— Статус 2FAPOST /api/auth/2fa/setup— Настройка 2FAPOST /api/auth/2fa/verify-setup— Подтверждение настройки 2FAPOST /api/auth/2fa/disable— Отключение 2FAPOST /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Устранение неполадок
Проблема: сервис не запускается
- Проверьте логи:
docker-compose -f docker-compose.microservices.yml logs <service-name>. - Убедитесь, что БД доступна:
docker-compose -f docker-compose.microservices.yml ps. - Проверьте переменные окружения.
Проблема: ошибка подключения к БД
- Убедитесь, что PostgreSQL запущен.
- Проверьте
DATABASE_URLв переменных окружения. - Проверьте, что БД создана:
psql -l | grep nimbus.
Проблема: ошибка подключения к Redis
- Убедитесь, что Redis запущен:
redis-cli ping. - Проверьте
REDIS_URLв переменных окружения.
Проблема: CORS‑ошибки
- Убедитесь, что
CORS_ORIGINправильно настроен. - Проверьте, что фронтенд использует правильный URL.
Следующие шаги
- Настройте мониторинг (Prometheus, Grafana).
- Настройте логирование (ELK Stack или Loki).
- Настройте API Gateway для маршрутизации запросов.
- Добавьте остальные handlers для core-service.
- Реализуйте функциональность billing-service.