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

ماذا عن تحياتي للجميع، هذا هو مقالي الأول في <» DesdeLinux (من بين العديد من المسودات الموجودة لدي 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

توثيق المشرف


اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.

  1.   f3niX قال

    أتفهم أن تطبيق Django لا يجب وضعه في جذر مجلد خادم الويب (/ var / www)؟ من أجل الأمان ، لا أعرف إذا كنت مخطئًا.

    تحية.

    1.    urKh قال

      حسنا !!! لقد كان شيئًا لم أكن على دراية به تمامًا ، وسوف أقوم بتحديث الإدخال 😛 وبمجرد عودتي يوم الاثنين ، سأقوم بإجراء تغييرات في تطبيق xD
      شكرا

  2.   رودريغو برافو (جويدور) قال

    Epale شقيق تعليمي جيد. لقد كنت في نفس الوقت مؤخرًا ولكن في دبيان 7 ، كان علي البحث والقراءة أكثر أو أقل. أوصي بإنشاء بيئة Virtualenv الافتراضية في منزل المستخدم في مجلد مخفي.

    تحيات!

  3.   سيرف فنريز قال

    هاهاها ctm أنا بالأمس وثق جانغو وأنت بالفعل تمر عبر المجرة 999999 تحية الرجال xD

  4.   daniel2ac قال

    مقال جيد جدًا =) قبل أسبوع فقط قمت بنشر تطبيق django الخاص بي لكنني قمت بذلك مع uwsgi و nginx ، هل تعرف ما هي ميزة Gunicorn؟ لقد رأيت أنه مذكور كثيرًا.
    من الجيد أن ترى أن django أصبح مشهورًا جدًا ، إنه حقًا أفضل إطار رأيته =)

  5.   غير اوزكان قال

    بالنسبة لـ STATIC_ROOT ، ما أفعله هو تحديد متغير عام. شيء من هذا القبيل:

    import os
    PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
    STATIC_ROOT = os.path.join(PROJECT_PATH, '../backend/static')

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

  6.   com.sgmart قال

    مثير للاهتمام ، سأحاول في المستقبل.

    بالمناسبة ، هل يعرف أي شخص كيفية تمكين اللهجات والأحرف غير ASCII في تطبيق django؟

    لقد بحثت في كل مكان ، ولم تنفعني أي من الطرق التالية:
    sys.setdefaultencoding ('utf-8') # in sites.py

    # - * - الترميز: utf-8 - * - # في كل ملف بيثون

    من المفترض أن يعمل تحرير site.py ووضع utf-8 بدلاً من ascii ، لكن $ file Models.py يخبرني أن ملفي لا يزال يمثل ascii.

    أي اقتراحات؟

    1.    com.sgmart قال

      انها عملت!!!!

  7.   anime230 قال

    برنامج تعليمي جيد جدًا ولكن يمكنك القيام بأحد كيفية تحميل تطبيقي على خادم ويب قيد الإنتاج بالفعل
    شكر