Использование Haproxy И Docker На Компьютере Разработчика При Разработке Веб-Сайтов

Написанию этого небольшого руководства предшествовало несколько недель мучений с попытками работы над проектами, когда для работы нужно было запустить контейнер с сайтом, контейнеры с тестовыми сборками, чтобы тестировщики могли спокойно тестировать новые возможности системы для основные данные, а также сборки для технической поддержки для изучения работы с системой в условиях, приближенных к «боевым».



Использование HAProxy и Docker на компьютере разработчика при разработке веб-сайтов

Кроме того, веб-интерфейс сервиса должен был работать у членов моей группы разработчиков.

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

php , часть к другому.

При этом существуют различия в среде, в которой работают сайты, начиная с операционной системы и http-сервера, обрабатывающего запросы, и заканчивая установленными модулями.

php .

Вроде ничего сложного, поднимаем контейнеры и пробрасываем порты наружу.

Но для каждого контейнера нужно указать свои внешние порты, которые нужно запомнить, а затем передать их, например, бухгалтеру (это тоже тестировщик), чтобы он мог проверить улучшения в используемой им системе.

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

После недолгих раздумий было решено все запросы пересылать через НАПРокси на внешнем интерфейсе, доступном через порты 80 И 443 и в зависимости от имени хоста направляет запросы в нужный контейнер.

конфигурация докера Начнем с конфигурации сеть докеров , потому что нам нужен контроль над сетевыми адресами, которые будут выделены контейнерам.

Мы создаем сеть докеров с указанием подсети.

Указание подсети необходимо для отправки запросов от HAProxy на определенные IP-адреса, чтобы не было проблем с разрешением доменных имен, если один из контейнеров не запущен.

  
  
  
  
  
  
  
  
  
  
   
 
 ** SIEGE 4.0.4
 ** Preparing 25 concurrent users for battle.
 The server is now under siege.
 Lifting the server siege.
 Transactions:             258084 hits
 Availability:             100.00 %
 Elapsed time:             59.39 secs
 Data transferred:         2.95 MB
 Response time:            0.01 secs
 Transaction rate:         4345.58 trans/sec
 Throughput:               0.05 MB/sec
 Concurrency:              24.72
 Successful transactions:  258084
 Failed transactions:      0
 Longest transaction:      0.04
 Shortest transaction:     0.00
 
Чтобы запущенные контейнеры работали в нужной нам сети и получали из нее IP-адреса в docker-compose.yml Укажем непосредственно сеть:
 
 ** SIEGE 4.0.4
 ** Preparing 25 concurrent users for battle.
 The server is now under siege.
 Lifting the server siege.
 Transactions:             314572 hits
 Availability:             100.00 %
 Elapsed time:             59.18 secs
 Data transferred:         3.60 MB
 Response time:            0.00 secs
 Transaction rate:         5315.51 trans/sec
 Throughput:               0.06 MB/sec
 Concurrency:              24.64
 Successful transactions:  314572
 Failed transactions:      0
 Longest transaction:      0.11
 Shortest transaction:     0.00
 
и в конфигурации контейнеров, в которые будут перенаправляться запросы из HAProxy , жестко установите IP-адрес.

 
 ** SIEGE 4.0.4
 ** Preparing 25 concurrent users for battle.
 The server is now under siege.
 Lifting the server siege.
 Transactions:             114804 hits
 Availability:             100.00 %
 Elapsed time:             59.44 secs
 Data transferred:         0.66 MB
 Response time:            0.01 secs
 Transaction rate:         1931.43 trans/sec
 Throughput:               0.01 MB/sec
 Concurrency:              24.78
 Successful transactions:  114824
 Failed transactions:      0
 Longest transaction:      1.03
 Shortest transaction:     0.00
 
Сертификат для работы https Для работы HAProxy К https вам необходимо создать самоподписанный сертификат или подключить готовый от удостоверяющего центра.



Создать самозаверяющий сертификат

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

HAProxy .

  1. Создать приватный ключ (ключ)
 
 ** SIEGE 4.0.4
 ** Preparing 25 concurrent users for battle.
 The server is now under siege.
 Lifting the server siege.
 Transactions:             134364 hits
 Availability:             100.00 %
 Elapsed time:             59.80 secs
 Data transferred:         19.99 MB
 Response time:            0.01 secs
 Transaction rate:         2246.89 trans/sec
 Throughput:               0.33 MB/sec
 Concurrency:              24.74
 Successful transactions:  134374
 Failed transactions:      0
 Longest transaction:      0.08
 Shortest transaction:     0.00
 
  1. Создайте запрос на подпись сертификата (csr)


docker network create develop --subnet=172.20.0.0/16

  1. Создайте самозаверяющий сертификат (crt)


networks: default: external: name: develop

  1. Объединение ключа и сертификата (pem)


networks: default: ipv4_address: 172.20.1.1

Путь к полученному файлу сертификата необходимо будет указать в конфигурации.

HAProxy .

Подготовительные действия завершены, далее объединяем все в конфигурациях HAProxy И Докер .

Ниже приведены примеры файлов конфигурации.

haproxy.cfg И docker-compose.yml .

Я не буду подробно останавливаться на каждом элементе конфигурации; они хорошо описаны в документации.

Я сделаю лишь краткие заметки для тех, которыми еще не пользовался.

HAProxy И docker-compose .

Конфигурация HAPRoxy Следующая конфигурация предназначена для HAProxy перенаправляет все запросы из порта 80 на порт 443 , а затем на основе имени запрошенного хоста перенаправляет на один из сайтов, работающих на 80 порт Для сайтов нет необходимости настраивать работу по https .

Запросы, полученные 443 порт будет немедленно перенаправлен на соответствующие сайты.

С точки зрения HAProxy разделы, описанные как внешний интерфейс представляют внешние интерфейсы, через которые поступают запросы.

В настройках внешний интерфейс указаны условия, при их выполнении запрос будет перенаправлен на указанный серверная часть .

Бэкэнд соответственно интерфейсы, куда перенаправляются запросы.

Глава значения по умолчанию задает общие параметры для всех разделов, описанных в конфигурации.

По умолчанию в официальных образах докера.

HAProxy файл конфигурации находится в /usr/local/etc/haproxy/haproxy.cfg



sudo openssl genrsa -out site.key 2048

конфигурации docker-compose.yml Для начала докер мы будем использовать контейнеры docker-compose , что позволит описать все необходимые настройки в одном или нескольких yml файлы конфигурации, которые можно объединить при запуске.

Приведенная выше конфигурация запускает контейнеры для сайтов.

microbase.localhost И координатор.

localhost куда будут отправляться запросы HAProxy .

В конфигурации также указывается контейнер с самим собой HAProxy который будет обрабатывать запросы.

По умолчанию docker-compose будет использовать файл docker-compose.yml в папке, из которой он был запущен.

Вы можете передать имя другого файла, используя параметр .

При звонке docker-compose можно указать несколько параметров .

В этом случае каждый последующий файл конфигурации будет дополнять предыдущие.



sudo openssl req -new -key site.key -out site.csr

Тестирование Тестирование проводилось утилитой осада с настройками по умолчанию и с 25 конкурирующие связи.

Время каждого теста было ограничено 1 минутой.



sudo openssl x509 -req -days 365 -in site.csr -signkey site.key -out site.crt

В качестве теста использовался php-файл со следующим кодом:

sudo bash -c 'cat site.key site.crt >> site.pem'

Сайты управлялись апач 2.4 И php как модуль.

Запуск осуществлялся на ноутбуке с процессором Intel Core i5-8250U 1,60 ГГц , БАРАН 8 ГБ И твердотельный накопитель диск.

Система использовалась Linux Mint 20 Корица Ниже представлены результаты испытаний.

  • Запросы на 80 порт без переадресации
    Через HAProxy Прямая связь


    defaults mode http timeout connect 5000ms timeout client 50000ms timeout server 50000ms frontend http_frontend bind *:80 redirect scheme https if !{ ssl_fc } frontend https_frontend bind *:443 ssl crt /etc/ssl/certs/site.pem acl is_microbase hdr_end(host) -i microbase.localhost use_backend microbase if is_microbase acl is_coordinator hdr_end(host) -i coordinator.localhost use_backend coordinator if is_coordinator backend microbase server microbase 172.20.1.1:80 check backend coordinator server coordinator 172.20.1.2:80 check



    version: "3" services: microbase: image: "inblank/php7.4-apache" volumes: - .

    /microbase:/var/www networks: default: ipv4_address: 172.20.1.1 coordinator: image: "inblank/php7.4-apache" volumes: - .

    /coordinator:/var/www networks: default: ipv4_address: 172.20.1.2 haproxy: image: "haproxy:2.2-alpine" ports: - 80:80 - 443:443 volumes: - .

    /haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg - .

    /cert.pem:/etc/ssl/certs/site.pem networks: default: external: name: develop

Разница в производительности ~18% .

  • Запросы на 80 порт перенаправлен на 443 порт
    Через HAProxy Прямая связь


    siege coordinator.localhost -t 1m



    <Эphp echo "Hello World!";

Разница в производительности ~14.5% .

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

Ссылки

HAProxy

  1. Официальный сайт HSProxy
  2. Документация по HAProxy
  3. Четыре основных раздела конфигурации HAProxy
  4. Официальный Docker-образ HAProxy


Докер

  1. Официальный сайт Докера
  2. Официальная страница создания докеров
  3. Ссылка на файл Docker Compose версии 3
Теги: #разработка веб-сайтов #docker #php #docker-compose #haproxy #разработка веб-сайтов
Вместе с данным постом часто просматривают: