شعار زيفيرنت

نشر نموذج التعلم الآلي باستخدام Flask على AWS مع Gunicorn وNginx

التاريخ:

المُقدّمة

في المقالة السابقة، مررنا بعملية بناء نموذج للتعلم الآلي لتحليل المشاعر والذي تم تضمينه في تطبيق Flask. يستخدم تطبيق Flask تحليل المشاعر لتصنيف التغريدات على أنها إيجابية أو سلبية. المشروع جاهز للتنفيذ، ويتم التحكم في إصداره على GitHub. للمضي قدمًا، سنتعرف الآن على كيفية استخدام Gunicorn وNginx لنشر تطبيق Flask هذا على خادم سحابي، مما يضمن أن نموذج التعلم الآلي قابل للتطوير ويمكن الوصول إليه في بيئة الإنتاج.

يمكنكم متابعة المقال السابق على كيفية نشر نموذج التعلم الآلي باستخدام Flask؟

لنبدأ من حيث توقفنا، سنستخدم Gunicorn وNGINX لنشر تطبيق Flask هذا على خادم سحابي. سيشرح هذا المنشور نقل تطبيق Flask المستضاف محليًا في الأصل لنشر التعلم الآلي إلى السحابة.

نشر نموذج التعلم الآلي باستخدام Flask على AWS مع Gunicorn وNginx

جدول المحتويات

تشمل الخطوات

  • قم بإعداد مثيل AWS EC2: قم بتشغيل مثيل AWS EC2 باستخدام Ubuntu كنظام تشغيل. تكوين مجموعات الأمان للسماح بحركة المرور الواردة.
  • SSH في مثيل EC2: استخدم SSH للاتصال بمثيل EC2 الخاص بك من جهاز macWeis المحلي لديك. نحن بحاجة إلى زوج مفاتيح SSH (عام وخاص) للاتصال بنظامك المحلي.
  • نشر تطبيق القارورة: انقل ملفات تطبيق Flask إلى مثيل EC2. إذا كان النموذج موجودًا بالفعل على Git Hub، فقم باستنساخه في مثيل EC2 Ubuntu. بعد ذلك، قم بإعداد بيئة افتراضية وتثبيت حزم Python المطلوبة أو ملف المتطلبات في الدليل باستخدام النقطة. اختبر ما إذا كان تطبيق Flask يعمل بشكل صحيح في بيئة EC2.
  • تثبيت التبعيات: قم بتحديث قوائم الحزم للترقيات وتثبيت التبعيات الضرورية، مثل Python وpip وأي مكتبات أخرى يتطلبها تطبيق Flask الخاص بك.
  • تثبيت وتكوين Gunicorn: قم بتثبيت Gunicorn، وهو خادم WSGI HTTP لتطبيقات Python. قم بإنشاء ملف خدمة Gunicorn لإدارة عملية التقديم. ابدأ تشغيل خدمة Gunicorn وقم بتمكينها للتشغيل في الخلفية.
  • تثبيت وتكوين NGINX: قم بتثبيت NGINX، وهو خادم ويب عالي الأداء، ووكيل عكسي. قم بتكوين NGINX لإعادة توجيه طلبات HTTP الواردة إلى خادم Gunicorn. قم بإعداد كتل الخادم (المضيفين الظاهريين) لتطبيق Flask الخاص بك.
  • تكوين اسم المجال (اختياري): إذا كان لديك اسم مجال، فقم بتكوين إعدادات DNS للإشارة إلى عنوان IP العام لمثيل EC2 الخاص بك. إذا لم يكن الأمر كذلك، فيمكنك الوصول إلى تطبيق Flask الخاص بك مباشرةً من عنوان IP العام.
  • تأمين التطبيق: تمكين HTTPS للاتصال الآمن بين العملاء والخادم. احصل على شهادة SSL/TLS (على سبيل المثال، Let's Encrypt) وقم بتكوين NGINX لاستخدامها.
  • اختبار النشر: بمجرد إعداد كل شيء، اختبر تطبيق Flask الذي تم نشره عن طريق الوصول إليه من خلال متصفح الويب أو إرسال الطلبات باستخدام cURL أو Postman.

باتباع هذه الخطوات، سننجح في نشر تطبيق Flask الخاص بك للتعلم الآلي على مثيل AWS EC2، باستخدام Gunicorn كخادم WSGI وNGINX كخادم وكيل عكسي للتعامل مع الطلبات الواردة بكفاءة وأمان.

قبل البدء في التدريب العملي، دعونا نفهم كيف يتم ذلك.

فهم التواصل: Flask وGunicorn وNginx

             +-----------------------------+
             |           Client            |
             +-----------------------------+
                          |
                          |
             +------------v-------------+
             |        NGINX (Port 80)   |
             +------------+-------------+
                          |
                          |
             +------------v-------------+
             |       Gunicorn           |
             |     (WSGI Server)        |
             +------------+-------------+
                          |
                          |
             +------------v-------------+
             |   Flask Application      |
             |       (Python)           |
             +--------------------------+

القارورة: مركز التطبيق

Flask هو إطار ويب Python خفيف الوزن ومرن يوفر الأدوات اللازمة لإنشاء تطبيقات/خدمات الويب. إنه أساس خدمة تحليل المشاعر الخاصة بك، حيث يتعامل مع طلبات الويب الواردة، ويعالجها باستخدام نموذج التعلم الآلي الخاص بك، ويعيد نتائج التحليل. تعمل القارورة كطبقة التطبيق في مجموعتنا.

لقد قمنا بالفعل بإنشاء تطبيق Flask في المقالة السابقة. واستنساخه باستخدام الأمر.

https://github.com/Geek-shikha/Flask_model_sentiment_analysis.git

لا تستطيع القارورة وحدها التعامل مع طلبات متعددة في وقت واحد؛ وذلك عندما يأتي دور Gunicorn.

Gunicorn: خادم Python WSGI HTTP

تعمل Gunicorn كطبقة وسيطة تتفاعل مع Flask. إنه خادم Python WSGI HTTP مصمم لأنظمة UNIX، ويقدم طريقة بسيطة وفعالة لنشر تطبيقات ويب Python. عندما تقوم بتشغيل تطبيق Flask الخاص بك باستخدام Gunicorn، فإنه يقوم بإنشاء خادم WSGI الذي يتصل بتطبيق Flask. يدير Gunicorn عمليات عاملة متعددة للتعامل مع الطلبات الواردة وتوزيع الحمل وزيادة القدرة على التعامل مع المستخدمين المتزامنين. لا، عدد العمال والخيوط يعتمد على عدد أنوية النظام، 2*Cores +1.

حتى يكون لديك تعدد مؤشرات الترابط، لا توجد مساحة ذاكرة منفصلة. يمكن لعامل واحد التعامل مع طلبات متعددة من العملاء بالتوازي.

لماذا مطلوب Gunicorn؟

لأسباب مختلفة، يعد Gunicorn أو Green Unicorn عنصرًا حاسمًا في استضافة تطبيقات Flask. أولاً، لا يستطيع خادم التطوير المدمج في Flask التعامل مع طلبات متعددة في وقت واحد، مما يجعله غير مناسب لبيئات الإنتاج. يتيح نموذج العامل ما قبل الانقسام الخاص به إمكانية التوسع من خلال تشغيل العديد من العمليات العاملة أو سلاسل العمليات، مما يستوعب حركة المرور المتزايدة بشكل فعال. تقوم موازنة التحميل في G unicorn بتوزيع الطلبات بالتساوي، مما يعزز الأداء في ظل الأحمال الثقيلة. متوافق مع مواصفات WSGI، يتكامل Gunicorn بسلاسة مع Flask والأطر الأخرى المتوافقة مع WSGI، مما يبسط عملية النشر. يوفر Gunicorn ميزات أساسية مثل التزامن وقابلية التوسع والأداء والتوافق، مما يجعله لا غنى عنه لنشر تطبيقات Flask في الإنتاج.

Nginx: الوكيل العكسي للخط الأمامي

Nginx هو خادم ويب قوي وعالي الأداء معروف باستقراره وتكوينه البسيط واستهلاكه المنخفض للموارد. في عملية نشرنا، تم تكوين Nginx كوكيل عكسي، موجود أمام Gunicorn. فهو يتلقى طلبات العملاء ويرسلها إلى Gunicorn، الذي بدوره يتواصل مع تطبيق Flask. Nginx مسؤول أيضًا عن تقديم الملفات الثابتة، والتعامل مع تشفير SSL/TLS، وربما موازنة التحميل إذا كان تطبيقك يتوسع إلى خوادم متعددة.

لماذا نجينكس؟

وبصرف النظر عن توفير علاوة على ذلك، تتفوق NGINX في التعامل مع نماذج أو تطبيقات متعددة في وقت واحد، وذلك بفضل إمكاناتها القوية لموازنة التحميل وآليات التخزين المؤقت. في حين أن Gunicorn قد يواجه صعوبات في سرعة معالجة الطلبات المتعددة، فإن NGINX يمكنه التعامل بكفاءة مع عبء العمل هذا عن طريق تخزين الطلبات مؤقتًا، مما يضمن تشغيلًا أكثر سلاسة. بالإضافة إلى ذلك، يوفر NGINX ميزات أساسية مثل إنهاء SSL، ومصادقة الرمز المميز، وموازنة التحميل، مما يجعله لا غنى عنه لتأمين تطبيقات Flask وتحسينها. لمزيد من قابلية التوسع والمرونة، يمكن دمج Docker أو Kubernetes جنبًا إلى جنب مع NGINX، مما يتيح التوسع الديناميكي والإدارة المبسطة للخدمات. سواء تم نشرها على AWS أو Kubernetes، تظل NGINX أداة قوية ومتعددة الاستخدامات لاستضافة تطبيقات Flask على نطاق واسع.

متطلبات مسبقة

قبل استخدام الخطوات لنشر النموذج الخاص بك، يجب أن تفهم وتمتلك ما يلي.

حساب أوس: أنت بحاجة إلى حساب AWS للوصول إلى EC2 وخدمات AWS الأخرى. إذا لم يكن لديك حساب، يمكنك التسجيل للحصول على حساب على موقع AWS الإلكتروني.

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

فهم مواصفات ملف WSGI والخوادم والوكيل والمنافذ. القليل من الفهم سيساعد أيضًا.

نشر نموذج التعلم الآلي باستخدام Flask على AWS مع Gunicorn وNginx

الخطوة 1: إعداد مثيل AWS EC2

قم بتشغيل مثيل AWS EC2 باستخدام Ubuntu كنظام تشغيل. الخدمة الصغيرة ستعمل بشكل جيد. نحن نحتفظ باسم المثيل باعتباره خادم تحليل المشاعر. أنت حر في اختيار ما تريد. لكن تذكر أن اختيار خدمة المثيل يعتمد على حجم التطبيق الذي تحاول استضافته.

قم بإعداد مثيل AWS EC2

قم بإنشاء زوج مفاتيح للاتصال بشكل آمن بـ EC2 الخاص بك من خلال SSH. عندما تقوم بإنشاء مثيل EC2، فإنك تحدد زوج مفاتيح، ويتم استخدام ملف المفتاح الخاص المقابل (.pem) لمصادقة اتصال SSH الخاص بك بالمثيل. استخدم زوج مفاتيح من نوع RSA واتبع الخطوات التالية.

  1. إنشاء زوج المفاتيح: انقر فوق الزر "إنشاء زوج مفاتيح" لإنشاء زوج المفاتيح.
  2. تنزيل المفتاح الخاص: بمجرد إنشاء زوج المفاتيح، سيتم تنزيل ملف المفتاح الخاص (.pem) تلقائيًا على جهازك المحلي. يقوم ملف المفتاح الخاص هذا بتصديق اتصالات SSH بمثيلات EC2 الخاصة بك.
قم بإعداد مثيل AWS EC2

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

الاتصال بالمثيل

الخطوة 2: SSH في مثيل EC2

افتح محطة جهاز الكمبيوتر الخاص بك. إذا كان ملف المفتاح الخاص (.pem) موجودًا في دليل، فستحتاج إلى تحديد المسار الكامل لملف المفتاح عند استخدام أمر SSH للاتصال بمثيل EC2 الخاص بك. وإليك كيف يمكنك القيام بذلك:

لنفترض أن مفتاحك (ملف .pem) موجود في التنزيلات. ثم، تحتاج إلى وضع أمر SSH الخاص بك هناك. لذلك، كل ما عليك فعله هو فتح الجهاز الخاص بك، والانتقال إلى دليل التنزيلات، ولصق الأمر الخاص بك هناك.

cd ~/Downloads

الآن قم بلصق أمر SSH الخاص بك، والذي قد يبدو كالمثال: ssh -i "sentiment_analysiskey.pem" [البريد الإلكتروني محمي]

SSH في مثيل EC2

الخطوة 3: تثبيت المكونات الضرورية من مستودعات Ubuntu

الخطوة الأولى هي تثبيت جميع المكونات الضرورية من مستودعات Ubuntu. يتضمن ذلك مكونات Python، التي سيديرها Pip، ومدير حزم Python. سيتم أيضًا توفير ملفات تطوير Python المطلوبة لتجميع مكونات Gunicorn. عند تثبيت الحزم التي تمكنك من إنشاء بيئة بايثون الخاصة بك، يجب عليك أولاً تحديث فهرس الحزم المحلي.

sudo apt update 
sudp apt upgrade 

ثم قم بتثبيت أمر Python-pip لتثبيت النقطة والبيئة الافتراضية.

sudo apt install python3-pip
sudo apt install python3-venv

ثم قم بتثبيت حزمة net stat. تعرض حزمة net-tools المعلومات المتعلقة بالشبكة، مثل اتصالات الشبكة النشطة وجداول التوجيه وإحصائيات الواجهة وما إلى ذلك.

sudo apt تثبيت net-tools

sudo apt install net-tools

netstat tuln #after installing run this command 

يعرض قائمة باتصالات الشبكة النشطة ومنافذ الاستماع على النظام:

ثم قم بتثبيت حزمة جدار الحماية: حزمة ufw (جدار الحماية غير المعقد) هي واجهة أمامية لإدارة قواعد جدار الحماية iptables على Ubuntu وتوزيعات Linux الأخرى المستندة إلى Debian. فهو يوفر واجهة مبسطة لتكوين قواعد جدار الحماية، مما يسهل إعداد حماية جدار الحماية الأساسية لنظامك

  • تمكين سودو ufw: تمكين جدار الحماية.
  • سودو ufw السماح /: يسمح هذا الأمر بالاتصالات الواردة على منفذ وبروتوكول محددين (على سبيل المثال، يسمح sudo ufw لـ 22/TCP بتمكين اتصالات SSH).
  • حالة سودو ufw: يعرض الحالة الحالية وقواعد جدار الحماية.
sudo apt install ufw #
sudo ufw allow 22 #ssh access
sudo ufw allow 5000  #5000 port for flask app test 

sudo ufw status 
  1. سودو ufw يسمح بـ 5000: يسمح هذا بالاتصالات الواردة على المنفذ 5000. افتراضيًا، يسمح بحركة مرور TCP وUDP على هذا المنفذ. سنقوم بتشغيل تطبيق Flask الخاص بنا على 5000، لذلك يجب أن تكون خدمة تطبيق Flask التي تعمل على المنفذ 5000 قابلة للوصول من الشبكة.
  2. سودو ufw يسمح بـ 22: يعمل هذا الأمر على تمكين اتصالات SSH الواردة على المنفذ 22. يتم استخدام SSH للوصول عن بعد إلى نظامك، ويسمح لك السماح بالاتصالات على المنفذ 22 بالاتصال بالخادم الخاص بك عبر SSH بشكل آمن. هذا مهم؛ يجب ألا تقوم بإيقاف تشغيل هذا، لأنك لن تتمكن من الوصول إلى SSH الخاص بك عن بعد.

الخطوة 4: نشر تطبيق Flask وإعداد التطبيق

نشر تطبيق Flask: انقل ملفات تطبيق Flask إلى مثيل EC2. إذا كان النموذج موجودًا بالفعل على Git Hub، فقم باستنساخه في مثيل EC2 Ubuntu. بعد ذلك، قم بإعداد بيئة افتراضية جديدة وقم بتثبيت حزم Python المطلوبة أو ملف المتطلبات في الدليل باستخدام النقطة. وبعد ذلك، يعمل تطبيق Test Flask بشكل صحيح في بيئة EC2.

في حالتنا، نحن نقوم باستنساخ مستودع git، والذي استخدمناه في المقالة الأخيرة لتحليل مشاعر التغريدة.

لكن تأكد أولاً من تثبيت git. إذا تم تثبيته، قم بتشغيل الأمر: git clone -b master –single-branch https://github.com/Geek-shikha/Flask_model_sentiment_analogy.git

git --version # if this exists you need not to sudo apt install git 
git clone -b master --single-branch 
https://github.com/Geek-shikha/Flask_model_sentiment_analysis.git #same line 

#after cloning the repository go tot the directory and list all the files 
cd Flask_model_sentiment_analysis
ls 

ملحوظة: عندما تقوم باستنساخ المستودع، لن ترى أي ملف app.py؛ بدلاً من ذلك، myproject.py موجود، وهو ما نطلبه.

توجد بيئة افتراضية أنشأناها مسبقًا أثناء إنشاء تطبيق Flask محليًا. نحن بحاجة إلى إنشاء بيئة افتراضية جديدة لتجنب الأخطاء أو التناقضات. البيئة الافتراضية الجديدة تسمى "myprojectenv" ويجب تفعيلها.

python -m venv myprojectenv #virtual env named as myprojectenv
source myprojectenv/bin/activate #activate the virtual environment

قم بتثبيت مكتبات بايثون المخزنة في ملف require.txt

pip install -r requirements.txt #install the dependencies like flask, nltk etc.

الآن قم باختبار وتشغيل تطبيق Python Flask الخاص بك

python3 myproject.py

من خلال تشغيل هذا، يمكنك رؤية الإخراج في المحطة مثل هذا:

لمعرفة ما إذا كان يعمل. قم بزيارة عنوان IP الخاص بخادمك متبوعًا بـ:5000 في متصفح الويب الخاص بك. على متصفح الويب الخاص بك، عنوان IP الخاص بخادمك هو 5000، مثل http://server_pub_ip:5000. لنفترض أن عنوان IP للخادم هو  23.124.09.133 ثم وضع HTTP://23.124.09.133:5000 

الخطوة 5: ملف WSGI

بعد ذلك، قم بإنشاء ملف سيكون بمثابة نقطة الدخول لتطبيقك. سيوجه هذا الملف خادم Gunicorn للتفاعل مع التطبيق.

قم بإنشاء ملف wsgi.py في مجلد Flask_model_sentiment_analogy

nano ~/Flask_model_sentiment_analysis/wsgi.py 

في هذا الملف، قم باستيراد نسخة Flask من تطبيقنا، والذي أطلقنا عليه اسم myproject.py، ثم قم بتشغيله:

from myproject import app

if __name__ == "__main__":
    app.run()

يمكنك أيضًا تثبيت sudo apt وunicorn في حالة وجود أي خطأ.

الخطوة 6: تكوين Gunicorn

لنبدأ بتكوين Gunicorn وربط تطبيق wsgi بالمنفذ 5000

يقوم أمر تكوين unicorn بتشغيل خادم Gunicorn الذي يستمع للاتصالات الواردة على المنفذ 5000 من أي عنوان IP ويخدم تطبيق WSGI المسمى التطبيق المحدد في ملف wsgi.py.

gunicorn --bind 0.0.0.0:5000 wsgi:app

الإخراج:

تحقق مما إذا كان يعمل. قم بزيارة عنوان IP الخاص بخادمك متبوعًا بـ:5000في متصفح الويب الخاص بك: على متصفح الويب الخاص بك، عنوان IP لخادمك هو 5000، مثل http://server_pub_ip:5000; لنفترض أن عنوان IP للخادم هو  23.124.09.133 ثم وضع HTTP://23.124.09.133:5000 

يجب أن يعطيك إخراج مثل هذا:

إذا حصلت على الإجابة الصحيحة، قم بإيقاف الخدمة؛ يمكنك الضغط على ctrl+c ثم إلغاء تنشيط بيئتك الافتراضية عن طريق إعطاء الأمر. بعد ذلك، قم بإنشاء ملف وحدة النظام والخدمة. سيمكن هذا الإجراء نظام init الخاص بـ Ubuntu من بدء Gunicorn تلقائيًا واستضافة تطبيق Flask عند تشغيل الخادم.

sudo nano /etc/systemd/system/myproject.service

أضف المحتوى التالي:

[Unit]
Description=Gunicorn instance to serve myproject
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/Flask_model_sentiment_analysis
Environment="PATH=/ubuntu/Flask_model_sentiment_analysis/myprojectenv/bin"
ExecStart=/home/ubuntu/Flask_model_sentiment_analysis/myprojectenv/bin/gunicorn 
--workers 3 --bind unix:myproject.sock -m 007 w>
[Install]
WantedBy=multi-user.target
  • [وحدة]: يحدد هذا القسم البيانات التعريفية والتبعيات للوحدة.
  • الوصف: يصف الخدمة.
  • بعد = network.target: يشير إلى أن هذه الوحدة تبدأ بعد تشغيل الشبكة، مما يضمن الاتصال بالشبكة قبل بدء الخدمة.
  • [خدمة]: يحدد هذا القسم معلمات الخدمة.
  • المستخدم = أوبونيت: وهو يحدد حساب المستخدم الذي يجب تشغيل الخدمة من خلاله.
  • المجموعة=www-البيانات: يضبط المجموعة للخدمة.
  • عمل اخراجي: يحدد دليل العمل للخدمة.
  • البيئة = "PATH=/ubuntu/Flask_model_sentiment_analogy/myprojectenv/bin": يحدد هذا المتغير متغيرات بيئة الخدمة، ويحدد بشكل صريح متغير PATH ليشمل الدليل الثنائي للبيئة الافتراضية.
  • إكسيكستارت: يحدد الأمر لبدء الخدمة. في هذه الحالة، يبدأ Gunicorn بخيارات محددة:
  • – العمال 3: تكوين Gunicorn لاستخدام ثلاث عمليات عاملة.
  • -ربط يونكس: مشروعي.sock: يحدد ملف المقبس الذي سيتواصل من خلاله Gunicorn مع خادم الويب (على سبيل المثال، Nginx أو Apache).
  • -م 007: يضبط القناع على 007، ويتحكم في أذونات الملفات التي أنشأها Gunicorn.
  • وسجي:التطبيق: يشير إلى موقع تطبيق WSGI المطلوب خدمته.
  • [ثَبَّتَ]: يحدد هذا القسم معلومات التثبيت الخاصة بالوحدة.
  • WantedBy=multi-user.target: يحدد الهدف الذي يجب تثبيت هذه الوحدة عليه. في هذه الحالة، يتم ضبطه على متعدد المستخدمين. يشير الهدف، وهو هدف قياسي لأنظمة المستخدم، إلى أن الخدمة يجب أن تبدأ تلقائيًا أثناء تشغيل النظام.

باختصار، يقوم ملف وحدة النظام هذا بإعداد Gunicorn لخدمة تطبيق Flask بتكوينات محددة ويضمن بدء الخدمة تلقائيًا عند تشغيل النظام.

حان الوقت لبدء خدمة Gunicorn التي قمت بإنشائها وتمكينها بحيث تبدأ عند التمهيد:

sudo systemctl start myproject
sudo systemctl enable myproject
sudo systemctl status myproject#check the status of your service file for errors, ifany

 إذا قاوم الأمر، فاستخدم هذا لإعادة تحميل "sudo systemctl daemon-reload"،

إذا اتبعت كل خطوة، فلن تكون هناك أخطاء؛ ومع ذلك، إذا استمر الخطأ، قم بحل الخطأ. من الممكن أن يكون هناك خطأ في المسار أو البيئة في ملف الخدمة. تحقق بعناية

الخطوة 7: تثبيت وتكوين NGINX

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

sudo apt install nginx

ابدأ بإنشاء ملف تكوين جديد لكتلة الخادم داخل دليل Nginx sites-available. قم بتسمية هذا الملف "مشروع" حتى لا يتم الخلط بينك وبينه. لقد كنا نستخدم الاسم myproject.py سابقًا

sudo nano /etc/nginx/sites-available/myproject

لإضافة المحتوى إلى الملف، الذي يحتوي على تكوين كتلة خادم Nginx لضمان إعادة توجيه طلبات HTTP الواردة إلى عنوان IP للخادم المحدد إلى خادم تطبيق Gunicorn عبر ملف مقبس Unix، مما يسمح لتطبيق Flask بمعالجة الطلبات. احفظ الملف واخرج من المحرر.

server {
    listen 80;
    server_name 3.110.196.110; #your server public ip 

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/ubuntu/Flask_model_sentiment_analysis/myproject.sock;
    }
}
  • الخادم { … }: تحدد هذه الكتلة تكوين الخادم داخل Nginx. فهو يتضمن إعدادات التكوين للتعامل مع الطلبات الخاصة بخادم معين.
  • الاستماع 80: يحدد هذا التوجيه أن Nginx يجب أن يستمع لطلبات HTTP الواردة على المنفذ 80، المنفذ الافتراضي لحركة مرور HTTP.
  • اسم_الخادم 3.110.196.110: يقوم هذا التوجيه بتعيين اسم مضيف الخادم أو عنوان IP. في هذه الحالة، يتم تعيينه على 3.110.196.110، والذي يجب استبداله بعنوان IP العام لخادمك.
  • موقع / { … }: تحدد هذه الكتلة كيفية تعامل Nginx مع طلبات الدليل الجذر/الخادم.
  • تضمين proxy_params: يوفر هذا التوجيه إعدادات التكوين من ملف proxy_params. تحتوي هذه الإعدادات عادةً على تكوينات مرتبطة بالوكيل، مثل رؤوس الوكيل.
  • proxy_pass http://unix:/home/ubuntu/Flask_model_sentiment_analogy/myproject.sock: يحدد هذا التوجيه أنه يجب على Nginx إعادة توجيه الطلبات الواردة إلى ملف مقبس Unix المحدد الموجود في /home/ubuntu/Flask_model_sentiment_analogy/myproject.sock. هذا هو المكان الذي يستمع فيه Gunicorn للطلبات. سيعمل Nginx كوكيل عكسي، حيث يمرر الطلبات إلى Gunicorn ويعيد الردود إلى العميل.

الآن قم بتمكين واختبار الأخطاء

sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
sudo nginx -t
  • Sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled: يقوم هذا الأمر بإنشاء رابط رمزي يسمى myproject في الدليل الممكّن للمواقع، مع الإشارة إلى ملف التكوين الموجود في الدليل المتوفر للمواقع. من خلال القيام بذلك، يمكنك تمكين تكوين كتلة الخادم لمشروعك.
  • سودو nginx -t: يختبر هذا الأمر إعدادات Nginx بحثًا عن الأخطاء النحوية. فهو يتحقق مما إذا كانت ملفات تكوين Nginx، بما في ذلك كتلة خادم myproject الممكّنة حديثًا، مكتوبة بشكل صحيح وصالحة. إذا كان هناك أي أخطاء، سيتم الإبلاغ عنها خلال هذا الاختبار.

أعد تشغيل nginx حيث قمنا بتحديث التكوينات

sudo systemctl restart nginx

تحديث جدار الحماية لـ nginx

sudo ufw allow 'Nginx Full'

نظرًا لأننا لا نحتاج إلى المنفذ 5000، فيمكننا تعطيله باستخدام الأمر "sudo ufwdeleteallow 5000"، لكننا لسنا بحاجة إلى تعطيل المنفذ 22.

انتقل الآن إلى اسم مجال الخادم الخاص بك (أو عنوان IP) في متصفح الويب الخاص بك، وسترى الإخراج:

إذا رأيت أي خطأ مثل بوابة 502، فأنت بحاجة إلى تغيير بعض الأذونات. استخدم الأمر

sudo chmod 755 /home/ubuntu

كما أنه عند اختبار الخادم الخاص بك للتطبيق، يجب عليك استخدام http://... وليس https، حيث أن التطبيق غير آمن.

إذا كانت هناك أخطاء، يمكنك التحقق منها من خلال أوامر مثل:

الخطوة 7: تثبيت وتكوين NGINX

إذا كنت تريد إيقاف الخدمة، يمكنك استخدام الأمر

sudo systemctl stop nginx #stop the service 
sudo systemctl start nginx# to start the service 

خطوات إضافية لتأمين التطبيق

هناك خطوات أخرى لتأمين التطبيق.  

تمكين HTTPS للاتصال الآمن بين العملاء والخادم. احصل على شهادة SSL/TLS (على سبيل المثال، Let's Encrypt) وقم بتكوين NGINX لاستخدامها. يمكننا استخدام Certbot لتأمين التطبيق.

لتأمين خادم الويب الخاص بك باستخدام SSL/TLS باستخدام Certbot، تحتاج عادةً إلى اسم مجال مسجل. يتطلب Certbot اسم مجال لإصدار شهادات SSL لأنه يتحقق من ملكية النطاق قبل إصدار الشهادة. على الرغم من أنه من الممكن تقنيًا استخدام عنوان IP عام بدلاً من اسم النطاق، إلا أنه لا يوصى بذلك لعدة أسباب. الأول هو متطلبات المرجع المصدق (CA): لدى المرجع المصدق (CAs) مثل Let's Encrypt (الذي يستخدمه Certbot) سياسات معمول بها تتطلب التحقق من صحة النطاق. لن يصدروا شهادات SSL لعناوين IP.

إذا كنت تريد تأمينه، فيمكنك استخدام sudo apt install python3-certbot-nginx ومعرفة المزيد عنه في وثائقه.

وفي الختام

في هذه المقالة، قمنا بإنشاء تطبيق Flask أساسي ضمن بيئة Python الافتراضية. لقد أنشأنا نقطة دخول WSGI، لتمكين التوافق مع أي خادم تطبيقات يدعم WSGI، ثم قمنا بتكوين Gunicorn للقيام بهذا الدور. وبعد ذلك، قمنا بإنشاء ملف خدمة النظام لبدء تشغيل خادم التطبيق تلقائيًا عند تشغيل النظام. بالإضافة إلى ذلك، قمت بإنشاء كتلة خادم Nginx المسؤولة عن توجيه حركة مرور عميل الويب إلى خادم التطبيق، وإعادة توجيه الطلبات الخارجية بشكل فعال، وحماية حركة مرور الخادم باستخدام تشفير Let's Encrypt.

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة