La redacción de esta pequeña guía estuvo precedida por varias semanas de tormento con intentos de trabajar en proyectos, cuando fue necesario lanzar un contenedor con un sitio para el trabajo, contenedores con ensamblajes de prueba para que los probadores pudieran probar con seguridad nuevas características del sistema para datos básicos, así como ensamblajes para soporte técnico para estudiar. trabajar con el sistema en condiciones cercanas al "combate".
Además, debería funcionar una interfaz web de servicio para los miembros de mi equipo de desarrollo. En este caso, algunos de los sistemas deberían funcionar en una versión de php , otros en otra. Al mismo tiempo, existen diferencias en el entorno en el que funcionan los sitios, comenzando con el sistema operativo y el servidor http que procesa las solicitudes, y terminando con los módulos php instalados .
No parece nada complicado, levantar los contenedores y reenviar los puertos al exterior. Pero para cada contenedor, debe especificar sus propios puertos externos que necesita recordar y luego transferirlos, por ejemplo, a un contador (este también es un probador) para que verifique las mejoras en el sistema que usa. A veces, yo mismo no podía entender por qué los scripts que acabo de arreglar no funcionaban como esperaba, o por qué el sitio no se abría en absoluto.
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%.
Como se esperaba, hay una caída en el rendimiento cuando se usa una solución con HAProxy , pero no es crítico usar esta configuración en el proceso de desarrollo de sitios y proporcionar acceso a ensamblajes de prueba.
Enlaces
HAProxy
- Sitio web oficial de HSProxy
- Documentación de HAProxy
- Las cuatro secciones esenciales de una configuración HAProxy
- Imagen oficial de Docker de HAProxy