Написанию этого небольшого руководства предшествовало несколько недель мучений с попытками работы над проектами, когда для работы нужно было запустить контейнер с сайтом, контейнеры с тестовыми сборками, чтобы тестировщики могли спокойно тестировать новые возможности системы для основные данные, а также сборки для технической поддержки для изучения работы с системой в условиях, приближенных к «боевым».
Кроме того, веб-интерфейс сервиса должен был работать у членов моей группы разработчиков.
В этом случае некоторые системы должны работать на одной и той же версии.
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 .
- Создать приватный ключ (ключ)
** 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
- Создайте запрос на подпись сертификата (csr)
docker network create develop --subnet=172.20.0.0/16
- Создайте самозаверяющий сертификат (crt)
networks:
default:
external:
name: develop
- Объединение ключа и сертификата (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
- Официальный сайт HSProxy
- Документация по HAProxy
- Четыре основных раздела конфигурации HAProxy
- Официальный Docker-образ HAProxy
Докер
- Официальный сайт Докера
- Официальная страница создания докеров
- Ссылка на файл Docker Compose версии 3
-
О Рейтингах И Вообще Пару Слов
19 Oct, 24 -
Сколько Стоит Создать Сайт: Перезагрузка
19 Oct, 24