استخدام HAProxy و Docker على جهاز المطور لتطوير مواقع الويب

سبقت كتابة هذا الدليل الصغير عدة أسابيع من العذاب مع محاولات العمل في المشاريع ، عندما كان من الضروري إطلاق حاوية مع موقع للعمل ، وحاويات مع تجميعات اختبار بحيث يمكن للمختبرين اختبار ميزات النظام الجديدة للبيانات الأساسية بأمان ، بالإضافة إلى إنشاءات للدعم الفني للدراسة العمل مع النظام في ظروف قريبة من "القتال".



استخدام HAProxy و Docker على جهاز تطوير



بالإضافة إلى ذلك ، يجب أن تعمل واجهة ويب الخدمة لأعضاء فريق التطوير الخاص بي. في هذه الحالة ، يجب أن تعمل بعض الأنظمة على إصدار واحد من php ، وبعضها على إصدار آخر. في الوقت نفسه ، هناك اختلافات في البيئة التي تعمل فيها المواقع ، بدءًا من نظام التشغيل وخادم http الذي يعالج الطلبات ، وينتهي بوحدات php المثبتة .



يبدو أنه لا يوجد شيء معقد ، ارفع الحاويات وأرسل المنافذ للخارج. لكن لكل حاوية ، تحتاج إلى تحديد المنافذ الخارجية الخاصة بك التي تحتاج إلى تذكرها ، ثم نقلها ، على سبيل المثال ، إلى محاسب (هذا أيضًا مُختبِر) حتى يتحقق من التحسينات في النظام الذي يستخدمه. في بعض الأحيان لم أستطع فهم سبب عدم عمل البرامج النصية التي أصلحتها للتو كما هو متوقع أو سبب عدم فتح الموقع على الإطلاق.



بعد بعض التفكير ، تقرر إعادة توجيه جميع الطلبات من خلال HAPRoxy في الواجهة الأمامية ، والتي تتوفر في المنفذين 80 و 443 ، وبناءً على اسم المضيف ، يتم إرسال الطلبات إلى الحاوية المطلوبة.



تكوين عامل ميناء



لنبدأ بتكوين شبكة عامل الإرساء ، لأننا نحتاج إلى التحكم في عناوين الشبكة التي سيتم تخصيصها للحاويات.



قم بإنشاء شبكة عامل إرساء بشبكة فرعية. من الضروري تحديد الشبكة الفرعية لإرسال طلبات من 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.



  1. (key)


sudo openssl genrsa -out site.key 2048


  1. Certificate Signing Request (csr)


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


  1. (crt)


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


  1. (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%.

كما هو متوقع ، هناك انخفاض في الأداء عند استخدام حل مع HAProxy ، ولكنه ليس مهمًا لاستخدام هذا التكوين في عملية تطوير المواقع وتوفير الوصول إلى تجميعات الاختبار.



الروابط



HAProxy



  1. الموقع الرسمي HSProxy
  2. توثيق HAProxy
  3. الأقسام الأربعة الأساسية لتكوين HAProxy
  4. صورة Docker الرسمية لـ HAProxy


عامل ميناء



  1. موقع Docker الرسمي
  2. الصفحة الرسمية Docker-Compose
  3. مرجع Docker Compose file version 3



All Articles