A redação deste pequeno manual foi precedida por várias semanas de tormento com tentativas de trabalhar em projetos, quando foi necessário lançar um container com um local de trabalho, containers com assemblies de teste para que os testadores pudessem testar com segurança novos recursos do sistema para dados básicos, bem como builds para suporte técnico estudar trabalhar com o sistema em condições próximas de "combate".

Além disso, uma interface da web de serviço para os membros da minha equipe de desenvolvimento deve funcionar. Neste caso, alguns dos sistemas devem funcionar em uma versão do php , alguns em outra. Ao mesmo tempo, existem diferenças no ambiente em que os sites funcionam, começando com o sistema operacional e o servidor http que processa as solicitações, e terminando com os módulos php instalados .
Parece não ser nada complicado, levante os containers e encaminhe os portos para fora. Mas para cada contêiner, você precisa especificar suas próprias portas externas que você precisa lembrar e depois passá-las, por exemplo, a um contador (este também é um testador) para que ele verifique as melhorias no sistema que usa. Às vezes, eu mesmo não conseguia entender por que os scripts que acabei de consertar não funcionavam como esperado ou por que o site não abriu.
HAPRoxy , 80 443, .
docker
docker , .
docker . HAProxy ip- , - .
docker network create develop --subnet=172.20.0.0/16
ip docker-compose.yml :
networks:
default:
external:
name: develop
, HAProxy, ip-.
networks:
default:
ipv4_address: 172.20.1.1
https
HAProxy https .
, HAProxy.
- (key)
sudo openssl genrsa -out site.key 2048
- Certificate Signing Request (csr)
sudo openssl req -new -key site.key -out site.csr
- (crt)
sudo openssl x509 -req -days 365 -in site.csr -signkey site.key -out site.crt
- (pem)
sudo bash -c 'cat site.key site.crt >> site.pem'
HAProxy.
, HAProxy Docker.
haproxy.cfg docker-compose.yml.
, . , HAProxy docker-compose.
HAPRoxy
HAProxy 80 443, , , 80 . https.
443 .
HAProxy frontend , .
frontend , backend.
Backend, , .
defaults .
docker HAProxy /usr/local/etc/haproxy/haproxy.cfg
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
docker-compose.yml
docker docker-compose, yml .
microbase.localhost coordinator.localhost HAProxy.
c HAProxy .
docker-compose docker-compose.yml .
-f.
docker-compose -f. , .
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
siege 25 . 1- .
siege coordinator.localhost -t 1m
php :
<?php
echo "Hello World!";
apache 2.4 php .
Intel Core i5-8250U 1.60GHz, 8 SSD . Linux Mint 20 Cinnamon
.
- 80
HAProxy ** 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
** 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
~18%.
- 80 443
HAProxy ** 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
** 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
~14.5%.
Conforme esperado, há uma queda de desempenho ao usar uma solução com HAProxy , mas não é crítico para usar essa configuração no processo de desenvolvimento de sites e fornecer acesso a assemblies de teste.
Links
HAProxy
- Site oficial HSProxy
- Documentação HAProxy
- As quatro seções essenciais de uma configuração HAProxy
- Imagem oficial do Docker do HAProxy