Traefik — Docker + ACME DNS (Route53) Let’s Encrypt Wildcard

Требование:

В моем примере будет использоваться доменное имя "artem.services", на основе его будут создаваться субдоменны.

Создадим запись Type A субдоммену "traefik.artem.services" и направим его на нашу ноду.

Пример ниже будет приведен на Docker-Compose, это не является необходимым, просто для удобства. Если Compose не установлен, установим его:

DEB системы:

apt install -y docker-compose

RPM системы:

yum install -y docker-compose

Посмотрим список сетей Docker'а:

docker network ls

Создадим сеть для Traefik'а:

docker network create proxy

Убедимся, что сеть создалась:

docker network ls

 

Дальше нам нужно будет сгенерировать пароль для дашборда Traefik'а, для этого нам понадобится пакет "htpasswd":

DEB системы:

apt install -y apache2-utils

RPM системы:

yum install -y httpd-tools

Для примера генерируем для пользователя "admin", пароль "admin":

htpasswd -nb admin admin
admin:$apr1$1d8fOToA$1XJ/7tNFiZdg0MJrD7GQM/

Результат команды сохраним себе, он нам понадобится.

 

Создадим директорию для Traefik контейнера:

mkdir -p traefik/
cd traefik/

Создадим файл "trafiek.toml" со следующим содержимым:

cat > traefik.toml << EOF
#Traefik Global Configuration
debug = false
checkNewVersion = true
logLevel = "ERROR"
 
#Define the EntryPoint for HTTP and HTTPS
defaultEntryPoints = ["https","http"]
 
#Enable Traefik Dashboard on port 8080
#with basic authentication method
#login and password
[web]
address = ":8080"
[web.auth.basic]
users = ["admin:$apr1$1d8fOToA$1XJ/7tNFiZdg0MJrD7GQM/"]
 
#Define the HTTP port 80 and
#HTTPS port 443 EntryPoint
#Enable automatically redirect HTTP to HTTPS
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
 
#Enable retry sending a request if the network error
[retry]
 
#Define Docker Backend Configuration
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "traefik.artem.services"
watch = true
exposedbydefault = false

[acme] # Automatically add Let's Encrypt Certificate.
email = "[email protected]"
storage= "acme.json" # Change to fully qualified and exposed path for docker
entryPoint = "https"
OnHostRule = false
acmelogging = true

caServer = "https://acme-v02.api.letsencrypt.org/directory"

[acme.dnsChallenge]
  provider = "route53"
  delayBeforeCheck = 0

[[acme.domains]]
  main = "*.traefik.artem.services"
  sans = ["traefik.artem.services"]
EOF

Не забываем пометь пользователя/пароль, на том, который сгенерировали. А так же доменное имя и почтовый ящик.

Создаем "docker-compose.yml":

cat > docker-compose.yml << EOF
version: '3'

services:
  traefik:
    image: traefik:latest
    environment:
      AWS_ACCESS_KEY_ID: "YOUR_KEY_ID"
      AWS_SECRET_ACCESS_KEY: "YOUR_SECRET_KEY"
      AWS_REGION: "us-east-1"
      AWS_HOSTED_ZONE_ID: "ID_YOUR_DOMAIN_ZONE"
    command: --docker --docker.domain=traefik.artem.service
    ports:
      - 80:80
      - 443:443
    networks:
      - proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/traefik.toml
      - ./acme.json:/acme.json
    labels:
      - "traefik.frontend.rule=Host:traefik.artem.service"
      - "traefik.port=8080"
    container_name: traefik
    restart: always

networks:
  proxy:
    external: true
EOF

Создадим файл для Let’s Encrypt'а:

touch acme.json
chmod 600 acme.json

Создаем контейнер:

docker-compose up -d

Проверяем статус контейнера:

docker-compose ps

(!) Команды выше выполняются в директории, где находится файл "docker-compose.yml"

Откроем браузер и перейдем по ссылке

traefik.artem.services

Вас перенаправит с 80-го порта, на 443-ий. Если сделали все правильно, то на этот домен уже будет валидный SSL сертификат.

(!) DNS валидация может занять 2-3 минуты.

Введя логин/пароль который генерировали, попадем в дашборд Traefik'а.

Для проверки работы Traefik'а поднимем еще один контейнер.

Создадим поддомен "wordpress.artem.services" и направим его на наш Traefik.

Создадим директорию для Docker-Compose файла:

mkdir wordpress
cd wordpress

Создадим файл Docker-Compose:

cat > docker-compose.yml << EOF
version: '3'

services:
  wordpress:
    image: wordpress:latest
    environment:
      WORDPRESS_DB_HOST: "mysql"
      WORDPRESS_DB_USER: "wordpress"
      WORDPRESS_DB_PASSWORD: "wordpress"
      WORDPRESS_DB_NAME: "wordpress"
    labels:
      - traefik.backend=wordpress
      - traefik.frontend.rule=Host:wordpress.artem.services
      - traefik.docker.network=proxy
      - traefik.port=80
    restart: always
    networks:
      - proxy
    depends_on:
      - mysql

  mysql:
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    restart: always
    networks:
      - proxy
    labels:
      - traefik.enable=false

networks:
  proxy:
    external: true
EOF

Создадим контейнер:

docker-compose up -d

Откроем в браузере ссылку:

wordpress.artem.serves

Должен открыться сайт уже с подписанным SSL сертификатом.

Метки: Метки

Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии