كيفية نشر تطبيق Django:

ماذا عن تحياتي للجميع، هذه هي مقالتي الأولى في <» FromLinux (من بين العديد من المقالات التي لدي في مسوداتي xD)، آمل أن تكون مفيدة لك 

حسنًا ، في وظيفتي الجديدة والحالية ، في الوقت الحالي ، يتم تنفيذ هجرة العديد من الأنظمة إلى Django (كم غريب إيه؟ xD) وأحد مهامي ، بصرف النظر عن التطوير ، هو وضع هذه الأنظمة قيد الإنتاج ، إذن كمتدرب جيد ، حيث كانت المرة الأولى التي أضع فيها تطبيقًا قيد الإنتاج على خادم حقيقي: بدأت في قراءة المستند الرسمي لكل حزمة من الحزم المطلوبة للمكدس (Gunicorn and Supervisord أكثر من الجميع) ، ورؤية أن الدروس باللغة الإسبانية ، لم تكن واضحة جدًا بالنسبة لي في بعض الجوانب ، فقد قررت إنشاء دليل صغير بالخطوات التي اتبعتها لوضع التطبيق قيد الإنتاج ، استنادًا إلى مكدس Django و Gunicorn و Supervisord و Nginx و Postgresql.

في الحالة التي أعمل فيها ، لا تزال الخوادم تعمل على Debian Squeeze ، ولكن يجب أن يكون الدليل صالحًا تمامًا للتوزيعات الأخرى ... لذلك دعنا ننتقل مباشرة إلى النقطة ونبدأ:

سأعمل كمستخدم ممتاز. بادئ ذي بدء ، الحزم التالية مطلوبة:

PIP -> أداة لتثبيت وإدارة حزم Python
aptitude install python-pip

إنجن إكس -> خادم الويب (سنستخدمه كبروكسي عكسي وللتخزين المؤقت للملفات الثابتة 'img، js، css') نقوم بتثبيته مع:
aptitude install nginx

Supervisord -> تطبيق لإدارة ومراقبة تطبيقنا ، على الرغم من استخدامه لأكثر من ذلك بكثير. نقوم بتثبيته مع:
aptitude install supervisor

فيرتالينف -> يساعدنا في إنشاء بيئة تنفيذ افتراضية مخصصة لتطبيقنا. نقوم بتثبيته مع:
aptitude install python-virtualenv

Gunicorn -> خادم الويب للبيثون (لن نقوم بتثبيت هذا بعد)

أفترض أنه ينبغي بالفعل تثبيت postgresql وتكوينه

بسيكوبج 2 -> موصل Postgresql للبيثون (لن نقوم بتثبيته بعد)

قم بإنشاء بيئة افتراضية باستخدام Virtualenv:

سننتقل أولاً إلى دليل العمل الذي سنستخدمه في الإنتاج:
cd /var/www/

ثم في هذا الدليل سننشئ البيئة الافتراضية:
virtualenv ENV-nombreApp

ننتقل إلى الدليل الذي قمت بإنشائه للتو virtualenv
cd ENV-nombreAPP

نقوم بنسخ التطبيق في هذا الدليل والآن ننتقل إلى تنشيط البيئة باستخدام:
source bin/activate

يجب أن تبدو المطالبة الآن مثل (ENV)usuario@host:

سيؤدي هذا الآن إلى تخزين كل ما نقوم به في الدليل / var / www / ENV-appname / دون التأثير على حزم النظام

الآن ننتقل إلى دليل التطبيق:
cd nombreApp

ننتقل إلى تثبيت قائمة تبعيات التطبيق (إذا لزم الأمر) ، حيث تم تحديدها في الملف requirements.txt:
pip install -r requirements.txt

يمكننا أيضًا تثبيت الحزم بشكل فردي ، على سبيل المثال ، لتثبيت موصل كيو:
pip install psycopg2

تثبيت وتكوين GUnicorn:

لتثبيته نقوم به بنفس الطريقة:
pip install gunicorn

الآن سنقوم بتكوينه ، لذلك سننشئ ملفًا يسمى gunicorn-deploy.py في جذر تطبيقنا (على الرغم من أن الاسم يمكن أن يكون أي شيء) بالمحتوى التالي:

bind = "127.0.0.1:8001" # dirección a donde accederá Nginx
logfile = "/var/www/logs/nombreApp/gunicorn.log" # dirección donde estarán los logs de la aplicación
workers = 1 # dependerá en medida de la carga de trabajo que tenga la aplicación, también depende del hardware con que se cuente
loglevel = 'info' # tipo de logging

تكوين المشرف:

الآن دعنا نضبط supervisord، لذلك نقوم بإنشاء ملف التكوين باستخدام

echo_supervisord_conf > /etc/supervisord.conf

الآن نقوم بتحرير ملف التكوين:
vim /etc/supervisord.conf

ونقوم بإلغاء تعليق الأسطر التالية عن طريق إزالة ؛ (فاصلة منقوطة):

[unix_http_server] file = / tmp / supervisor.sock [supervisord] logfile = / var / log / supervisord.log logfile_maxbytes = 50 ميجا بايت logfile_backups = 10 loglevel = debug pidfile = / var / run / supervisord.pid nodaemon = minfds = 1024 minprocs = 200 [rpcinterface: supervisor] supervisor.rpcinterface_factory = supervisor.rpc واجهة: make_main_rpcinterface [supervisorctl] serverurl = unix: [program: appname] command = / var / www / ENV-appname / bin / django_unicorn -c / var / www / ENV -Appname / appname / gunicorn-deploy.py directory = / var / www / ENV-appname / appname / autostart = true autorestart = true user = Username redirect_stderr = true stdout_logfile = / var / www / logs / appname / supervisord.log

سنقوم الآن بإنشاء البرنامج النصي للمشرف ليبدأ مع النظام ، لذلك سننشئ الملف:
vim /etc/init.d/supervisord

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

 # بدء التشغيل التلقائي للمشرف # # الوصف: مشرف التشغيل التلقائي # اسم العملية: المشرف # pidfile: /var/run/supervisord.pid SUPERVISORD = / usr / local / bin / Supervisord SUPERVISORCTL = / usr / local / bin / supervisorctl case $ 1 in start) echo -n "بدء المشرف:" SUPERVISORD echo ؛؛ stop) echo -n "Stopping supervisord:" SUPERVISORCTL shutdown echo ؛؛ start) echo -n "Stopping supervisord:" SUPERVISORCTL shutdown echo-n "بدء تشغيل المشرف:" SUPERVISORD echo ؛؛ أن ج

والآن نمنح أذونات التنفيذ للملف بحيث يمكن أن يبدأ مع النظام:
sudo chmod +x /etc/init.d/supervisord

نقوم بتحديث الروابط لبدء الخدمة:
sudo update-rc.d supervisord defaults

نبدأ الخدمة:
sudo /etc/init.d/supervisord start

إعداد nginx:

هذه الخطوة بسيطة أيضًا ، سننشئ ملف التكوين التالي لـ NGINX لتطبيقنا:

vim /etc/nginx/sites-enabled/nombreApp

وسنضيف لك المحتوى التالي

الخادم {استمع 9001 ؛ # المنفذ حيث يريدون أن يستمع nginx إلى server_name www.domain.com ؛ # أو 192.168.0.100 ، العنوان الذي سنصل إليه access_log /var/log/nginx/Appname.access.log ؛ # حيث سيكون لدينا موقع سجل التطبيق / {# حيث سيتصل nginx عند الوصول إلى www.dominio.com/proxy_pass http://127.0.0.1:8001؛ proxy_set_header المضيف $ http_host؛ } location / static / {# حيث سيصل nginx عندما ندخل www.dominio.com/static/ alias / var / www / ENV-appname / appname / staticfiles / ؛ }}

ونعيد تشغيل nginx:
service nginx restart

إعداد Django:

دعنا نعدل ملف تكوين django:
vim nombreApp/settings.py

نحن نبحث عن السطر الذي يقول ديبوغ = صحيح ونغير القيمةالمتبقي DEBUG = خطأ

نضيف معلمات قاعدة البيانات:

DATABASES = {'افتراضي': {'ENGINE': 'django.db.backends.postgresql_psycopg2' أو # or mysql أو أيًا كان ما تستخدمه 'NAME': 'DBName' ، 'USER': 'DBUser' ، 'PASSWORD' : 'password DB' أو 'HOST': 'localhost' أو # أو الذي يحتاجون إليه 'PORT': '' أو # أو الذي يستخدمونه}}

نحن نبحث عن الخط ALLOWED_HOSTS = [] ونضيف المجال أو العنوان الذي سنصل من خلاله ، وترك شيئًا مثل ALLOWED_HOSTS = ["www.domain.com"]

نقوم بتكوين الدليل للملفات الثابتة ، ونبحث عن السطر الذي يقول STATIC_ROOT = ' ' ونغير القيمة ، ونضع المسار المطلق حيث نريد أن تكون ملفاتنا الثابتة ، في حالتي تركتها أكثر أو أقل مثل هذا STATIC_ROOT='/var/www/ENV-nombreApp/nombreApp/statics/'

أوشكنا على الانتهاء ، نقوم بتنفيذ الأمر التالي:
./manage.py collectstatic

سيؤدي هذا إلى إنشاء مجلد باسم "علم الإحصاء في المسار الذي نحدده في settings.py '، هذا هو المكان الذي ستكون فيه جميع ملفاتنا الثابتة.

وأخيرًا نعيد تشغيل المشرف لأخذ التغييرات الجديدة:
supervisorctl restart nombreApp

وهذا سيكون كل شيء، في النهاية لم يكن الأمر بهذه الأهمية، أليس كذلك؟ بدا الأمر بسيطًا بالنسبة لي 

آمل أن يكون مفيدًا لك، تحياتي 

وثائق GUnicorn

توثيق المشرف


أضف كمصدر مفضل في جوجل