انتقل إلى المحتوى الرئيسي

إنشاء خدمة Systemd في لينكس لنشر موقع Django باستخدام Nginx

نُشر في

  • معلوماتية
  • ادوات برمجة
  • لينكس
  • دجانغو
  • خادم Nginx

إنشاء خدمة Systemd في لينكس لنشر موقع Django باستخدام Nginx

 

جدول المحتويات

  1. الملخص
  2. المقدمة
  3. بنية النظام
  4. إعداد البيئة
  5. إنشاء خدمة Systemd لتطبيق Django
  6. تهيئة خادم Nginx
  7. تشغيل الخدمة وتفعيلها تلقائياً
  8. الأمان والأذونات
  9. الخلاصة
  10. المراجع

 

1. الملخص

يقدم هذا المقال دليلاً كاملاً لنشر تطبيق ويب مبني بإطار العمل Django خلف خادم Nginx على نظام لينكس، باستخدام systemd لإدارة التطبيق كخدمة خلفية دائمة. يضمن هذا النهج التشغيل التلقائي عند إقلاع النظام، وتحسين مراقبة العمليات، وتكاملاً أفضل لسجلات الأحداث (Logs)، وهو أمر أساسي للبيئات الإنتاجية الجاهزة.

2. المقدمة

يعتبر Django إطار عمل عالي المستوى بلغة بايثون يُستخدم على نطاق واسع للتطوير السريع لمواقع الويب. عند النشر في بيئة الإنتاج، من الممارسات القياسية استخدام وكيل عكسي (Reverse Proxy) مثل Nginx أمام خادم WSGI مثل Gunicorn. عبر إنشاء خدمة systemd خاصة بـ Django، يصبح التطبيق أسهل في الإدارة وأكثر استقراراً، مع إمكانية التشغيل التلقائي عند إقلاع النظام.

3. بنية النظام

العميل ⟵ Nginx (وكيل عكسي) ⟵ Gunicorn (خادم WSGI) ⟵ تطبيق Django

  • نظام التشغيل: لينكس (Debian أو Ubuntu أو غيرها)
  • خادم الويب: Nginx
  • خادم التطبيق: Gunicorn
  • التطبيق: Django

4. إعداد البيئة

1. تثبيت الحزم المطلوبة:

تثبيت الحزم المطلوبة
sudo apt update
sudo apt install python3 python3-pip python3-venv nginx

2. إعداد مشروع Django:

إعداد مشروع Django
mkdir ~/myproject
cd ~/myproject
python3 -m venv venv
source venv/bin/activate
pip install django gunicorn
django-admin startproject myproject .

3. اختبار Gunicorn يدوياً:

اختبار Gunicorn
gunicorn --bind 127.0.0.1:8000 myproject.wsgi:application

5. إنشاء خدمة Systemd لتطبيق Django

1. إنشاء ملف خدمة Gunicorn:

إنشاء ملف خدمة systemd
sudo nano /etc/systemd/system/myproject.service

2. لصق التكوين التالي وتعديله:

/etc/systemd/system/myproject.service
[Unit]
Description=Gunicorn daemon for Django project
After=network.target

[Service]
User=yourusername
Group=www-data
WorkingDirectory=/home/yourusername/myproject
ExecStart=/home/yourusername/myproject/venv/bin/gunicorn \
          --access-logfile - \
          --workers 3 \
          --bind unix:/run/gunicorn.sock \
          myproject.wsgi:application

[Install]
WantedBy=multi-user.target

6. تهيئة خادم Nginx

1. إنشاء ملف تكوين جديد لـ Nginx:

إنشاء ملف تكوين Nginx
sudo nano /etc/nginx/sites-available/myproject

2. إضافة كتلة الخادم (Server Block) التالية:

/etc/nginx/sites-available/myproject
server {
    listen 80;
    server_name your_domain.com;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/yourusername/myproject;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }
}

3. تفعيل الموقع وإعادة تشغيل Nginx:

تفعيل الموقع وإعادة تشغيل Nginx
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx

7. تشغيل الخدمة وتفعيلها تلقائياً

قم ببدء تشغيل خدمة systemd وتفعيلها لتبدأ تلقائياً مع إقلاع النظام:

تشغيل وتفعيل الخدمة
sudo systemctl start myproject
sudo systemctl enable myproject
sudo systemctl status myproject

8. الأمان والأذونات

  • تأكد من أن أذونات الملف /run/gunicorn.sock تسمح لخادم Nginx بالوصول إليه.
  • يُنصح باستخدام ufw أو firewalld لتقييد المنافذ المفتوحة.
  • استخدم Let's Encrypt لتأمين الاتصال عبر بروتوكول HTTPS باستخدام Certbot:
إعداد شهادة SSL بواسطة Certbot
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your_domain.com

9. الخلاصة

يوفر نشر Django باستخدام systemd و Gunicorn و Nginx نمط نشر قوي ومناسب للبيئات الإنتاجية. تضمن هذه المعمارية:

  • إدارة دورة حياة الخدمة بمرونة واستقرار عاليين
  • معالجة سريعة وعالية الأداء للطلبات عبر Nginx كوكيل عكسي
  • بيئة إنتاجية آمنة وقابلة للتوسع

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

10. المراجع

التعليقات 0

لا توجد تعليقات بعد.

اكتب تعليقاً