Динамическая регистрация сервисов
Назначение сервиса
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