Add a simple, single-file docker-compose for the control-plane/dashboard/prober host

The existing deploy/docker/docker-compose.yml (+ override/prod, Compose
profiles) is flexible but requires understanding profiles and file
layering. For a server that only ever runs these three fixed roles
against a real OpenStack (VK Cloud) deployment, rxprod-compose/ adds a
single flat docker-compose.yml with no profiles — control-api,
admin-dashboard and prober wired together directly, both ports published
on the host (control-api needs to be reachable by validator-agent running
separately on real cloud VMs). OpenStack credentials and the prober's
site_id come from a local .env (gitignored; .env.example is the
template).

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-14 23:15:30 +03:00
1 parent 93c79b63ea
commit 399c64e801
3 files changed
+110

No files matched your search

+21
View File
@@ -0,0 +1,21 @@
# Скопировать в .env в этой же папке и заполнить реальными значениями —
# docker compose сам подхватывает .env из директории compose-файла.
#
# cp .env.example .env
# docker compose up -d --build
# OpenStack (VK Cloud) креденшлы — control-api.yaml должен быть в
# openstack.mode: real.
OS_AUTH_URL=
OS_PROJECT_ID=
OS_REGION_NAME=
OS_INTERFACE=
OS_TOKEN=
# Парольная авторизация вместо токена — вместо OS_TOKEN заполнить эти три:
# OS_USERNAME=
# OS_USER_DOMAIN_NAME=
# OS_PASSWORD=
# prober — обязателен, должен совпадать с site_id, уже настроенным в
# реальном control-api.yaml (validators/sites/targets/ip_addresses).
PROBER_SITE_ID=
+88
View File
@@ -0,0 +1,88 @@
# Простой (без profiles/override/prod) docker-compose для сервера с ролями
# control-api + admin-dashboard + prober. Реальный OpenStack (mode: real) —
# validator-agent сюда не входит, он работает отдельно на реальных
# ВМ-валидаторах в облаке и обращается к control-api по адресу этого хоста.
#
# Запуск:
# cp .env.example .env # заполнить реальными OS_*-креденшлами и PROBER_SITE_ID
# # поправить путь к control-api.yaml ниже, если реальный файл лежит не в
# # /etc/cloud-ip-validator/control-api.yaml
# docker compose up -d --build
# curl -s http://localhost:8080/healthz
#
# (из корня репозитория тот же стек можно поднять гибче, с profiles и
# dev/prod-разделением — см. deploy/docker/docker-compose.yml)
name: cloud-ip-validator
networks:
backend:
name: cloud-ip-validator
volumes:
control-api-db:
name: cloud-ip-validator-db
services:
control-api:
build:
context: ..
dockerfile: deploy/docker/control-api/Dockerfile
image: cloud-ip-validator-control-api
platform: linux/amd64
restart: unless-stopped
networks: [backend]
ports:
- "8080:8080"
volumes:
# Поправьте путь слева, если реальный control-api.yaml (mode: real,
# с настоящими validators/sites/targets/ip_addresses) лежит не здесь.
- /etc/cloud-ip-validator/control-api.yaml:/etc/cloud-ip-validator/control-api.yaml:ro
- control-api-db:/var/lib/cloud-ip-validator
environment:
OS_AUTH_URL: "${OS_AUTH_URL}"
OS_PROJECT_ID: "${OS_PROJECT_ID}"
OS_REGION_NAME: "${OS_REGION_NAME}"
OS_INTERFACE: "${OS_INTERFACE:-}"
OS_TOKEN: "${OS_TOKEN:-}"
OS_USERNAME: "${OS_USERNAME:-}"
OS_USER_DOMAIN_NAME: "${OS_USER_DOMAIN_NAME:-}"
OS_PASSWORD: "${OS_PASSWORD:-}"
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://127.0.0.1:8080/healthz"]
interval: 5s
timeout: 3s
retries: 10
start_period: 5s
admin-dashboard:
build:
context: ..
dockerfile: deploy/docker/admin-dashboard/Dockerfile
image: cloud-ip-validator-admin-dashboard
platform: linux/amd64
restart: unless-stopped
networks: [backend]
ports:
- "8090:8090"
environment:
ADMIN_DASHBOARD_CONTROL_API_URL: http://control-api:8080
depends_on:
control-api:
condition: service_healthy
prober:
build:
context: ..
dockerfile: deploy/docker/prober/Dockerfile
image: cloud-ip-validator-prober
platform: linux/amd64
restart: unless-stopped
networks: [backend]
cap_add: [NET_RAW]
environment:
PROBER_SITE_ID: "${PROBER_SITE_ID}"
PROBER_CONTROL_API_URL: http://control-api:8080
depends_on:
control-api:
condition: service_healthy