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

Развёртывание

Общая схема

Все компоненты проекта запускаются через Docker Compose на одном сервере. Файл docker-compose.yml в корне репозитория описывает полный набор сервисов, их зависимости, ограничения ресурсов и порядок запуска.

Адрес боевого сервера: 194.87.248.99 (псевдоним alfa в конфигурации SSH). Каталог проекта на сервере: /opt/alfa.

Состав сервисов

Сервис Контейнер Образ Порт Назначение
redis sdm_redis redis:7-alpine --- Очередь задач Celery и хранилище результатов
mongodb sdm_mongodb mongo:7 --- База данных документов, реестров, групп, настроек
minio sdm_minio minio/minio:latest 9000 (служебный), 9001 (консоль) Файловое хранилище для PDF и изображений страниц
backend sdm_backend собирается из ./backend 8000 Серверная часть (FastAPI)
celery-worker sdm_celery_worker собирается из ./backend --- Фоновый обработчик задач поиска по реестрам
frontend sdm_frontend собирается из ./frontend 8501 Устаревший пользовательский интерфейс (Streamlit)
frontend-react sdm_frontend_react собирается из ./frontend-react 3000 Основной пользовательский интерфейс (React)
docs sdm_docs собирается из ./docs/site 8088 (только localhost) Сайт документации (MkDocs)

Порты Redis и MongoDB открыты только внутри сети Docker --- снаружи они недоступны. MinIO слушает на 127.0.0.1, доступ извне идёт через обратный прокси nginx.

Зависимости между сервисами

Серверная часть (backend) запускается только после того, как MongoDB, MinIO и Redis пройдут проверку здоровья (healthcheck). Обработчик Celery ждёт MongoDB и Redis. Пользовательский интерфейс ждёт серверную часть.

Порядок запуска обеспечивается директивами depends_on с условием service_healthy.

Ограничения ресурсов

Для каждого сервиса заданы ограничения памяти:

Сервис Ограничение памяти Резерв памяти Ограничение процессора
Redis 512 МБ --- ---
MongoDB 4 ГБ --- ---
MinIO 1 ГБ --- ---
backend 8 ГБ 3 ГБ 7 ядер
celery-worker 6 ГБ --- 2 ядра
frontend (Streamlit) 2 ГБ 512 МБ ---

MongoDB запускается с параметром --wiredTigerCacheSizeGB 3, ограничивающим размер кэша подсистемы хранения.

Политика перезапуска

Сервис документации (docs) имеет политику restart: unless-stopped --- он перезапускается автоматически при любом сбое, пока не будет остановлен вручную. Остальные сервисы используют политику Docker Compose по умолчанию (перезапуск не выполняется).

Способы выкладки изменений

Полная пересборка

Подключиться к серверу и выполнить:

ssh alfa "cd /opt/alfa && docker compose up -d --build"

Эта команда пересоберёт все образы и перезапустит контейнеры.

Обновление одного файла

Если изменён единственный файл серверной части, можно передать его через scp и перезапустить только нужный сервис:

scp -F ~/.ssh/config path/to/file alfa:/opt/alfa/path/to/file
ssh alfa "cd /opt/alfa && docker compose restart backend"

Это работает, потому что каталог ./backend примонтирован в контейнер как том.

Пересборка пользовательского интерфейса

Пользовательский интерфейс React собирается при создании образа. Если нужно изменить переменные среды (например, адрес серверной части), образ необходимо пересобрать:

ssh alfa "cd /opt/alfa && VITE_API_URL=https://alfainft-api.monroe-tech.ru docker compose build frontend-react && docker compose up -d frontend-react"

Обновление документации

ssh alfa "cd /opt/alfa && docker compose up -d --build docs"

Проверка состояния после выкладки

После выкладки полезно убедиться, что все контейнеры работают:

ssh alfa "docker ps"

Проверить доступность серверной части:

ssh alfa "curl -s http://localhost:8000/health"

Посмотреть последние строки журнала:

ssh alfa "docker logs sdm_backend --tail 20"

Домены

Домен Назначение
alfainft.monroe-tech.ru Пользовательский интерфейс
alfainft-api.monroe-tech.ru Серверная часть (API)
alfainft-minio.monroe-tech.ru Консоль MinIO
alfainft-docs.monroe-tech.ru Сайт документации

Каждый домен обслуживается отдельной конфигурацией nginx на сервере (см. раздел Веб-прокси nginx).