تطبيق عملي لتعلم جانغو – الجزء العاشر: نشر تطبيق جانغو في بيئة الإنتاج
يُعتبر نشر تطبيق جانغو في بيئة الإنتاج خطوة أساسية بعد الانتهاء من تطويره، وهي التي تحدد ما إذا كان المشروع سيعمل بشكل آمن ومستقر للمستخدمين الفعليين. فبيئة التطوير تختلف جوهريًا عن بيئة الإنتاج من حيث الأمان، الأداء، وضبط الإعدادات، ويجب أخذ ذلك في الاعتبار لتجنب المخاطر المحتملة. في هذا الجزء العاشر من سلسلة “تطبيق عملي لتعلم جانغو”، سيتم التطرق بشكل مفصل إلى خطوات إعداد بيئة الإنتاج ونشر تطبيق جانغو بشكل فعلي.
الفروقات الجوهرية بين بيئة التطوير وبيئة الإنتاج
عند العمل على مشروع جانغو، يقوم المطور عادة باستخدام خادم التطوير المدمج في جانغو، والذي لا يُوصى باستخدامه في بيئة الإنتاج لأنه غير مهيأ للتعامل مع عدد كبير من الطلبات أو لتأمين التطبيق ضد الهجمات الخارجية.
بيئة التطوير:
-
مصممة للاختبار والتجريب.
-
تقدم رسائل خطأ تفصيلية عند حدوث الأعطال.
-
تُمكّن إعدادات التصحيح
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. تحديث النظام وتثبيت الأدوات الأساسية
bashsudo apt update && sudo apt upgrade sudo apt install python3-pip python3-dev libpq-dev nginx curl git
2. إنشاء مستخدم جديد لتشغيل التطبيق
bashsudo adduser django_user sudo usermod -aG sudo django_user
3. تثبيت بيئة افتراضية وإعداد المشروع
bashsudo apt install python3-venv
cd /home/django_user
python3 -m venv venv
source venv/bin/activate
ثم يتم جلب المشروع من GitHub أو من مصدره المحلي.
bashgit 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لجمع الملفات الثابتة والوسائط.
pythonDEBUG = 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. جمع الملفات الثابتة
bashpython manage.py collectstatic
إعداد قاعدة البيانات في الإنتاج
يُفضّل عدم استخدام SQLite في بيئة الإنتاج. PostgreSQL أو MySQL هما خياران شائعان.
1. تثبيت PostgreSQL
bashsudo apt install postgresql postgresql-contrib
2. إعداد قاعدة البيانات
bashsudo -u postgres psql
sqlCREATE 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 داخل البيئة الافتراضية
bashpip install gunicorn
اختبار Gunicorn يدويًا
bashgunicorn --workers 3 project.wsgi:application
إعداد ملف systemd لتشغيل Gunicorn كخدمة
bashsudo 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
ثم:
bashsudo systemctl start gunicorn
sudo systemctl enable gunicorn
إعداد Nginx كخادم أمامي
Nginx يعمل كوكيل عكسي (reverse proxy) لتوجيه الطلبات إلى Gunicorn.
إنشاء ملف إعداد لـ Nginx
bashsudo nano /etc/nginx/sites-available/project
nginxserver {
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;
}
}
تفعيل إعداد الموقع
bashsudo ln -s /etc/nginx/sites-available/project /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx
إعداد HTTPS باستخدام Let’s Encrypt
تثبيت Certbot
bashsudo apt install certbot python3-certbot-nginx
إصدار الشهادة
bashsudo certbot --nginx -d example.com -d www.example.com
ثم يتم تعديل إعدادات Nginx تلقائيًا لتضمين SSL، ويُفضَّل تفعيل التحديث التلقائي للشهادات:
bashsudo certbot renew --dry-run
أمن بيئة الإنتاج
أحد أكبر التحديات في الإنتاج هو تأمين التطبيق ضد التهديدات. لذلك يجب مراعاة النقاط التالية:
-
تفعيل أمان CSP، X-Frame-Options، HSTS.
-
منع الوصول إلى لوحة الإدارة إلا من IPات محددة.
-
تأمين إعدادات البيئة باستخدام متغيرات بيئة وليس داخل ملفات الكود.
-
مراقبة السجلات والتحذيرات الأمنية.
-
الحد من عدد مرات الدخول الخاطئ (باستخدام مكتبات مثل django-axes).
مراقبة الأداء والخادم
تشغيل تطبيق في بيئة الإنتاج يتطلب متابعة مستمرة، ويمكن استخدام الأدوات التالية:
-
supervisor: لإدارة العمليات وإعادة تشغيل الخدمات عند توقفها.
-
htop: لمراقبة استهلاك الموارد.
-
fail2ban: لحماية الخادم من محاولات الدخول العنيفة.
-
Sentry أو Rollbar: لتتبع الأخطاء في جانغو.
-
Prometheus + Grafana: لمراقبة مؤشرات الأداء على مستوى الخادم.
الخلاصة
يعد نشر تطبيق جانغو في بيئة الإنتاج عملية معقدة نسبيًا تتطلب إعدادات دقيقة ومتقدمة لضمان الأمان، الأداء العالي، واستمرارية الخدمة. من المهم الفصل الصارم بين بيئة التطوير والإنتاج، واستخدام خوادم مناسبة، وربط التطبيق بخدمات قوية مثل Gunicorn وNginx، وتفعيل الشهادات الأمنية. كما أن المراقبة المستمرة، والتحديثات الدورية، وتطبيق مبادئ DevOps، تشكل جزءًا حيويًا من دورة حياة التطبيق في الإنتاج.
المراجع:
-
Django Deployment Checklist – https://docs.djangoproject.com/en/stable/howto/deployment/checklist/
-
DigitalOcean Django Deployment Guide – https://www.digitalocean.com/community/tutorials/how-to-deploy-django-apps

