feat: traefik-selectel-dns — A-записи Selectel по роутам Traefik + CI сборка образа
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
# Пример: 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
|
||||
Reference in New Issue
Block a user