Deployment Развёртывание Локальный стек (Ray + MLflow + MinIO + MySQL + scheduler) Корневой ../docker-compose.yml поднимает весь стек одной командой, без обращения к какому-либо Docker registry — все свои образы ( head , worker , scheduler , mlflow-server ) собираются локально через build: : docker compose up -d --build --remove-orphans Сервисы: Сервис Контейнер Порты Назначение head ray-head REDISPORT , DASHBOARDPORT , DASHBOARDPORT1 , HEADNODEPORT , METRICSPORT голова Ray-кластера worker — (replicas= NUM_WORKERS ) — воркеры Ray-кластера scheduler mlumina-scheduler 8264 см. scheduler.md minio mlflow-s3 9000 , 9001 S3-совместимое хранилище артефактов MLflow mc mc — одноразовый бутстрап бакета mlflow в MinIO db mlflow-db 3306 MySQL — backend store MLflow server mlflow-server 5001 MLflow tracking server (собирается из ./mlflow ) head / worker / scheduler собираются из корневого ../Dockerfile (база rayproject/ray:latest-py312-cpu , pip install -e . ) с локальным тегом mlumina:latest . server собирается из ../mlflow/Dockerfile (просто python:3.12-slim-bookworm + mlflow/requirements.txt ). Все сервисы сидят в одной внешней сети nginx_network ( external: true ) — предполагается, что она уже создана на хосте (например, реверс-прокси на проде). Переменные окружения читаются из .env (шаблон — .env.sample ): порты Ray, число и размер воркеров, логины/пароли MinIO/MySQL, URI MLflow/S3. docker-compose-local.yml — без внешней сети Тот же самый стек, но использует свою внутреннюю сеть mlumina-network (bridge, подсеть 172.63.0.0/16 ), которая создаётся автоматически — не нужно заранее создавать nginx_network . Предназначен для запуска на машине разработчика, где нет и не должно быть внешнего reverse-proxy стека: docker compose -f docker-compose-local.yml up -d --build --remove-orphans Оба файла эквивалентны по составу сервисов и версиям образов; различие только в сетевой конфигурации. MinIO-образы ( minio/minio , minio/mc ) берутся не с Docker Hub (проект MinIO прекратил публикацию туда), а с quay.io/minio/minio и quay.io/minio/mc , закреплены по digest. CI/CD ( .gitlab-ci.yml ) Пайплайн деплоит на два раннера — gitlab-runner-shell-hpc24 и gitlab-runner-shell-ladaai (блок ladaai в файле сейчас может быть частично закомментирован — см. текущее состояние .gitlab-ci.yml ). Сборка и запуск идут полностью локально на раннере, без внешнего Docker registry: Стадия stop_service* — docker compose down в $PATH_COMPOSE/${CI_PROJECT_NAME} . Стадия deploy* — копирует весь checkout проекта ( rsync , кроме .git ) в $PATH_COMPOSE/${CI_PROJECT_NAME} (нужен полный build-контекст: Dockerfile , mlflow/ , src/ и т.д.), кладёт .env из .env.sample , затем docker compose build && docker compose up -d --force-recreate . deploy/ — отдельный GPU/CPU-стек с мониторингом deploy/compose.yaml + deploy/compose.common.yaml + deploy/compose.cpu.yaml / compose.gpu.yaml — самостоятельный вариант деплоя Ray-кластера, не связанный с корневым docker-compose.yml : свой ../deploy/Dockerfile (multi-stage: uv build пакета mlumina → образ на базе rayproject/ray ), переключается между CPU/GPU через RUNTIME / MLUMINA_RUNTIME ; head/worker запускаются через deploy/scripts/start-head.sh / start-worker.sh , а не напрямую командой ray start ; включает Prometheus + Grafana с готовыми дашбордами ( deploy/prometheus/ , deploy/grafana/provisioning/ ); конфигурируется через deploy/.env.sample ( MLUMINA_RUNTIME , MLUMINA_NUM_WORKERS , MLUMINA_WORKER_CPUS/GPUS/MEMORY , MLUMINA_HEAD_CPUS/MEMORY , MLUMINA_SHM_SIZE ); запуск и назначение описаны в deploy/README.md . Ни в CI, ни в корневом docker-compose.yml этот стек не задействован — используется отдельно, вручную, там, где нужен GPU-профиль и/или мониторинг.