تشغيل مشروع Django على Ubuntu سيرفر

تشغيل مشروع Django على Ubuntu سيرفر

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

تتنوع خيارات استضافة تطبيقات Django، إلا أن الاعتماد على بيئة Linux يظل الخيار الأكثر شيوعًا لما يوفره من مرونة وتحكم كامل في مكونات النظام. وفي هذا المقال، سنتعرف على خطوات نشر تطبيق Django على سيرفر يعمل بنظام Linux، باستخدام قاعدة بيانات PostgreSQL، مع الاعتماد على Gunicorn كخادم WSGI، وNginx كـ reverse proxy لإدارة طلبات المستخدمين وتوجيهها بكفاءة.

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

إذا كنت تمتلك تطبيق Django وترغب في نقله إلى بيئة Production موثوقة، فهذا المقال سيساعدك خطوة بخطوة على تحقيق ذلك.

1. تجهيز السيرفر بنظام Ubuntu

قبل البدء بنشر التطبيق، يجب التأكد من أن السيرفر جاهز لاستقبال بيئة العمل المطلوبة. في هذا الجزء، سنقوم بتحديث النظام، وتثبيت الأدوات الأساسية التي يحتاجها مشروع Django مع PostgreSQL وGunicorn وNginx.

تحديث النظام:

للحصول على آخر تحديثات الأمان والحزم، نفّذ الأوامر التالية:

sudo apt update && sudo apt upgrade -y

تثبيت الأدوات الأساسية:

نقوم بتثبيت Python 3 ومكتبات التطوير اللازمة وPostgreSQL وNginx:

sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx curl -y

تثبيت virtualenv (اختياري وموصى به):

يفضل دائمًا عزل بيئة المشروع باستخدام virtual environment:

sudo pip3 install virtualenv

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

إعداد قاعدة بيانات PostgreSQL

يعتمد الكثير من مطوري Django على PostgreSQL لكونها قاعدة بيانات قوية وآمنة تدعم التعامل مع كميات كبيرة من البيانات، وتوفر إمكانيات متقدمة مثل التعامل مع البيانات الجغرافية والمعاملات المعقدة.

في هذه الخطوة، سنقوم بإنشاء قاعدة بيانات ومستخدم خاص بالتطبيق ومنحه الصلاحيات المناسبة.

الدخول إلى PostgreSQL:

أولًا، ندخل إلى لوحة تحكم PostgreSQL كمستخدم postgres الافتراضي:

sudo -u postgres psql

إنشاء قاعدة البيانات:

بعد الدخول إلى الطرفية الخاصة بـ PostgreSQL، ننفذ الأمر التالي لإنشاء قاعدة بيانات جديدة:

CREATE DATABASE mydb;

يمكنك تغيير mydb إلى اسم القاعدة المناسب لتطبيقك.

إنشاء مستخدم جديد:

ننشئ مستخدمًا جديدًا يمكنه الوصول إلى قاعدة البيانات:

CREATE USER myuser WITH PASSWORD 'mypassword';

استبدل myuser باسم المستخدم وmypassword بكلمة مرور قوية.

ضبط إعدادات الاتصال:

لضمان توافق إعدادات المستخدم مع Django:

ALTER ROLE myuser SET client_encoding TO 'utf8';
ALTER ROLE myuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE myuser SET timezone TO 'UTC';

منح الصلاحيات:

نعطي المستخدم الجديد الصلاحيات الكاملة على قاعدة البيانات:

GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;

الخروج من PostgreSQL:

\q

إعداد الاتصال في Django:

ننتقل الآن إلى ملف settings.py داخل مشروع Django ونعدل إعدادات الاتصال بقاعدة البيانات:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydb',
        'USER': 'myuser',
        'PASSWORD': 'mypassword',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

بهذا يكون التطبيق جاهزًا للاتصال بقاعدة البيانات الجديدة.

3. تجهيز بيئة المشروع على السيرفر

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

نسخ ملفات المشروع إلى السيرفر:

إذا كان المشروع موجودًا على جهازك المحلي، يمكن نقله إلى السيرفر باستخدام scp:

scp -r /path/to/your/project username@server_ip:/home/username/

أو عبر Git إذا كان المشروع على مستودع:

git clone https://github.com/yourusername/yourproject.git

الدخول إلى مجلد المشروع:

cd /home/username/yourproject

إنشاء Virtual Environment:

لضمان تشغيل المتطلبات الخاصة بالتطبيق بمعزل عن نظام السيرفر:

python3 -m venv venv

تفعيل Virtual Environment:

source venv/bin/activate

تثبيت متطلبات المشروع:

عادةً ما تكون المتطلبات في ملف requirements.txt داخل مجلد المشروع:

pip install -r requirements.txt

تطبيق Migrations:

بعد تثبيت الحزم، ننفّذ أوامر Django لتجهيز قاعدة البيانات:

python manage.py migrate

إنشاء superuser:

للدخول إلى لوحة تحكم Django:

python manage.py createsuperuser

سيُطلب منك إدخال اسم المستخدم، البريد الإلكتروني، وكلمة المرور.

اختبار تشغيل التطبيق:

نتأكد من أن كل شيء يعمل قبل الانتقال إلى Gunicorn:

python manage.py runserver 0.0.0.0:8000

ثم زيارة:
http://your_server_ip:8000
إذا ظهرت صفحة Django بنجاح، نكون جاهزين للانتقال إلى إعداد Gunicorn.

ممتاز — ننتقل إلى النقطة الرابعة:


4. إعداد وتشغيل Gunicorn

يعد Gunicorn (Green Unicorn) خادم WSGI خفيف وسريع لتشغيل تطبيقات Python مثل Django في بيئة Production.
سنقوم في هذه الخطوة بتثبيت Gunicorn داخل البيئة الافتراضية، وتجهيز إعداداته لتشغيل المشروع.

تثبيت Gunicorn:

ضمن الـ virtual environment الخاص بالمشروع:

pip install gunicorn

تجربة تشغيل التطبيق باستخدام Gunicorn:

لتجربة تشغيل التطبيق بشكل مبدئي:

gunicorn --workers 3 --bind 0.0.0.0:8000 yourproject.wsgi:application
  • --workers 3: عدد العمال (يمكن زيادته حسب مواصفات السيرفر)

  • yourproject.wsgi:application: استبدل yourproject باسم مجلد المشروع الرئيسي

إذا عمل التطبيق بشكل صحيح، يمكن إيقاف العملية (Ctrl + C) وننتقل إلى إنشاء خدمة systemd.

إنشاء خدمة systemd لتشغيل Gunicorn:

حتى يعمل Gunicorn تلقائيًا مع بدء تشغيل السيرفر ويتم التحكم به كخدمة.

أنشئ ملف خدمة:

sudo nano /etc/systemd/system/gunicorn.service

وأضف بداخله:

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=username
Group=www-data
WorkingDirectory=/home/username/yourproject
ExecStart=/home/username/yourproject/venv/bin/gunicorn --workers 3 --bind unix:/home/username/yourproject/gunicorn.sock yourproject.wsgi:application

[Install]
WantedBy=multi-user.target
  • استبدل username وyourproject حسب إعدادك.

إعادة تحميل systemd وتشغيل الخدمة:

sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl enable gunicorn

التحقق من حالة الخدمة:

sudo systemctl status gunicorn

إذا كانت الحالة active (running) فكل شيء سليم.

إعداد Nginx كـ Reverse Proxy

يعمل Nginx كـ reverse proxy أمام Gunicorn، حيث يستقبل الطلبات من المستخدمين ويوجهها إلى Gunicorn، مع تقديم ميزات مثل إدارة الاتصالات، التخزين المؤقت، وضبط الحماية.

تثبيت Nginx (إذا لم يتم تثبيته):

sudo apt install nginx -y

إعداد ملف إعدادات Nginx للمشروع:

أنشئ ملف إعدادات جديد للموقع:

sudo nano /etc/nginx/sites-available/yourproject

وأضف بداخله:

server {
    listen 80;
    server_name your_server_ip_or_domain;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/username/yourproject;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/username/yourproject/gunicorn.sock;
    }
}
  • استبدل your_server_ip_or_domain بعنوان السيرفر أو اسم النطاق.

  • استبدل username وyourproject حسب مسار مشروعك.

تفعيل ملف الموقع:

قم بربط الملف بمجلد sites-enabled:

sudo ln -s /etc/nginx/sites-available/yourproject /etc/nginx/sites-enabled

اختبار إعداد Nginx:

للتحقق من عدم وجود أخطاء:

sudo nginx -t

إعادة تشغيل Nginx:

لتطبيق التعديلات:

sudo systemctl restart nginx

السماح بالاتصالات عبر جدار الحماية:

إن كان ufw مفعّلًا:

sudo ufw allow 'Nginx Full'

الآن أصبح تطبيق Django يعمل على السيرفر من خلال Gunicorn وNginx.

بهذا نكون قد أكملنا خطوات نشر تطبيق Django احترافي على سيرفر Linux يعمل بنظام Ubuntu، مع إعداد قاعدة بيانات PostgreSQL، وضبط Gunicorn كخادم WSGI لتشغيل التطبيق، وتهيئة Nginx كـ reverse proxy لإدارة الطلبات بكفاءة.

توفير بيئة Production مستقرة وآمنة لمشروعات Django يتطلب ضبط كل طبقة من طبقات العمل بعناية، والتأكد من توافق المكونات معًا لتحقيق الأداء المطلوب. يمكنك لاحقًا تحسين الإعدادات بإضافة SSL عبر Let's Encrypt لحماية الاتصال بين المستخدم والسيرفر، وتفعيل أدوات مراقبة للأداء والخدمات.

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

حول المحتوى:

شرح خطوات تشغيل مشروع مبني باستخدام Django عن طريق Nginx, Gunicorn والداتابيس Postergesql