Add docker-compose for running all components together

control-api was the only component deployable via a bare Dockerfile alone
(no entrypoint/template, no default mountable config), and there was no
compose file wiring the four services' network, healthcheck ordering, or
DB volume together. Adds a base docker-compose.yml plus dev (override,
auto-loaded) and prod overlays, split by Compose profiles matching the
real deployment topology (control-plane/dashboard/prober/validator), a
ready-to-copy mock config for control-api so `docker compose up` works
out of the box, and the repo's first .gitignore for the local env/config
copies developers create from the committed examples.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NeVbMVEiE7XQAkBd7HQgj6
This commit is contained in:
ayurishchevandClaude Sonnet 5 committed 2026-09-13 15:11:30 +03:00
1 parent 200760f390
commit cf5c7fa0e8
9 files changed
+354

No files matched your search

+53
View File
@@ -26,6 +26,7 @@ HTTP API control-api.
| [docs/DASHBOARD.md](docs/DASHBOARD.md) | Браузерная админ-панель (`admin-dashboard`) — то же самое API, но графически |
| [docs/DIAGRAMS.md](docs/DIAGRAMS.md) | Диаграммы потоков данных: control plane, поток проверки до целевого сервера, поток телеметрии |
| [docs/LOCAL_E2E.md](docs/LOCAL_E2E.md) | Полностью офлайн-прогон всей системы одним скриптом — без реального облака и интернета |
| [deploy/docker/RUN.txt](deploy/docker/RUN.txt) | Сборка и запуск каждого компонента в Docker: команды `docker build`/`docker run`, переменные окружения |
## Быстрый старт (60 секунд, без OpenStack)
@@ -55,3 +56,55 @@ scripts/run-local-e2e.sh
```bash
curl -s http://<control-api>:8080/api/v1/admin/status | python3 -m json.tool
```
## Развёртывание в Docker
Все четыре компонента можно собрать и запустить как отдельные Docker-образы
вместо systemd-юнитов — Dockerfile'ы лежат в `deploy/docker/<компонент>/`,
полные команды сборки/запуска и список переменных окружения — в
[deploy/docker/RUN.txt](deploy/docker/RUN.txt).
- `prober`, `validator-agent`, `admin-dashboard` — конфиг генерируется
внутри контейнера из переменных окружения (`docker-entrypoint.sh` +
`envsubst`), готовых образов для монтирования не требуется.
- `control-api` — конфиг содержит списки (validators/sites/targets/
ip_addresses) и имена env-переменных для OpenStack-креденшлов, поэтому
монтируется файлом (`-v .../control-api.yaml:/etc/cloud-ip-validator/control-api.yaml:ro`),
а база данных — отдельным volume для персистентности.
Пример для `prober`:
```bash
docker build --platform linux/amd64 -t cloud-ip-validator-prober -f deploy/docker/prober/Dockerfile .
docker run -d --platform linux/amd64 --cap-add NET_RAW --name prober \
-e PROBER_SITE_ID=<site_id> \
-e PROBER_CONTROL_API_URL=<http://control-api-host:port> \
cloud-ip-validator-prober
```
`site_id` должен быть заранее зарегистрирован на control-api
(`PUT /api/v1/admin/config/sites/{index}`) — иначе контейнер завершится с
ошибкой регистрации. Аналогичные команды для остальных трёх компонентов —
в [deploy/docker/RUN.txt](deploy/docker/RUN.txt).
### Запуск всех компонентов через docker-compose
Для совместного запуска (сеть, healthcheck, volume для базы данных) есть
`docker-compose.yml` в `deploy/docker/` — разбит на базовый файл и
окружения: `docker-compose.override.yml` (dev, подхватывается автоматически)
и `docker-compose.prod.yml` (прод). Набор запускаемых сервисов на каждом
хосте задаётся через `COMPOSE_PROFILES` в `.env`-файле (`control-plane`,
`dashboard`, `prober`, `validator`) — так один и тот же compose можно
поднять целиком локально или по частям на разных хостах (управляющая
машина / внешняя площадка с `prober` / ВМ-валидатор), как в реальной
топологии.
```bash
cd deploy/docker
cp .env.example .env
cp control-api/control-api.docker.example.yaml control-api/control-api.docker.yaml
docker compose up -d --build
```
Для прода: `docker compose -f docker-compose.yml -f docker-compose.prod.yml --env-file .env.prod up -d --build`
(см. комментарии в `.env.prod.example`).