Docker Гайд: Установка Traefik – современный обратный прокси для микросервисов |

Docker Гайд: Установка Traefik – современный обратный прокси для микросервисов

Мануал

Traefik описание

Traefik – это современный обратный прокси HTTP и балансировка нагрузки для микросервисов

Traefik упрощает развертывание всех микросервисов, интегрируется с существующими инфраструктурными компонентами, такими как Docker, Swarm Mode, Kubernetes, Amazon ECS, Rancher, Etcd, Consul и т. д.

Traefik служит в качестве маршрутизатора для всех ваших приложений микросервисов, маршрутизации всех клиентских запросов для исправления адресатов микросервисов.

В этом уроке я покажу вам шаг за шагом, как установить и настроить современный обратный прокси Traefik как контейнер Docker на Ubuntu 18.04 LTS (Bionic Beaver).

Предпосылки

  • Ubuntu 18.04
  • Root привилегии

Что мы будем делать?

  • Установите Docker на Ubuntu 18.04
  • Установка Docker Compose
  • Создание пользовательской сети Docker
  • Установка и настройка Traefik
  • Тестирование

Шаг 1 – Установите Docker на Ubuntu 18.04

В этом руководстве мы будем использовать последнюю версию Docker, которая может быть установлена из официального репозитория.

Добавьте ключ и репозиторий, используя команду ниже.

# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable" 

Команда «add-apt-repository» автоматически обновит все репозитории.

Теперь установите последнюю версию docker-ce.

# sudo apt install docker-ce 

По завершении установки запустите службу Docker и включите ее каждый раз при загрузке системы.

# systemctl start docker
# systemctl enable docker

Чтобы посмотреть версию введите:

docker version

Дополнительно: Запуск Docker для пользователя без полномочий root

Контейнер Docker может запускаться под пользователем без полномочий root.

Нам просто нужно добавить пользователя в группу Docker

Добавьте пользователя ‘mohammad’.

useradd -m -s /bin/bash mohammad

Теперь добавьте пользователя «mohammad» в группу Docker, затем перезапустите службу.

usermod -a -G docker mohammad
systemctl restart docker

Протестируйте, запустив hello-world docker.

# docker run -it hello-world 

И вот результат.

Шаг 2 – Установите Docker Compose

Docker-Compose – это инструмент командной строки для определения и управления многоконтейнерными приложениями.

Docker Compose – это скрипт python, его можно легко установить с помощью команды python pip или с помощью команды apt из репозитория Ubuntu.

С compose мы можем запускать несколько контейнеров Docker с помощью одной команды.

Установите docker из репозитория, используя команду apt ниже.

 # sudo apt install docker-compose 

По завершении установки проверьте версию

# docker-compose version 

Шаг 3 – Создание пользовательской сети Docker

В этом учебнике контейнер traefik будет работать в настраиваемой сети Docker.

Поэтому нам нужно создать новую настраиваемую сеть Docker на сервере.

Проверьте доступную сеть Docker в системе.

# docker network ls 

Теперь создайте новую настраиваемую сеть с именем «proxy» для контейнера traefik.

# docker network create proxy

И вы получите случайную строку имени сетевого контейнера. Проверьте снова доступную сеть.

# docker network ls

Результат ниже.

Создана настраиваемая Docker сеть с именем «proxy» для traefik.

Шаг 4 – Установка и настройка обратного прокси-сервера Traefik

На этом этапе мы создадим контейнер traefik с включенным HTTPS letsencrypt (с использованием имени домена ‘traefik.hakase-labs.io) и автоматически перенаправляем HTTP на HTTPS на traefik.

Предварительная установка Traefik

Перед созданием всей конфигурации traefik нам нужно установить «apache2-utils» для генерации зашифрованного пароля htpasswd и создания нового каталога traefik.

Установите ‘apache2-utils’, используя команду apt ниже.

# sudo apt install apache2-utils -y

Теперь запустите команду htpasswd ниже, чтобы сгенерировать новый пароль для проверки подлинности панели инструментов traefik.

# htpasswd -nb mohammad password

Сохраните результат в заметки.

mohammad:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi.

Затем войдите в систему с пользователем «mohammad».

su mohammad

Создайте новый каталог с именем ‘traefik’ для всех конфигураций traefik.

mkdir -p traefik/
cd traefik/

Создание конфигурации Traefik

Перейдите в каталог «traefik» и создайте новый файл конфигурации «traefik.toml» с помощью редактора vim.

# cd traefik/
# vim traefik.toml

Вставьте конфигурацию ниже.

#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
#mohammad and password
[web]
address = ":8080"
[web.auth.basic]
users = ["mohammad:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi."]

#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.hakase-labs.io"
watch = true
exposedbydefault = false

#Letsencrypt Registration
#Define the Letsencrypt ACME HTTP challenge
[acme]
email = "hakaselabs@gmail.com"
storage = "acme.json"
entryPoint = "https"
OnHostRule = true
[acme.httpChallenge]
entryPoint = "http"

Заметка:Вся информация о конфигурации приведена в разделе комментариев «# …».

Создайте скрипт для Traefik Docker Compose

Теперь создайте ducker-compose yml script.

# vim docker-compose.yml

Вставьте конфигурацию ниже.

version: "3.5"
services:
  react-ui:
    container_name: react_native
    build:
      context: ./reactUi
    ports:
     - '3001:3000'
    volumes:
     - './reactUi:/app'
     - '/app/node_modules'
    environment:
      - NODE_ENV=development
    networks:
        vegofy_default:
  resource_sever:
     container_name: resource_sever
     build:
       context: ./main_api
     ports:
       - 5000:5050
     volumes:
       - './main_api:/home/app'
     working_dir: /home/app
     environment:
       - DEBUG=Auth
       - PRODPRES_DB=${PRODPRES_DB}
       - PRODPRES_DB_USER=${PRODPRES_DB_USER}
       - PRODPRES_DB_USER_PASS=${PRODPRES_DB_USER_PASS}
       - PRODPRES_DB_ROOT_PASS=${PRODPRES_DB_ROOT_PASS}
     command: sh -c "npm install && nodemon ."
     networks:
          vegofy_default:
     resource_sever_couchdb:
         container_name: resource_sever_couchdb
         image: couchdb
         ports:
             - "6000:5984"
         volumes:
             - resource_sever_data:/opt/couchdb/data
             - resource_sever_lib:/var/lib/couchdb
         environment:
             - COUCHDB_USER=${PRODPRES_DB_USER}
             - COUCHDB_PASSWORD=${PRODPRES_DB_USER_PASS}
         networks:
             vegofy_default:
volumes:
    prodres_data:
    prodres_lib:
networks:
    vegofy_default:
        name: vegofy_default
  • Мы создаем новый контейнер с именем «traefik», основанный на образе  «traecik: latest» docker.
  • Контейнер ‘traefik’ будет запущен в пользовательской сети докеров с именем «proxy» и выведет внешние порты HTTP 80 и HTTPS 443.
  • Контейнер будет монтировать конфигурацию traefik ‘traefik.toml’ и ‘acme.json’, включая файл сокета Docker
  • Конфигурация метки для traefik, имя домена frontend и порт traefik.

Конфигурация ACME Letsencrypt

Конфигурация acme на ‘traefik.toml’ используется для автоматического создания SSL-разрешительного шифрования.

Создайте новый файл JSON «acme.json» и измените разрешение на «600»

touch acme.json
chmod 600 acme.json

Собираем контейнер Traefik

Теперь мы готовы построить наш собственный контейнер traefik, используя вышеуказанные файлы конфигурации.

# cd traefik/
# ls -lah 

Все файлы конфигурации «traefik.toml», «docker-compose.yml» и «acme.json».

Создайте контейнер, используя команду docker compose

docker-compose up -d

Когда все будет готово, проверьте запущенный контейнер.

docker-compose ps

Шаг 5 – Тестирование

Откройте веб-браузер и введите имя домена traefik в адресной строке. Мой:

http://traefik.hakase-labs.io/

Вы будете перенаправлены на HTTPS-соединение, и вас попросят ввести имя пользователя и пароль.

Войдите в систему с помощью пользователя «mohammad», а пароль – «password».

И вы получите панель инструментов Traefik, как показано ниже.

Страница статуса Traefik.

Traefik прокси установлен в качестве контейнера Docker на Ubuntu 18.04.

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий для cryptoparty Отменить ответ

  1. Arteom

    C Таким форматом docker-compose.yml, ничего не будет.
    контейнер не запустится.

    Ответить
    1. cryptoparty автор

      Спасибо, поправил 🙂

      Ответить
      1. Алекс

        И сейчас тоже не запустится.
        yaml.scanner.ScannerError: mapping values are not allowed here 32 линия

        Ответить
        1. cryptoparty автор

          Показана же строка.
          перед networks лишний пробел.
          Поправил в статье

          Ответить
  2. Алексей

    WARNING: The PRODPRES_DB variable is not set. Defaulting to a blank string.
    WARNING: The PRODPRES_DB_USER variable is not set. Defaulting to a blank string.
    WARNING: The PRODPRES_DB_USER_PASS variable is not set. Defaulting to a blank string.
    WARNING: The PRODPRES_DB_ROOT_PASS variable is not set. Defaulting to a blank string.
    ERROR: The Compose file ‘./docker-compose.yml’ is invalid because:
    Unsupported config option for services.resource_sever: ‘resource_sever_couchdb’
    И как это исправить?

    Ответить
    1. cryptoparty автор

      попробуйте линтер для композа + $переменная должен быть определен в вашем окружении или в файле .env.

      Ответить