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:
1 parent
93c79b63ea
commit
399c64e801
3 files changed
+110
No files matched your search
@@ -5,3 +5,4 @@
|
|||||||
!/deploy/docker/.env.example
|
!/deploy/docker/.env.example
|
||||||
!/deploy/docker/.env.prod.example
|
!/deploy/docker/.env.prod.example
|
||||||
/deploy/docker/control-api/control-api.docker.yaml
|
/deploy/docker/control-api/control-api.docker.yaml
|
||||||
|
/rxprod-compose/.env
|
||||||
@@ -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=
|
||||||
@@ -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
|
||||||
Reference in new issue
Block a user