كيفية إعداد Django مع Postgres و Nginx و Gunicorn على Ubuntu 14.04

المقدمة

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

في هذا الدليل ، سنشرح كيفية تثبيت وتكوين بعض المكونات على Ubuntu 14.04 لدعم وخدمة تطبيقات Django. سنقوم بإعداد قاعدة بيانات PostgreSQL بدلاً من استخدام قاعدة بيانات SQLite الافتراضية. سنقوم بتكوين خادم تطبيق Gunicorn للتفاعل مع تطبيقاتنا. سنقوم بعد ذلك بإعداد Nginx لعكس الوكيل إلى Gunicorn ، مما يتيح لنا الوصول إلى ميزات الأمان والأداء لخدمة تطبيقاتنا.

الشروط والأهداف

لإكمال هذا الدليل ، يجب أن يكون لديك نسخة خادم Ubuntu 14.04 جديدة مع مستخدم غير جذر له امتيازات sudo. يمكنك معرفة كيفية إعداد هذا عن طريق تشغيل دليل إعداد الخادم الأولي الخاص بنا.

سنقوم بتثبيت Django في بيئة افتراضية. يتيح تثبيت Django في بيئة خاصة بمشروعك أن تتم معالجة مشاريعك ومتطلباتها بشكل منفصل.

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

هيا بنا نبدأ.

تثبيت الحزم من مستودعات أوبونتو

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

أولاً ، قم بتحديث فهرس الحزمة المحلية ثم قم بتنزيل الحزم وتثبيتها:

sudo الحصول على التحديث
sudo apt-get install بيثون-بيث بيثون-ديف libpq-dev postgresql postgresql -تبرم nginx

سيؤدي ذلك إلى تثبيت pip ، وملفات تطوير Python اللازمة لبناء Gunicorn لاحقًا ، ونظام قاعدة بيانات Postgres والمكتبات اللازمة للتفاعل معها ، وخادم الويب Nginx.

إنشاء قاعدة بيانات PostgreSQL والمستخدم

سننتقل مباشرةً وننشئ مستخدم قاعدة بيانات وقاعدة بيانات لتطبيق Django الخاص بنا.

للعمل مع Postgres في التكوين الافتراضي الخاص به ، من الأفضل التغيير إلى مستخدم نظام postgres مؤقتًا. افعل ذلك الآن عن طريق الكتابة:

سودو سو - بوستجرس

عند التشغيل كمستخدم postgres ، يمكنك تسجيل الدخول مباشرة إلى جلسة PostgreSQL التفاعلية دون أي مصادقة إضافية عن طريق الكتابة:

psql

ستحصل على رسالة PostgreSQL حيث يمكننا إعداد متطلباتنا.

أولاً ، قم بإنشاء قاعدة بيانات لمشروعك:

إنشاء قاعدة بيانات myproject؛

يجب أن ينتهي كل أمر بنقطتين ، لذا تحقق من أن الأمر ينتهي بواحد إذا كنت تواجه مشكلات.

بعد ذلك ، قم بإنشاء مستخدم قاعدة بيانات لمشروعنا. تأكد من تحديد كلمة مرور آمنة:

إنشاء مستخدم myprojectuser مع كلمة المرور 'كلمة المرور'؛

الآن ، يمكننا منح مستخدمنا الجديد حق الوصول لإدارة قاعدة البيانات الجديدة الخاصة بنا:

منح جميع الامتيازات على قاعدة بيانات myproject to myprojectuser؛

عند الانتهاء ، اخرج من موجه PostgreSQL بكتابة:

\ ف

الآن ، اخرج من جلسة shell للمستخدم postgres للرجوع إلى جلسة shell للمستخدم العادي عن طريق كتابة:

خروج

إنشاء بيئة بيثون الافتراضية لمشروعك

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

للقيام بذلك ، نحتاج أولاً إلى الوصول إلى الأمر virtualenv. يمكننا تثبيت هذا مع pip:

sudo pip تثبيت virtualenv

مع تثبيت virtualenv ، يمكننا البدء في تشكيل مشروعنا. قم بإنشاء دليل ترغب فيه في الاحتفاظ بمشروعك والانتقال إلى الدليل بعد ذلك:

mkdir ~ / myproject
cd ~ / myproject

ضمن دليل المشروع ، قم بإنشاء بيئة بيثون الافتراضية عن طريق الكتابة:

virtualenv myprojectenv

سيؤدي هذا إلى إنشاء دليل يسمى myprojectenv داخل دليل myproject الخاص بك. في الداخل ، سيتم تثبيت إصدار محلي من Python وإصدار محلي من pip. يمكننا استخدام هذا لتثبيت وتكوين بيئة بيثون معزولة لمشروعنا.

قبل تثبيت متطلبات Python الخاصة بمشروعنا ، نحتاج إلى تنشيط البيئة الافتراضية. يمكنك القيام بذلك عن طريق الكتابة:

مصدر myprojectenv / بن / تفعيل

يجب تغيير مطالبتك للإشارة إلى أنك تعمل الآن ضمن بيئة بيثون الافتراضية. سيبدو شيء مثل هذا: (myprojectenv) user @ host: ~ / myproject $.

مع بيئتك الافتراضية النشطة ، قم بتثبيت Django و Gunicorn ومحول psycopg2 PostgreSQL مع المثيل المحلي لـ pip:

نقطة تثبيت django gunicorn psycopg2

إنشاء وتكوين مشروع Django جديد

مع تثبيت مكونات Python الخاصة بنا ، يمكننا إنشاء ملفات مشروع Django الفعلية.

إنشاء مشروع جانغو

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

django - admin.py startproject myproject.

ضبط إعدادات المشروع

أول شيء يجب أن نفعله مع ملفات المشروع التي تم إنشاؤها حديثًا هو ضبط الإعدادات. افتح ملف الإعدادات في محرر النصوص الخاص بك:

نانو myproject / settings.py

ابدأ بالعثور على القسم الذي يقوم بتكوين الوصول إلى قاعدة البيانات. وسوف تبدأ مع قواعد البيانات. التكوين في الملف لقاعدة بيانات SQLite. لقد أنشأنا بالفعل قاعدة بيانات PostgreSQL لمشروعنا ، لذلك نحن بحاجة إلى ضبط الإعدادات.

تغيير الإعدادات باستخدام معلومات قاعدة بيانات PostgreSQL الخاصة بك. نطلب من Django استخدام psycopg2adaptor الذي قمنا بتثبيته مع النقطة. نحتاج إلى إعطاء اسم قاعدة البيانات واسم مستخدم قاعدة البيانات وكلمة مرور اسم مستخدم قاعدة البيانات ، ثم تحديد أن قاعدة البيانات موجودة على الكمبيوتر المحلي. يمكنك ترك إعداد PORT كسلسلة فارغة:

قواعد البيانات = {
    'الإفتراضي': {
        'Engine': 'django.db.backends.postgresql_psycopg2' ،
        "NAME": "myproject" ،
        "المستخدم": "myprojectuser" ،
        "كلمة المرور": "كلمة المرور" ،
        "المضيف": "المضيف المحلي" ،
        'ميناء': ''،
    }
}

بعد ذلك ، انتقل لأسفل إلى أسفل الملف وقم بإضافة إعداد يشير إلى المكان الذي ينبغي وضع الملفات الثابتة فيه. يعد ذلك ضروريًا حتى يتمكن Nginx من معالجة طلبات هذه العناصر. يُخبر السطر التالي Django بوضعه في دليل يُسمى static في دليل المشروع الأساسي:

STATIC_ROOT = os.path.join (BASE_DIR ، "ثابت /")

احفظ وأغلق الملف عند الانتهاء.

إكمال إعداد المشروع الأولي

الآن ، يمكننا ترحيل مخطط قاعدة البيانات الأولية إلى قاعدة بيانات PostgreSQL الخاصة بنا باستخدام البرنامج النصي للإدارة:

cd ~ / myproject
. / Manage.py makemigrations
. / Manage.py تهاجر

قم بإنشاء مستخدم إداري للمشروع بكتابة:

./manage.py createuperuser

سيكون عليك تحديد اسم مستخدم ، وتقديم عنوان بريد إلكتروني ، واختيار كلمة مرور وتأكيدها.

يمكننا جمع كل المحتوى الثابت في موقع الدليل الذي قمنا بتكوينه عن طريق كتابة:

./adage.py collectstatic

سيكون لديك لتأكيد العملية. ثم يتم وضع الملفات الثابتة في دليل يسمى staticwinin في دليل المشروع الخاص بك.

أخيرًا ، يمكنك اختبار مشروعنا من خلال بدء تشغيل خادم تطوير Django باستخدام هذا الأمر:

./manage.py runerver 0.0.0.0:8000

في متصفح الويب الخاص بك ، قم بزيارة اسم مجال الخادم الخاص بك أو عنوان IP متبوعًا بما يلي: 8000:

HTTP: // server_domain_or_IP: 8000

يجب أن تشاهد صفحة فهرس Django الافتراضية:

إذا قمت بإلحاق / admin بنهاية عنوان URL في شريط العنوان ، فستتم مطالبتك باسم المستخدم الإداري وكلمة المرور اللذين قمت بإنشائهما باستخدام أمر createuperuser:

بعد المصادقة ، يمكنك الوصول إلى واجهة مسؤول Django الافتراضية:

عند الانتهاء من الاستكشاف ، اضغط على CTRL-C في إطار المحطة الطرفية لإغلاق خادم التطوير.

اختبار قدرة Gunicorn على خدمة المشروع

آخر شيء نريد القيام به قبل مغادرة بيئتنا الافتراضية هو اختبار Gunicorn للتأكد من أنه يمكن أن يخدم التطبيق. يمكننا القيام بذلك بسهولة عن طريق الكتابة:

cd ~ / myproject
gunicorn - ربط 0.0.0.0:8000 myproject.wsgi: التطبيق

سيبدأ هذا Gunicorn على نفس الواجهة التي كان يعمل عليها خادم تطوير Django. يمكنك العودة واختبار التطبيق مرة أخرى. لاحظ أن واجهة المشرف لن تحتوي على أي من التصميمات المطبقة لأن Gunicorn لا يعرف المحتوى الثابت المسؤول عن ذلك.

مررنا Gunicorn بوحدة نمطية عن طريق تحديد مسار الدليل النسبي إلى ملف wsgi.py في Django ، والذي يمثل نقطة الدخول إلى تطبيقنا ، باستخدام بناء جملة الوحدة النمطية لبيثون. داخل هذا الملف ، يتم تعريف وظيفة تسمى التطبيق ، والتي يتم استخدامها للتواصل مع التطبيق. لمعرفة المزيد حول مواصفات WSGI ، انقر هنا.

عند الانتهاء من الاختبار ، اضغط على CTRL-C في النافذة الطرفية لإيقاف Gunicorn.

لقد انتهينا الآن من تكوين تطبيق Django الخاص بنا. يمكننا التراجع عن بيئتنا الافتراضية عن طريق الكتابة:

عطل

إنشاء ملف غونثورن مغرور

لقد اختبرنا أن Gunicorn يمكن أن يتفاعل مع تطبيق Django الخاص بنا ، لكن يجب أن ننفذ طريقة أكثر قوة لبدء وإيقاف خادم التطبيق. لإنجاز هذا ، سنقوم بعمل سيناريو مغرور.

قم بإنشاء وفتح ملف Upstart لـ Gunicorn مع امتيازات sudo في محرر النصوص الخاص بك:

sudo nano /etc/init/gunicorn.conf

سنبدأ بسلسلة وصف بسيطة لبيان ما هو ملف خدمتنا. سننتقل بعد ذلك إلى تحديد مستويات تشغيل النظام حيث يجب أن تبدأ هذه الخدمة تلقائيًا. مستويات التشغيل العادية لتشغيل الخدمات هي 2 و 3 و 4 و 5. سنقوم بتشغيل خدمتنا عندما يكون النظام في أي منها. سنطلب منه التوقف عند تشغيله في أي مستوى تشغيل آخر (مثل عندما يقوم النظام بإعادة التشغيل أو إيقاف التشغيل أو في وضع المستخدم المفرد):

وصف "خادم تطبيق Gunicorn التعامل مع myproject"
ابدأ على مستوى التشغيل [2345]
توقف على مستوى التشغيل [! 2345]

بعد ذلك ، سنخبر Upstart بإعادة تشغيل الخدمة تلقائيًا في حالة فشلها. نريد أيضًا تحديد المستخدم والمجموعة للعمل ضمنهما. سنستخدم مستخدمنا العادي لأن جميع ملفاتنا مملوكة لهذا المستخدم. سنسمح لمجموعة بيانات www التي تنتمي إليها Nginx بأن تكون مالك المجموعة. نحتاج أيضًا إلى التغيير إلى دليل مشروعنا حتى يتم تنفيذ أوامر Gunicorn بشكل صحيح:

وصف "خادم تطبيق Gunicorn التعامل مع myproject"
ابدأ على مستوى التشغيل [2345]
توقف على مستوى التشغيل [! 2345]
بيضة
مستخدم setuid
setgid شبكة الاتصالات العالمية البيانات
chdir / الوطن / المستخدم / myproject

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

وصف "خادم تطبيق Gunicorn التعامل مع myproject"
ابدأ على مستوى التشغيل [2345]
توقف على مستوى التشغيل [! 2345]
بيضة
مستخدم setuid
setgid شبكة الاتصالات العالمية البيانات
chdir / الوطن / المستخدم / myproject
exec myprojectenv / bin / gunicorn - workers 3 - unix: /home/user/myproject/myproject.sock myproject.wsgi: application

عند الانتهاء ، احفظ وأغلق الملف.

ابدأ تشغيل خدمة Gunicorn بكتابة:

خدمة sudo gunicorn البداية

تكوين Nginx لتمرير الوكيل إلى Gunicorn

الآن بعد إعداد Gunicorn ، نحتاج إلى تهيئة Nginx لتمرير حركة المرور إلى العملية.

ابدأ بإنشاء وفتح كتلة خادم جديدة في الدليل المتاح لمواقع Nginx:

sudo نانو / الخ / nginx / مواقع المتاحة / myproject

في الداخل ، افتح كتلة خادم جديدة. سنبدأ بتحديد أن هذه الكتلة يجب أن تستمع على المنفذ العادي 80 وأنه يجب أن تستجيب لاسم مجال خادمنا أو عنوان IP الخاص به:

الخادم {
    الاستماع 80 ؛
    server_name server_domain_or_IP ؛
}

بعد ذلك ، سنخبر Nginx بتجاهل أي مشاكل في إيجاد فافيكون. سنخبرك أيضًا بمكان العثور على الأصول الثابتة التي جمعناها في دليلنا ~ / myproject / static. تحتوي كل هذه الملفات على بادئة URI قياسية بـ "/ ثابت" ، حتى نتمكن من إنشاء كتلة موقع لمطابقة تلك الطلبات:

الخادم {
    الاستماع 80 ؛
    server_name server_domain_or_IP ؛
    location = /favicon.ico {access_log off؛ log_not_found قبالة ؛ }
    الموقع / ثابت / {
        الجذر / المنزل / المستخدم / myproject ؛
    }
}

أخيرًا ، سنقوم بإنشاء كتلة موقع / {} لمطابقة جميع الطلبات الأخرى. داخل هذا الموقع ، سنقوم بتضمين ملف proxy_params القياسي المضمّن في تثبيت Nginx ، ثم سننقل حركة المرور إلى المقبس الذي أنشأته عملية Gunicorn لدينا:

الخادم {
    الاستماع 80 ؛
    server_name server_domain_or_IP ؛
    location = /favicon.ico {access_log off؛ log_not_found قبالة ؛ }
    الموقع / ثابت / {
        الجذر / المنزل / المستخدم / myproject ؛
    }
    موقعك / {
        تشمل proxy_params ؛
        proxy_pass http: // unix: /home/user/myproject/myproject.sock؛
    }
}

احفظ وأغلق الملف عند الانتهاء. الآن ، يمكننا تمكين الملف من خلال ربطه بدليل تمكين المواقع:

sudo ln -s / etc / nginx / المواقع المتاحة / myproject / etc / nginx / تمكين المواقع

اختبر تكوين Nginx الخاص بك لأخطاء بناء الجملة عن طريق الكتابة:

sudo nginx -t

إذا لم يتم الإبلاغ عن أي أخطاء ، فقم بالمتابعة وإعادة تشغيل Nginx بكتابة:

إعادة تشغيل خدمة sudo nginx

يجب أن تكون قادرًا الآن على الانتقال إلى مجال الخادم أو عنوان IP لعرض التطبيق الخاص بك.

المصدر: https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-14-04