Skip to content

Развёртывание агента

Агент и Xray — один образ astral-agent: бинарник агента запускает Xray дочерним процессом. Нет Docker-сокета, межконтейнерных сигналов и рассинхронизации версий агент/Xray — пара версий фиксируется тегом образа.

# docker-compose.yml на ноде
services:
astral-agent:
image: ghcr.io/astralvpn/astral-agent:${ASTRAL_AGENT_VERSION}
restart: unless-stopped
network_mode: host
environment:
ASTRAL_BACKEND_ADDR: ${ASTRAL_BACKEND_ADDR} # host:port control plane
ASTRAL_ENROLL_TOKEN: ${ASTRAL_ENROLL_TOKEN} # нужен только до первого enrollment
volumes:
- ./data:/var/lib/astral-agent
  • network_mode: host — инбаунды создаются в панели на произвольных портах; перечислить их в ports: заранее нельзя.
  • ./data — identity агента, кэш последнего конфига, буфер трафика (Обзор). После enrollment ASTRAL_ENROLL_TOKEN игнорируется (identity уже на диске) — протухший токен в .env безвреден.
  • Бутстрап-конфигурация — два значения. Сертификаты, ключи и вся конфигурация Xray приходят по стриму, в файлах ноды их настраивать не нужно.

Роль astral-agentdeploy/ansible, репозиторий):

  1. Docker Engine + Compose plugin.
  2. Рендер docker-compose.yml и .env из шаблона.
  3. docker compose pull && docker compose up -d.
  4. Файрвол: наружу открыты только порты инбаундов; входящих management-портов у ноды нет.
inventory/hosts.yml
all:
hosts:
nl-1:
ansible_host: 203.0.113.10
astral_enroll_token: "{{ vault_nl1_enroll_token }}" # ansible-vault
astral_agent_version: "1.4.0"

Роль идемпотентна: конфиги перезаписываются всегда, контейнер пересоздаётся (handler) только при изменении образа или .env.

Правка astral_agent_version в inventory → прогон плейбука; раскатка по группам хостов (canary) — средствами inventory. Откат — та же правка назад. Совместимость версий агента и backend обеспечивается эволюцией proto (gRPC API): порядок обновления компонентов не важен.

При рестарте контейнера агент поднимает Xray из локального кэша до установления стрима — обновление агента не ждёт связности с панелью.