Перейти к содержанию

Динамическая регистрация сервисов

Назначение сервиса

Consul обеспечивает регистрацию сервисов, health-checks и распределённое key-value хранилище, которое используется мониторингом для autodiscovery и динамической конфигурации.


Структура каталогов

config/services/consul/deployment/docker/
├─ docker-compose.yaml        # запуск кластера (сервер-нод)
├─ .env_example               # переменные окружения
└─ script/
   └─ generate_consul_server_tokens.sh  # скрипт инициализации ACL

.env параметры

Переменная Описание
CONSUL_HOST Домен UI Consul (используется Traefik)
CONSUL_PORT Внутренний порт HTTP API (8500)
CONSUL_MASTER_TOKEN Bootstrap-ACL token (генерируется один раз)
COMPOSE_PROJECT_NAME Префикс контейнера

Первичный запуск

cd config/services/consul/deployment/docker
cp .env_example .env # заполните значения

docker compose up -d consul-server

После старта контейнера выполните генерацию ACL-токенов:

docker compose exec consul-server bash script/generate_consul_server_tokens.sh

Скрипт создаст политики и токены, запишет их в assets/*.json внутри контейнера. Не забудьте сохранить Management-Token в Password-Manager!


Доступ к UI

URL: https://<CONSUL_HOST> (Traefik proxy). При отсутствии Traefik раскомментируйте секцию ports: в compose-файле.


Добавление клиентских сервисов

Сервис регистрируется через HTTP API либо автоматически Consul-Agent’ом. Пример curl:

curl -X PUT \
  --header "X-Consul-Token: $CONSUL_MASTER_TOKEN" \
  --data '{"ID":"myapp","Name":"myapp","Address":"10.0.0.5","Port":9100}' \
  http://consul-server:8500/v1/agent/service/register

Также сервисы можно удобно регистрировать через Consul-Manager — UI для регистрации сервисов, который предоставляет веб-интерфейс для добавления, обновления и удаления сервисов в Consul без необходимости ручных запросов к API.


Обновление версии

docker compose pull consul-server
docker compose up -d consul-server

Backup данных

Все данные Consul хранятся в volume consul-data. Для бэкапа:

docker run --rm -v consul-data:/data -v $(pwd):/backup alpine \
  tar czf /backup/consul_backup_$(date +%F).tgz -C /data .

Полезные ссылки

  • Docs: https://developer.hashicorp.com/consul
  • API: https://developer.hashicorp.com/consul/api-docs