Files
cloud-ip-validator/deploy/docker/RUN.txt
T
ayurishchevandClaude Sonnet 5 cf5c7fa0e8 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
2026-09-13 15:11:30 +03:00

156 lines
8.1 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Для совместного запуска всех компонентов теперь есть docker-compose:
docker-compose.yml (база) + docker-compose.override.yml (dev, подхватывается
автоматически) + docker-compose.prod.yml (прод). Быстрый старт:
cp .env.example .env
cp control-api/control-api.docker.example.yaml control-api/control-api.docker.yaml
docker compose up -d --build
Подробности — в README.md, раздел "Развёртывание в Docker". Команды ниже
документируют то же самое на уровне отдельного docker build/docker run —
пригодятся для точечной отладки одного компонента без compose.
===============================================================================
Сборка образа (из корня репозитория):
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> \
-e PROBER_POLL_INTERVAL_SECONDS=5 \
-e PROBER_TCP_TIMEOUT_SECONDS=5 \
-e PROBER_ICMP_TIMEOUT_SECONDS=5 \
-e PROBER_ICMP_COUNT=3 \
cloud-ip-validator-prober
Рабочий пример (стенд 62.176.10.113):
docker run -d --platform linux/amd64 --cap-add NET_RAW --name prober \
-e PROBER_SITE_ID=sbas \
-e PROBER_CONTROL_API_URL=http://62.176.10.113:8081 \
cloud-ip-validator-prober
Переменные окружения:
PROBER_SITE_ID обязательная, должна быть зарегистрирована в
control-api (PUT /api/v1/admin/config/sites/{index})
PROBER_CONTROL_API_URL обязательная
PROBER_POLL_INTERVAL_SECONDS опциональная, дефолт 5
PROBER_TCP_TIMEOUT_SECONDS опциональная, дефолт 5
PROBER_ICMP_TIMEOUT_SECONDS опциональная, дефолт 5
PROBER_ICMP_COUNT опциональная, дефолт 3
Примечания:
--platform linux/amd64 бинарник в bin/ собран под Linux x86_64
--cap-add NET_RAW нужен проберу для ICMP-проверок
===============================================================================
Сборка образа admin-dashboard (из корня репозитория):
docker build --platform linux/amd64 -t cloud-ip-validator-admin-dashboard -f deploy/docker/admin-dashboard/Dockerfile .
Запуск контейнера admin-dashboard:
docker run -d --platform linux/amd64 -p 8090:8090 --name admin-dashboard \
-e ADMIN_DASHBOARD_CONTROL_API_URL=<http://control-api-host:port> \
-e ADMIN_DASHBOARD_LISTEN_ADDR=:8090 \
-e ADMIN_DASHBOARD_CONTROL_API_TIMEOUT_SECONDS=10 \
-e ADMIN_DASHBOARD_LAST_COMPLETED_COUNT=20 \
-e ADMIN_DASHBOARD_POLL_INTERVAL_SECONDS=5 \
cloud-ip-validator-admin-dashboard
Рабочий пример (стенд 62.176.10.113):
docker run -d --platform linux/amd64 -p 8090:8090 --name admin-dashboard \
-e ADMIN_DASHBOARD_CONTROL_API_URL=http://62.176.10.113:8081 \
cloud-ip-validator-admin-dashboard
Переменные окружения:
ADMIN_DASHBOARD_CONTROL_API_URL обязательная
ADMIN_DASHBOARD_LISTEN_ADDR опциональная, дефолт :8090
ADMIN_DASHBOARD_CONTROL_API_TIMEOUT_SECONDS опциональная, дефолт 10
ADMIN_DASHBOARD_LAST_COMPLETED_COUNT опциональная, дефолт 20
ADMIN_DASHBOARD_POLL_INTERVAL_SECONDS опциональная, дефолт 5
Примечания:
--platform linux/amd64 бинарник в bin/ собран под Linux x86_64
-p 8090:8090 проброс порта дашборда наружу
===============================================================================
Сборка образа control-api (из корня репозитория):
docker build --platform linux/amd64 -t cloud-ip-validator-control-api -f deploy/docker/control-api/Dockerfile .
У control-api конфиг содержит списки (validators/sites/check_types/targets/
ip_addresses) и имена env-переменных для OpenStack-креденшлов — это не
шаблонизируется через docker run -e, как у остальных компонентов. Конфиг
монтируется файлом (по образцу configs/control-api.example.yaml, который
также лежит в образе как /etc/cloud-ip-validator/control-api.yaml.example),
а сама база данных — volume'ом для персистентности.
Запуск контейнера control-api:
docker run -d --platform linux/amd64 -p 8080:8080 --name control-api \
-v /path/to/control-api.yaml:/etc/cloud-ip-validator/control-api.yaml:ro \
-v cloud-ip-validator-db:/var/lib/cloud-ip-validator \
-e OS_AUTH_URL=<keystone_url> \
-e OS_PROJECT_ID=<project_id> \
-e OS_REGION_NAME=<region> \
-e OS_TOKEN=<token> \
cloud-ip-validator-control-api
(при auth_method: password — вместо OS_TOKEN передать OS_USERNAME,
OS_USER_DOMAIN_NAME, OS_PASSWORD; для openstack.mode: mock креденшлы не
нужны)
Примечания:
--platform linux/amd64 бинарник в bin/ собран под Linux x86_64
-p 8080:8080 проброс порта control-api наружу
-v .../control-api.yaml обязателен: конфиг с validators/sites/targets/ip_addresses
-v cloud-ip-validator-db volume для /var/lib/cloud-ip-validator/control-api.db
===============================================================================
Сборка образа validator-agent (из корня репозитория):
docker build --platform linux/amd64 -t cloud-ip-validator-validator-agent -f deploy/docker/validator-agent/Dockerfile .
Запуск контейнера validator-agent:
docker run -d --platform linux/amd64 --cap-add NET_RAW --name validator-agent \
-e VALIDATOR_AGENT_VALIDATOR_ID=<validator_id> \
-e VALIDATOR_AGENT_CONTROL_API_URL=<http://control-api-host:port> \
-e VALIDATOR_AGENT_POLL_INTERVAL_SECONDS=5 \
-e VALIDATOR_AGENT_SELF_CHECK_TIMEOUT_SECONDS=10 \
-e VALIDATOR_AGENT_HTTPS_TIMEOUT_SECONDS=10 \
-e VALIDATOR_AGENT_ICMP_TIMEOUT_SECONDS=5 \
-e VALIDATOR_AGENT_ICMP_COUNT=3 \
-e VALIDATOR_AGENT_SSH_ENABLED=false \
-e VALIDATOR_AGENT_SSH_TIMEOUT_SECONDS=5 \
cloud-ip-validator-validator-agent
Переменные окружения:
VALIDATOR_AGENT_VALIDATOR_ID обязательная, должен совпадать с
control-api config's validators[].validator_id
VALIDATOR_AGENT_CONTROL_API_URL обязательная
VALIDATOR_AGENT_POLL_INTERVAL_SECONDS опциональная, дефолт 5
VALIDATOR_AGENT_SELF_CHECK_TIMEOUT_SECONDS опциональная, дефолт 10
VALIDATOR_AGENT_HTTPS_TIMEOUT_SECONDS опциональная, дефолт 10
VALIDATOR_AGENT_ICMP_TIMEOUT_SECONDS опциональная, дефолт 5
VALIDATOR_AGENT_ICMP_COUNT опциональная, дефолт 3
VALIDATOR_AGENT_SSH_ENABLED опциональная, дефолт false
VALIDATOR_AGENT_SSH_TIMEOUT_SECONDS опциональная, дефолт 5
Примечания:
--platform linux/amd64 бинарник в bin/ собран под Linux x86_64
--cap-add NET_RAW нужен агенту для ICMP-проверок
ip_echo_urls в шаблон не выведены — при отсутствии в конфиге
агент сам подставляет дефолт (api.ipify.org,
ifconfig.me/ip); свой список задавайте через
смонтированный конфиг вместо шаблона при необходимости