diff --git a/.gitignore b/.gitignore index 7a82501..01db444 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ !/deploy/docker/.env.example !/deploy/docker/.env.prod.example /deploy/docker/control-api/control-api.docker.yaml +/rxprod-compose/.env diff --git a/rxprod-compose/.env.example b/rxprod-compose/.env.example new file mode 100644 index 0000000..a089057 --- /dev/null +++ b/rxprod-compose/.env.example @@ -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= diff --git a/rxprod-compose/docker-compose.yml b/rxprod-compose/docker-compose.yml new file mode 100644 index 0000000..b59b1e0 --- /dev/null +++ b/rxprod-compose/docker-compose.yml @@ -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