Развёртывание¶
Общая схема¶
Все компоненты проекта запускаются через 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).