ماذا عن تحياتي للجميع، هذا هو مقالي الأول في <» 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
وسيكون هذا كل شيء ، في النهاية لم يكن هذا صحيحًا كثيرًا؟ بدا الأمر بسيطًا بالنسبة لي
اتمنى ان تفيدكم تحياتي 😉
أتفهم أن تطبيق Django لا يجب وضعه في جذر مجلد خادم الويب (/ var / www)؟ من أجل الأمان ، لا أعرف إذا كنت مخطئًا.
تحية.
حسنا !!! لقد كان شيئًا لم أكن على دراية به تمامًا ، وسوف أقوم بتحديث الإدخال 😛 وبمجرد عودتي يوم الاثنين ، سأقوم بإجراء تغييرات في تطبيق xD
شكرا
Epale شقيق تعليمي جيد. لقد كنت في نفس الوقت مؤخرًا ولكن في دبيان 7 ، كان علي البحث والقراءة أكثر أو أقل. أوصي بإنشاء بيئة Virtualenv الافتراضية في منزل المستخدم في مجلد مخفي.
تحيات!
هاهاها ctm أنا بالأمس وثق جانغو وأنت بالفعل تمر عبر المجرة 999999 تحية الرجال xD
مقال جيد جدًا =) قبل أسبوع فقط قمت بنشر تطبيق django الخاص بي لكنني قمت بذلك مع uwsgi و nginx ، هل تعرف ما هي ميزة Gunicorn؟ لقد رأيت أنه مذكور كثيرًا.
من الجيد أن ترى أن django أصبح مشهورًا جدًا ، إنه حقًا أفضل إطار رأيته =)
بالنسبة لـ STATIC_ROOT ، ما أفعله هو تحديد متغير عام. شيء من هذا القبيل:
import os
PROJECT_PATH = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_PATH, '../backend/static')
حيث الخلفية هي تطبيق قمت بإنشائه. بهذه الطريقة أتأكد من أن المسار العام عند نشر المشروع هو نفسه.
مثير للاهتمام ، سأحاول في المستقبل.
بالمناسبة ، هل يعرف أي شخص كيفية تمكين اللهجات والأحرف غير ASCII في تطبيق django؟
لقد بحثت في كل مكان ، ولم تنفعني أي من الطرق التالية:
sys.setdefaultencoding ('utf-8') # in sites.py
# - * - الترميز: utf-8 - * - # في كل ملف بيثون
من المفترض أن يعمل تحرير site.py ووضع utf-8 بدلاً من ascii ، لكن $ file Models.py يخبرني أن ملفي لا يزال يمثل ascii.
أي اقتراحات؟
انها عملت!!!!
برنامج تعليمي جيد جدًا ولكن يمكنك القيام بأحد كيفية تحميل تطبيقي على خادم ويب قيد الإنتاج بالفعل
شكر