حول المحتوى:
شرح خطوات تشغيل مشروع مبني باستخدام Django عن طريق Nginx, Gunicorn والداتابيس Postergesql
يعد إطار العمل Django من أشهر أطر تطوير تطبيقات الويب بلغة Python، حيث يوفر بيئة متكاملة لبناء تطبيقات قوية وآمنة وقابلة للتوسع. ومع انتهاء مرحلة تطوير التطبيق محليًا، تأتي الخطوة الأهم وهي نشره على سيرفر حقيقي ليكون متاحًا للمستخدمين.
تتنوع خيارات استضافة تطبيقات Django، إلا أن الاعتماد على بيئة Linux يظل الخيار الأكثر شيوعًا لما يوفره من مرونة وتحكم كامل في مكونات النظام. وفي هذا المقال، سنتعرف على خطوات نشر تطبيق Django على سيرفر يعمل بنظام Linux، باستخدام قاعدة بيانات PostgreSQL، مع الاعتماد على Gunicorn كخادم WSGI، وNginx كـ reverse proxy لإدارة طلبات المستخدمين وتوجيهها بكفاءة.
سنتناول في هذا الدليل كل مرحلة بالتفصيل، بدءًا من إعداد السيرفر وتهيئة البيئة المناسبة، مرورًا بتجهيز قاعدة البيانات وربطها بالتطبيق، وصولًا إلى ضبط Gunicorn وNginx ليعملا معًا بسلاسة لتقديم التطبيق للمستخدمين بشكل آمن ومستقر.
إذا كنت تمتلك تطبيق Django وترغب في نقله إلى بيئة Production موثوقة، فهذا المقال سيساعدك خطوة بخطوة على تحقيق ذلك.
قبل البدء بنشر التطبيق، يجب التأكد من أن السيرفر جاهز لاستقبال بيئة العمل المطلوبة. في هذا الجزء، سنقوم بتحديث النظام، وتثبيت الأدوات الأساسية التي يحتاجها مشروع 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
يفضل دائمًا عزل بيئة المشروع باستخدام virtual environment:
sudo pip3 install virtualenv
بهذا نكون قد أعددنا السيرفر الأساسي وأضفنا الأدوات المطلوبة لتثبيت الحزم والعمل على مشروع Django.
يعتمد الكثير من مطوري Django على 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;
\q
ننتقل الآن إلى ملف settings.py
داخل مشروع Django ونعدل إعدادات الاتصال بقاعدة البيانات:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydb',
'USER': 'myuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '5432',
}
}
بهذا يكون التطبيق جاهزًا للاتصال بقاعدة البيانات الجديدة.
بعد الانتهاء من إعداد قاعدة البيانات، حان وقت نقل ملفات المشروع إلى السيرفر وتجهيز البيئة الخاصة به لتثبيت المتطلبات اللازمة وتشغيل التطبيق بشكل معزول وآمن.
إذا كان المشروع موجودًا على جهازك المحلي، يمكن نقله إلى السيرفر باستخدام 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
لضمان تشغيل المتطلبات الخاصة بالتطبيق بمعزل عن نظام السيرفر:
python3 -m venv venv
source venv/bin/activate
عادةً ما تكون المتطلبات في ملف requirements.txt
داخل مجلد المشروع:
pip install -r requirements.txt
بعد تثبيت الحزم، ننفّذ أوامر Django لتجهيز قاعدة البيانات:
python manage.py migrate
للدخول إلى لوحة تحكم Django:
python manage.py createsuperuser
سيُطلب منك إدخال اسم المستخدم، البريد الإلكتروني، وكلمة المرور.
نتأكد من أن كل شيء يعمل قبل الانتقال إلى Gunicorn:
python manage.py runserver 0.0.0.0:8000
ثم زيارة:http://your_server_ip:8000
إذا ظهرت صفحة Django بنجاح، نكون جاهزين للانتقال إلى إعداد Gunicorn.
يعد Gunicorn (Green Unicorn) خادم WSGI خفيف وسريع لتشغيل تطبيقات Python مثل Django في بيئة Production.
سنقوم في هذه الخطوة بتثبيت Gunicorn داخل البيئة الافتراضية، وتجهيز إعداداته لتشغيل المشروع.
ضمن الـ virtual environment الخاص بالمشروع:
pip install gunicorn
لتجربة تشغيل التطبيق بشكل مبدئي:
gunicorn --workers 3 --bind 0.0.0.0:8000 yourproject.wsgi:application
--workers 3
: عدد العمال (يمكن زيادته حسب مواصفات السيرفر)
yourproject.wsgi:application
: استبدل yourproject
باسم مجلد المشروع الرئيسي
إذا عمل التطبيق بشكل صحيح، يمكن إيقاف العملية (Ctrl + C) وننتقل إلى إنشاء خدمة systemd.
حتى يعمل 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
حسب إعدادك.
sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl status gunicorn
إذا كانت الحالة active (running)
فكل شيء سليم.
يعمل Nginx كـ reverse proxy أمام Gunicorn، حيث يستقبل الطلبات من المستخدمين ويوجهها إلى Gunicorn، مع تقديم ميزات مثل إدارة الاتصالات، التخزين المؤقت، وضبط الحماية.
sudo apt install nginx -y
أنشئ ملف إعدادات جديد للموقع:
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
للتحقق من عدم وجود أخطاء:
sudo nginx -t
لتطبيق التعديلات:
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
مساحة اعلانية
HTTP هو بروتوكول يستخدم لنقل البيانات بين المتصفحات والخوادم.