البرمجة

نشر تطبيق جانغو للإنتاج

تطبيق عملي لتعلم جانغو – الجزء العاشر: نشر تطبيق جانغو في بيئة الإنتاج

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


الفروقات الجوهرية بين بيئة التطوير وبيئة الإنتاج

عند العمل على مشروع جانغو، يقوم المطور عادة باستخدام خادم التطوير المدمج في جانغو، والذي لا يُوصى باستخدامه في بيئة الإنتاج لأنه غير مهيأ للتعامل مع عدد كبير من الطلبات أو لتأمين التطبيق ضد الهجمات الخارجية.

بيئة التطوير:

  • مصممة للاختبار والتجريب.

  • تقدم رسائل خطأ تفصيلية عند حدوث الأعطال.

  • تُمكّن إعدادات التصحيح DEBUG=True.

  • لا تستخدم طبقات حماية قوية ضد الاختراق أو التسريب.

بيئة الإنتاج:

  • تعتمد على خوادم ويب قوية مثل Nginx أو Apache.

  • تعمل خلف WSGI مثل Gunicorn أو uWSGI.

  • تعتمد على قواعد صارمة للأمان.

  • يتم ضبط DEBUG=False.

  • يتم استخدام قواعد صارمة للجدران النارية، طبقات التشفير، ومحددات الوصول.


اختيار البنية التحتية المناسبة

قبل نشر تطبيق جانغو، يجب اختيار البيئة التي سيتم استضافته فيها. هناك العديد من الخيارات الممكنة، وتشمل:

نوع الاستضافة الوصف مميزات سلبيات
VPS (مثل DigitalOcean، Linode) خادم خاص افتراضي يمنحك تحكمًا كاملاً مرونة عالية، قابلية للتخصيص يتطلب معرفة تقنية متقدمة
خدمات PaaS (مثل Heroku، PythonAnywhere) منصات توفر نشرًا بسيطًا وسريعًا سهل الإعداد، مناسب للمبتدئين أقل تحكم، أداء محدود
خوادم سحابية (AWS EC2، Google Compute Engine) بنية سحابية شاملة بإعدادات مخصصة أداء عالي، مرونة كاملة تعقيد الإعداد، تكلفة أعلى
الحاويات (Docker، Kubernetes) تشغيل التطبيقات ضمن حاويات معزولة قابلية للنقل، إدارة بيئات متعددة يتطلب فهمًا للحاويات

يُعد استخدام VPS مع Nginx وGunicorn حلاً شائعًا جدًا لتطبيقات جانغو الجادة، لذا سيتم اعتماده كنموذج لهذا المقال.


إعداد بيئة الإنتاج على خادم Ubuntu

1. تحديث النظام وتثبيت الأدوات الأساسية

bash
sudo apt update && sudo apt upgrade sudo apt install python3-pip python3-dev libpq-dev nginx curl git

2. إنشاء مستخدم جديد لتشغيل التطبيق

bash
sudo adduser django_user sudo usermod -aG sudo django_user

3. تثبيت بيئة افتراضية وإعداد المشروع

bash
sudo apt install python3-venv cd /home/django_user python3 -m venv venv source venv/bin/activate

ثم يتم جلب المشروع من GitHub أو من مصدره المحلي.

bash
git clone https://github.com/username/project.git cd project pip install -r requirements.txt

4. إعداد إعدادات جانغو للإنتاج

في ملف settings.py يجب القيام بالتالي:

  • ضبط DEBUG = False

  • إضافة النطاق أو الـ IP الخاص بالخادم إلى ALLOWED_HOSTS

  • ضبط إعدادات DATABASES لاستخدام PostgreSQL أو MySQL حسب الحاجة.

  • إعداد STATIC_ROOT و MEDIA_ROOT لجمع الملفات الثابتة والوسائط.

python
DEBUG = False ALLOWED_HOSTS = ['example.com', 'www.example.com'] STATIC_ROOT = os.path.join(BASE_DIR, 'static/') MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')

5. جمع الملفات الثابتة

bash
python manage.py collectstatic

إعداد قاعدة البيانات في الإنتاج

يُفضّل عدم استخدام SQLite في بيئة الإنتاج. PostgreSQL أو MySQL هما خياران شائعان.

1. تثبيت PostgreSQL

bash
sudo apt install postgresql postgresql-contrib

2. إعداد قاعدة البيانات

bash
sudo -u postgres psql
sql
CREATE DATABASE projectdb; CREATE USER projectuser WITH PASSWORD 'your_password'; ALTER ROLE projectuser SET client_encoding TO 'utf8'; ALTER ROLE projectuser SET default_transaction_isolation TO 'read committed'; ALTER ROLE projectuser SET timezone TO 'UTC'; GRANT ALL PRIVILEGES ON DATABASE projectdb TO projectuser;

ثم يتم تحديث settings.py لربط التطبيق بقاعدة البيانات الجديدة.


إعداد Gunicorn لتشغيل التطبيق

Gunicorn هو واجهة WSGI تُستخدم لتشغيل تطبيقات جانغو بكفاءة.

تثبيت Gunicorn داخل البيئة الافتراضية

bash
pip install gunicorn

اختبار Gunicorn يدويًا

bash
gunicorn --workers 3 project.wsgi:application

إعداد ملف systemd لتشغيل Gunicorn كخدمة

bash
sudo nano /etc/systemd/system/gunicorn.service
ini
[Unit] Description=gunicorn daemon After=network.target [Service] User=django_user Group=www-data WorkingDirectory=/home/django_user/project ExecStart=/home/django_user/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/django_user/project.sock project.wsgi:application [Install] WantedBy=multi-user.target

ثم:

bash
sudo systemctl start gunicorn sudo systemctl enable gunicorn

إعداد Nginx كخادم أمامي

Nginx يعمل كوكيل عكسي (reverse proxy) لتوجيه الطلبات إلى Gunicorn.

إنشاء ملف إعداد لـ Nginx

bash
sudo nano /etc/nginx/sites-available/project
nginx
server { listen 80; server_name example.com www.example.com; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /home/django_user/project; } location /media/ { root /home/django_user/project; } location / { include proxy_params; proxy_pass http://unix:/home/django_user/project.sock; } }

تفعيل إعداد الموقع

bash
sudo ln -s /etc/nginx/sites-available/project /etc/nginx/sites-enabled sudo nginx -t sudo systemctl restart nginx

إعداد HTTPS باستخدام Let’s Encrypt

تثبيت Certbot

bash
sudo apt install certbot python3-certbot-nginx

إصدار الشهادة

bash
sudo certbot --nginx -d example.com -d www.example.com

ثم يتم تعديل إعدادات Nginx تلقائيًا لتضمين SSL، ويُفضَّل تفعيل التحديث التلقائي للشهادات:

bash
sudo certbot renew --dry-run

أمن بيئة الإنتاج

أحد أكبر التحديات في الإنتاج هو تأمين التطبيق ضد التهديدات. لذلك يجب مراعاة النقاط التالية:

  • تفعيل أمان CSP، X-Frame-Options، HSTS.

  • منع الوصول إلى لوحة الإدارة إلا من IPات محددة.

  • تأمين إعدادات البيئة باستخدام متغيرات بيئة وليس داخل ملفات الكود.

  • مراقبة السجلات والتحذيرات الأمنية.

  • الحد من عدد مرات الدخول الخاطئ (باستخدام مكتبات مثل django-axes).


مراقبة الأداء والخادم

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

  • supervisor: لإدارة العمليات وإعادة تشغيل الخدمات عند توقفها.

  • htop: لمراقبة استهلاك الموارد.

  • fail2ban: لحماية الخادم من محاولات الدخول العنيفة.

  • Sentry أو Rollbar: لتتبع الأخطاء في جانغو.

  • Prometheus + Grafana: لمراقبة مؤشرات الأداء على مستوى الخادم.


الخلاصة

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


المراجع:

  1. Django Deployment Checklist – https://docs.djangoproject.com/en/stable/howto/deployment/checklist/

  2. DigitalOcean Django Deployment Guide – https://www.digitalocean.com/community/tutorials/how-to-deploy-django-apps