Files
traefik-selectel/deploy/docker-compose.example.yml
vasyanskandClaude Sonnet 5 273cd54415
Build / Tests (push) Successful in 13s
Build / Build image (push) Failing after 15s
Build / Notify on failure (push) Failing after 0s
feat: traefik-selectel-dns — A-записи Selectel по роутам Traefik + CI сборка образа
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-21 21:50:07 +07:00

98 lines
3.7 KiB
YAML

# Пример: Traefik + traefik-selectel-dns на одной ВМ.
# Перед запуском создайте файлы секретов (права 0400/0440, не в git):
# mkdir -p secrets && umask 077
# printf '%s' 'service-user' > secrets/selectel_username
# printf '%s' 'password' > secrets/selectel_password
# printf '%s' '123456' > secrets/selectel_account_id
# printf '%s' 'project-uuid' > secrets/selectel_project_id
# Пользователь Selectel — сервисный, с минимальной ролью на DNS в нужном проекте.
services:
traefik:
image: traefik:v3 # в проде закрепите конкретную версию/digest
restart: unless-stopped
command: ["--configFile=/etc/traefik/traefik.yml"]
ports: # публикуются ТОЛЬКО 80/443; 8080 (API) не публикуется
- "80:80"
- "443:443"
environment:
# Имена переменных lego (selectelv2); суффикс _FILE — чтение значения из файла
SELECTELV2_USERNAME_FILE: /run/secrets/selectel_username
SELECTELV2_PASSWORD_FILE: /run/secrets/selectel_password
SELECTELV2_ACCOUNT_ID_FILE: /run/secrets/selectel_account_id
SELECTELV2_PROJECT_ID_FILE: /run/secrets/selectel_project_id
secrets:
- selectel_username
- selectel_password
- selectel_account_id
- selectel_project_id
volumes:
- ./traefik.example.yml:/etc/traefik/traefik.yml:ro
- ./dynamic:/etc/traefik/dynamic:ro
- letsencrypt:/letsencrypt
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- proxy # сюда подключаются пользовательские контейнеры
- control # только Traefik <-> демон
docker-proxy:
# Демону нужен только поток событий: даём ему read-only прокси вместо docker.sock.
image: tecnativa/docker-socket-proxy:latest # закрепите версию
restart: unless-stopped
environment:
EVENTS: 1
CONTAINERS: 0
POST: 0
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- control
traefik-selectel-dns:
image: git.realmanual.ru/pub/traefik-selectel:latest # или build: ..
# build:
# context: ..
restart: unless-stopped
depends_on:
- traefik
environment:
SELECTEL_USERNAME_FILE: /run/secrets/selectel_username
SELECTEL_PASSWORD_FILE: /run/secrets/selectel_password
SELECTEL_ACCOUNT_ID_FILE: /run/secrets/selectel_account_id
SELECTEL_PROJECT_ID_FILE: /run/secrets/selectel_project_id
secrets:
- selectel_username
- selectel_password
- selectel_account_id
- selectel_project_id
volumes:
- ./config.example.yaml:/etc/traefik-selectel-dns/config.yaml:ro
read_only: true
cap_drop: [ALL]
security_opt:
- no-new-privileges:true
networks:
- control # доступ к Traefik API и docker-proxy; исходящий интернет — к Selectel
secrets:
selectel_username:
file: ./secrets/selectel_username
selectel_password:
file: ./secrets/selectel_password
selectel_account_id:
file: ./secrets/selectel_account_id
selectel_project_id:
file: ./secrets/selectel_project_id
volumes:
letsencrypt:
networks:
proxy:
name: proxy
control:
name: traefik-control # НЕ подключайте к ней пользовательские контейнеры
ipam:
config:
- subnet: 172.30.250.0/24 # должна совпадать с sourceRange в dynamic/api-internal.yml