
Требование:
- Нода с установленным Docker’ом
- Прямой доступ в интернет, или же возможность настроить проброс
- Доменное имя
В моем примере будет использоваться доменное имя "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 #Letsencrypt Registration #Define the Letsencrypt ACME HTTP challenge [acme] email = "[email protected]" storage = "acme.json" entryPoint = "https" OnHostRule = true [acme.httpChallenge] entryPoint = "http" EOF
Не забываем пометь пользователя/пароль, на том, который сгенерировали. А так же доменное имя и почтовый ящик.
Создаем "docker-compose.yml":
cat > docker-compose.yml << EOF
version: '3'
services:
traefik:
image: traefik:latest
command: --docker --docker.domain=traefik.artem.services
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:dash.traefik.artem.services"
- "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 сертификат.
Введя логин/пароль который генерировали, попадем в дашборд 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 сертификатом.