Требование:
- Нода с установленным 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 [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 сертификатом.