نشر Python/Django: بيئة إنتاج مع Gunicorn و Nginx
دليل نشر تطبيقات Python/Django على VPS. إعداد virtualenv، إعدادات Django للإنتاج، خادم Gunicorn WSGI، وكيل Nginx العكسي، خدمة systemd وإدارة الملفات الثابتة.
جدول المحتويات
نشر Python/Django: بيئة إنتاج مع Gunicorn و Nginx
Django هو إطار عمل الويب الأكثر شيوعاً في Python. المزيج المعياري للنشر في الإنتاج هو Gunicorn (خادم WSGI) و Nginx (وكيل عكسي). يرشدك هذا الدليل خلال نشر تطبيق Django على VPS من الصفر.
إعداد Python و Virtualenv
# تحديث النظام
sudo apt update && sudo apt upgrade -y
# تثبيت Python 3 و pip
sudo apt install python3 python3-pip python3-venv python3-dev -y
# إنشاء مجلد التطبيق
sudo mkdir -p /var/www/mydjango
sudo chown $USER:$USER /var/www/mydjango
cd /var/www/mydjango
# إنشاء البيئة الافتراضية
python3 -m venv venv
# تفعيل البيئة الافتراضية
source venv/bin/activate
# تحديث pip
pip install --upgrade pip
استخدم بيئة افتراضية منفصلة لكل مشروع Django. هذا يمنع تعارض التبعيات ويعزل المشاريع.
نقل التطبيق إلى الخادم
cd /var/www
git clone https://github.com/user/mydjango.git
cd mydjango
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
pip install gunicorn
إعدادات Django للإنتاج
import os
DEBUG = False
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')
ALLOWED_HOSTS = os.environ.get('DJANGO_ALLOWED_HOSTS', '').split(',')
# رؤوس الأمان
SECURE_SSL_REDIRECT = True
SECURE_HSTS_SECONDS = 31536000
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
# الملفات الثابتة
STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'staticfiles'
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'
إعداد قاعدة البيانات (PostgreSQL)
sudo apt install postgresql postgresql-contrib -y
sudo -u postgres psql
CREATE DATABASE mydb;
CREATE USER dbuser WITH PASSWORD 'كلمة-مرور-قوية';
ALTER ROLE dbuser SET client_encoding TO 'utf8';
ALTER ROLE dbuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE dbuser SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE mydb TO dbuser;
\q
pip install psycopg2-binary
python manage.py migrate
python manage.py createsuperuser
python manage.py collectstatic --noinput
إعداد Gunicorn
# gunicorn.conf.py
bind = 'unix:/run/gunicorn/gunicorn.sock'
workers = 3 # (2 * أنوية CPU) + 1
worker_class = 'sync'
timeout = 30
max_requests = 1000
preload_app = True
user = 'www-data'
group = 'www-data'
errorlog = '/var/log/gunicorn/error.log'
accesslog = '/var/log/gunicorn/access.log'
ملف خدمة systemd
[Unit]
Description=Gunicorn daemon for Django
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/mydjango
ExecStart=/var/www/mydjango/venv/bin/gunicorn \
--config /var/www/mydjango/gunicorn.conf.py \
myproject.wsgi:application
KillMode=mixed
TimeoutStopSec=5
PrivateTmp=true
EnvironmentFile=/var/www/mydjango/.env
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
إعداد وكيل Nginx العكسي
server {
listen 80;
server_name example.com www.example.com;
location /static/ {
alias /var/www/mydjango/staticfiles/;
expires 30d;
add_header Cache-Control "public, immutable";
}
location /media/ {
alias /var/www/mydjango/media/;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn/gunicorn.sock;
proxy_read_timeout 300;
}
client_max_body_size 100M;
}
sudo ln -s /etc/nginx/sites-available/mydjango /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
شهادة SSL
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com
سير عمل النشر
cd /var/www/mydjango
source venv/bin/activate
git pull origin main
pip install -r requirements.txt
python manage.py migrate
python manage.py collectstatic --noinput
sudo systemctl restart gunicorn
على خوادم REXE، يُوصى بـ 1 جيجابايت ذاكرة RAM على الأقل لـ Django. اضبط عدد عمال Gunicorn بناءً على أنوية CPU: (2 × CPU) + 1.
الخلاصة
تطبيق Django الخاص بك يعمل الآن في الإنتاج مع خادم Gunicorn WSGI ووكيل Nginx العكسي. بفضل خدمة systemd، يبدأ التطبيق تلقائياً عند إعادة تشغيل الخادم.
مقالات ذات صلة
نشر تطبيق Node.js: دليل PM2 و Nginx
دليل شامل لنشر تطبيقات Node.js على VPS. تثبيت Node.js عبر nvm، مدير العمليات PM2، وكيل Nginx العكسي، شهادة SSL وإدارة متغيرات البيئة.
نشر تطبيق PHP: دليل LAMP و LEMP Stack
دليل شامل لنشر تطبيقات PHP على VPS. مقارنة LAMP و LEMP، إعداد Apache/Nginx + PHP-FPM + MySQL، تهيئة المضيف الافتراضي وإدارة إصدارات PHP.
تثبيت WordPress وتحسينه: دليل VPS
دليل تثبيت وتحسين WordPress على VPS. إعداد LEMP Stack، إعدادات wp-config.php، صلاحيات الملفات، SSL، تحسين أداء OPcache وتعزيز الأمان.