98 lines
3.7 KiB
YAML
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
|