- Windows 10/11
- Docker Desktop установлен и запущен
- PowerShell или командная строка
- Найдите "Docker Desktop" в меню Пуск
- Запустите приложение
- Дождитесь полного запуска (иконка в трее должна перестать мигать)
- Проверьте, что Docker работает:
Должна отобразиться пустая таблица или список контейнеров (без ошибок)
docker ps
Скопируйте файл .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.
Перейдите в папку проекта и выполните:
docker-compose buildЭто может занять несколько минут при первом запуске, так как будут скачаны базовые образы и установлены зависимости.
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
docker-compose psВсе сервисы должны быть в состоянии "Up" и "healthy".
# Все логи
docker-compose logs -f
# Логи конкретного сервиса
docker-compose logs -f tenant-api
docker-compose logs -f mongodb
docker-compose logs -f rabbitmqНажмите Ctrl+C для выхода из просмотра логов.
Если нужно заполнить базу данных тестовыми данными:
docker exec -it chat3-tenant-api npm run seedВажно: 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
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Откройте в браузере:
- 🧪 API Test Suite: http://localhost:3003
- 📊 Админ-панель: http://localhost:3001/admin
- 📚 Tenant API Docs: http://localhost:3000/api-docs
- 📚 Control API Docs: http://localhost:3002/api-docs
- 💚 Tenant API Health: http://localhost:3000/health
- 💚 Control API Health: http://localhost:3002/health
- 🐰 RabbitMQ Management: http://localhost:15672
- Логин:
rmuser - Пароль:
rmpassword
- Логин:
Использование API ключа в тестовых интерфейсах:
- Откройте любой тестовый интерфейс (например, http://localhost:3003/api-test-users.html)
- В поле "API Key" вставьте сгенерированный ключ (начинается с
chat3_) - Теперь вы можете выполнять API запросы через интерфейс
Использование API ключа в Swagger UI:
- Откройте http://localhost:3000/api-docs или http://localhost:3002/api-docs
- Нажмите кнопку "Authorize" (🔓) в правом верхнем углу
- Вставьте ваш API ключ в поле
X-API-Key - Нажмите "Authorize" и "Close"
- Теперь вы можете тестировать 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Для HTML файлов (src/apps/api-test/public): Hot reload уже настроен!
Изменения в HTML файлах применяются автоматически без пересборки Docker образа:
- Отредактируйте файл в
src/apps/api-test/public/(например,api-test.html) - Сохраните файл
- Обновите страницу в браузере (F5 или Ctrl+R)
- Изменения сразу видны!
Для 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После получения обновлений из репозитория:
# 1. Получить обновления
git pull
# 2. Пересобрать и перезапустить (если были изменения в зависимостях или Dockerfile)
docker-compose up -d --build
# ИЛИ просто перезапустить (если только изменения в коде)
docker-compose restartПересборка НЕ нужна если изменились только:
- Файлы в
src/(для gateway применяется автоматически) - HTML файлы в
src/apps/api-test/public/ - Конфигурационные файлы (кроме Dockerfile)
Пересборка НУЖНА если изменились:
package.json(добавлены/изменены зависимости)Dockerfilepackage-lock.json- Любые файлы, которые копируются в образ при сборке
-
Порты:
- 3000 - Tenant API (основной API сервер)
- 3001 - Admin Web (админ-панель)
- 3002 - Control API (управляющий API)
- 3003 - API Test (тестовые интерфейсы)
- 27017 - MongoDB
- 5672 - RabbitMQ AMQP
- 15672 - RabbitMQ Management UI
-
Учетные данные RabbitMQ:
- Пользователь:
rmuser - Пароль:
rmpassword
- Пользователь:
-
Переменные окружения:
- Все настройки находятся в файле
.env - В Docker Compose сервисы обращаются друг к другу по имени сервиса (mongodb, rabbitmq), а не по localhost
- Все настройки находятся в файле
- Убедитесь, что Docker Desktop установлен
- Перезагрузите компьютер
- Проверьте, что виртуализация включена в BIOS
- Проверьте, что все сервисы запущены:
docker-compose ps - Убедитесь, что в
.envиспользуются правильные имена сервисов:mongodb://mongodb:27017/chat3(не localhost!)amqp://rmuser:rmpassword@rabbitmq:5672/(не localhost!)
- Проверьте логи контейнеров:
docker-compose logs tenant-api
Если при работе с API или тестовыми интерфейсами появляется ошибка "Invalid API key":
-
Убедитесь, что API ключ сгенерирован:
docker exec -it chat3-tenant-api npm run generate-key
-
Скопируйте сгенерированный ключ (начинается с
chat3_) -
Вставьте ключ в тестовый интерфейс:
- Откройте тестовый интерфейс (например, http://localhost:3003/api-test-users.html)
- В поле "API Key" вставьте ваш ключ
-
Для Swagger UI:
- Откройте http://localhost:3000/api-docs или http://localhost:3002/api-docs
- Нажмите "Authorize" (🔓)
- Вставьте ключ в поле
X-API-Key - Нажмите "Authorize"
-
Проверьте, что ключ активен:
# Подключитесь к MongoDB и проверьте ключи docker exec -it chat3-mongodb mongosh chat3 --eval "db.apikeys.find().pretty()"
Проблема: Дефолтный ключ в HTML файлах может не существовать в вашей базе данных, поэтому приходится вводить ключ каждый раз.
Решение: Обновите дефолтный ключ в HTML файлах на ваш актуальный ключ:
-
Сгенерируйте API ключ (если еще не сделали):
docker exec -it chat3-tenant-api npm run generate-key
-
Скопируйте сгенерированный ключ
-
Обновите дефолтный ключ в HTML файлах:
Откройте следующие файлы в редакторе и найдите поле с
id="apiKey", затем замените значениеvalue="..."на ваш новый ключ:src/apps/api-test/public/api-test-users.htmlsrc/apps/api-test/public/api-test-user-dialogs.htmlsrc/apps/api-test/public/api-test-dialogs.htmlsrc/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 уже занят:
- Найдите процесс, использующий порт:
netstat -ano | findstr :3000
- Остановите процесс или измените порт в
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Если контейнеры не могут подключиться друг к другу (например, 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