Skip to content

Latest commit

 

History

History
484 lines (340 loc) · 18 KB

WINDOWS_SETUP.md

File metadata and controls

484 lines (340 loc) · 18 KB

Инструкция по развертыванию Chat3 на Windows с Docker Desktop

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

  • Windows 10/11
  • Docker Desktop установлен и запущен
  • PowerShell или командная строка

Пошаговая инструкция

Шаг 1: Запустите Docker Desktop

  1. Найдите "Docker Desktop" в меню Пуск
  2. Запустите приложение
  3. Дождитесь полного запуска (иконка в трее должна перестать мигать)
  4. Проверьте, что Docker работает:
    docker ps
    Должна отобразиться пустая таблица или список контейнеров (без ошибок)

Шаг 2: Создайте файл .env

Скопируйте файл .env.example в .env:

Copy-Item .env.example .env

Или создайте файл .env вручную со следующим содержимым:

# Node.js Environment
NODE_ENV=production

# MongoDB Configuration
MONGODB_URI=mongodb://mongodb:27017/chat3

# RabbitMQ Configuration
RABBITMQ_URL=amqp://rmuser:rmpassword@rabbitmq:5672/
RABBITMQ_EVENTS_EXCHANGE=chat3_events
RABBITMQ_UPDATES_EXCHANGE=chat3_updates

# Service URLs
TENANT_API_URL=http://localhost:3000
ADMIN_WEB_URL=http://localhost:3001
CONTROL_API_URL=http://localhost:3002
API_TEST_URL=http://localhost:3003

# Worker Configuration
DIALOG_READ_TASK_POLL_MS=2000
DIALOG_READ_BATCH_SIZE=200

Важно: В Docker Compose сервисы обращаются друг к другу по имени сервиса (mongodb, rabbitmq), а не по localhost или host.docker.internal.

Шаг 3: Соберите Docker-образы

Перейдите в папку проекта и выполните:

docker-compose build

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

Шаг 4: Запустите все сервисы

docker-compose up -d

Эта команда запустит все необходимые сервисы:

  • MongoDB (порт 27017)
  • RabbitMQ (порты 5672 и 15672)
  • Tenant API (порт 3000)
  • Admin Web (порт 3001)
  • Control API (порт 3002)
  • API Test (порт 3003)
  • Update Worker
  • Dialog Read Worker

Шаг 5: Проверьте статус контейнеров

docker-compose ps

Все сервисы должны быть в состоянии "Up" и "healthy".

Шаг 6: Просмотрите логи (опционально)

# Все логи
docker-compose logs -f

# Логи конкретного сервиса
docker-compose logs -f tenant-api
docker-compose logs -f mongodb
docker-compose logs -f rabbitmq

Нажмите Ctrl+C для выхода из просмотра логов.

Шаг 7: Заполните БД тестовыми данными (опционально)

Если нужно заполнить базу данных тестовыми данными:

docker exec -it chat3-tenant-api npm run seed

Шаг 8: Сгенерируйте API ключ

Важно: API ключ необходим для работы с API и тестовыми интерфейсами.

Выполните одну из команд:

# Генерация обычного API ключа (полные права)
docker exec -it chat3-tenant-api npm run generate-key

# Или генерация демо ключа (требует выполнения seed сначала)
docker exec -it chat3-tenant-api npm run generate-demo-key

Команда выведет сгенерированный API ключ (начинается с chat3_). Скопируйте его - он понадобится для работы с API.

Пример вывода:

✅ API Key generated successfully!

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📝 Name:        Default API Key
📄 Description: (none)
🔑 API Key:     chat3_a5aab286afb089b16d185e425fc5bd9105b610b7e377b8e20f54d4e89bc99c76
🔐 Permissions: read, write, delete
✓  Active:      true
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Шаг 9: Проверьте работу приложения

Откройте в браузере:

Использование API ключа в тестовых интерфейсах:

  1. Откройте любой тестовый интерфейс (например, http://localhost:3003/api-test-users.html)
  2. В поле "API Key" вставьте сгенерированный ключ (начинается с chat3_)
  3. Теперь вы можете выполнять API запросы через интерфейс

Использование API ключа в Swagger UI:

  1. Откройте http://localhost:3000/api-docs или http://localhost:3002/api-docs
  2. Нажмите кнопку "Authorize" (🔓) в правом верхнем углу
  3. Вставьте ваш API ключ в поле X-API-Key
  4. Нажмите "Authorize" и "Close"
  5. Теперь вы можете тестировать API endpoints через Swagger UI

Полезные команды

Управление контейнерами

# Остановить все контейнеры
docker-compose down

# Остановить и удалить контейнеры и volumes
docker-compose down -v

# Перезапустить все контейнеры
docker-compose restart

# Перезапустить конкретный сервис
docker-compose restart tenant-api

# Просмотр логов конкретного сервиса
docker-compose logs -f tenant-api
docker-compose logs -f update-worker
docker-compose logs -f dialog-read-worker

Выполнение команд в контейнерах

# Заполнить БД тестовыми данными
docker exec -it chat3-tenant-api npm run seed

# Сгенерировать API ключ
docker exec -it chat3-tenant-api npm run generate-key

# Сгенерировать демо API ключ (требует выполнения seed сначала)
docker exec -it chat3-tenant-api npm run generate-demo-key

# Выполнить тесты
docker exec -it chat3-tenant-api npm test

Hot Reload для разработки

Для HTML файлов (src/apps/api-test/public): Hot reload уже настроен!

Изменения в HTML файлах применяются автоматически без пересборки Docker образа:

  1. Отредактируйте файл в src/apps/api-test/public/ (например, api-test.html)
  2. Сохраните файл
  3. Обновите страницу в браузере (F5 или Ctrl+R)
  4. Изменения сразу видны!

Для JavaScript кода (src/): Для применения изменений в Node.js коде может потребоваться перезапуск контейнера:

docker-compose restart tenant-api

Обновление проекта

Быстрое обновление (только изменения в коде)

Если вы обновили только код в src/ и не меняли package.json или Dockerfile:

# Просто перезапустите контейнеры
docker-compose restart

Примечание: Только для gateway изменения в src/ применяются автоматически через volume mount. Для других сервисов (tenant-api, update-worker, dialog-read-worker) нужна пересборка.

Полное обновление (крупные изменения)

При крупных обновлениях (изменения в package.json, Dockerfile, или любые изменения зависимостей):

Вариант 1: Пересборка с перезапуском (рекомендуется)

# Пересобрать образы и перезапустить контейнеры одной командой
docker-compose up -d --build

Вариант 2: Пошагово

# 1. Пересобрать образы
docker-compose build

# 2. Перезапустить контейнеры с новыми образами
docker-compose up -d

Вариант 3: Полная пересборка без кэша (если есть проблемы)

# 1. Остановить все контейнеры
docker-compose down

# 2. Пересобрать образы без кэша
docker-compose build --no-cache

# 3. Запустить контейнеры
docker-compose up -d

Обновление после git pull

После получения обновлений из репозитория:

# 1. Получить обновления
git pull

# 2. Пересобрать и перезапустить (если были изменения в зависимостях или Dockerfile)
docker-compose up -d --build

# ИЛИ просто перезапустить (если только изменения в коде)
docker-compose restart

Когда нужна пересборка?

Пересборка НЕ нужна если изменились только:

  • Файлы в src/ (для gateway применяется автоматически)
  • HTML файлы в src/apps/api-test/public/
  • Конфигурационные файлы (кроме Dockerfile)

Пересборка НУЖНА если изменились:

  • package.json (добавлены/изменены зависимости)
  • Dockerfile
  • package-lock.json
  • Любые файлы, которые копируются в образ при сборке

Важные замечания

  1. Порты:

    • 3000 - Tenant API (основной API сервер)
    • 3001 - Admin Web (админ-панель)
    • 3002 - Control API (управляющий API)
    • 3003 - API Test (тестовые интерфейсы)
    • 27017 - MongoDB
    • 5672 - RabbitMQ AMQP
    • 15672 - RabbitMQ Management UI
  2. Учетные данные RabbitMQ:

    • Пользователь: rmuser
    • Пароль: rmpassword
  3. Переменные окружения:

    • Все настройки находятся в файле .env
    • В Docker Compose сервисы обращаются друг к другу по имени сервиса (mongodb, rabbitmq), а не по localhost

Решение проблем

Docker Desktop не запускается

  1. Убедитесь, что Docker Desktop установлен
  2. Перезагрузите компьютер
  3. Проверьте, что виртуализация включена в BIOS

Контейнеры не могут подключиться к MongoDB/RabbitMQ

  1. Проверьте, что все сервисы запущены: docker-compose ps
  2. Убедитесь, что в .env используются правильные имена сервисов:
    • mongodb://mongodb:27017/chat3 (не localhost!)
    • amqp://rmuser:rmpassword@rabbitmq:5672/ (не localhost!)
  3. Проверьте логи контейнеров: docker-compose logs tenant-api

Ошибка "Invalid API key"

Если при работе с API или тестовыми интерфейсами появляется ошибка "Invalid API key":

  1. Убедитесь, что API ключ сгенерирован:

    docker exec -it chat3-tenant-api npm run generate-key
  2. Скопируйте сгенерированный ключ (начинается с chat3_)

  3. Вставьте ключ в тестовый интерфейс:

  4. Для Swagger UI:

  5. Проверьте, что ключ активен:

    # Подключитесь к MongoDB и проверьте ключи
    docker exec -it chat3-mongodb mongosh chat3 --eval "db.apikeys.find().pretty()"

Обновление дефолтного API ключа в тестовых интерфейсах

Проблема: Дефолтный ключ в HTML файлах может не существовать в вашей базе данных, поэтому приходится вводить ключ каждый раз.

Решение: Обновите дефолтный ключ в HTML файлах на ваш актуальный ключ:

  1. Сгенерируйте API ключ (если еще не сделали):

    docker exec -it chat3-tenant-api npm run generate-key
  2. Скопируйте сгенерированный ключ

  3. Обновите дефолтный ключ в HTML файлах:

    Откройте следующие файлы в редакторе и найдите поле с id="apiKey", затем замените значение value="..." на ваш новый ключ:

    • src/apps/api-test/public/api-test-users.html
    • src/apps/api-test/public/api-test-user-dialogs.html
    • src/apps/api-test/public/api-test-dialogs.html
    • src/apps/api-test/public/api-test-messages.html

    Пример замены:

    <!-- Было: -->
    <input type="text" id="apiKey" ... value="chat3_СТАРЫЙ_КЛЮЧ">
    
    <!-- Стало (с вашим ключом): -->
    <input type="text" id="apiKey" ... value="chat3_ВАШ_НОВЫЙ_КЛЮЧ">

Важно: Вам не нужно пересобирать Docker образ для изменений в HTML файлах!

Изменения в HTML файлах применяются автоматически благодаря volume mapping. Просто сохраните файл и обновите страницу в браузере (F5 или Ctrl+R).

После этого ваш API ключ будет автоматически подставляться в тестовые интерфейсы, и вам не нужно будет вводить его каждый раз.

Порт уже занят

Если порт 3000, 3001, 3002, 3003, 27017, 5672 или 15672 уже занят:

  1. Найдите процесс, использующий порт:
    netstat -ano | findstr :3000
  2. Остановите процесс или измените порт в docker-compose.yml

Контейнеры постоянно перезапускаются

Проверьте логи для выявления ошибки:

docker-compose logs gateway
docker-compose logs tenant-api
docker-compose logs update-worker

Частые причины:

  • Неправильные переменные окружения в .env
  • Проблемы с подключением к MongoDB или RabbitMQ
  • Ошибки в коде приложения
  • Проблемы с сетью Docker

Решение:

# Пересоздать контейнеры с нуля
docker-compose down --remove-orphans
docker-compose up -d --build

Проблемы с сетью Docker

Если контейнеры не могут подключиться друг к другу (например, gateway не может подключиться к MongoDB):

# Полная очистка и пересоздание
docker-compose down --remove-orphans
docker network prune -f
docker-compose up -d --build

Остановка всех сервисов

Чтобы полностью остановить все сервисы:

docker-compose down

Чтобы остановить и удалить все данные (volumes):

docker-compose down -v

Внимание: Это удалит все данные из MongoDB и RabbitMQ!

Запуск после остановки

Если вы остановили все сервисы и хотите запустить снова:

docker-compose up -d

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

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

# Проверить статус всех контейнеров
docker-compose ps

# Проверить логи конкретного сервиса
docker-compose logs gateway --tail 50
docker-compose logs tenant-api --tail 50

# Проверить health check
Invoke-WebRequest -Uri http://localhost:3001/health
Invoke-WebRequest -Uri http://localhost:3000/health