استقرار پروژه Django روی سرور واقعی (Nginx + Gunicorn)
برای استقرار یک پروژه Django بر روی سرور واقعی، نیاز به تنظیم یک محیط عملیاتی مناسب داریم. در این مقاله، نحوه استقرار یک پروژه Django با استفاده از Nginx و Gunicorn را بهصورت کامل توضیح میدهیم. این تنظیمات شامل پیادهسازی و بهینهسازی عملکرد سرور، امنیت، و مدیریت درخواستهای ورودی است.
چرا Nginx و Gunicorn؟
Nginx یک سرور وب قدرتمند و کارآمد است که برای پردازش درخواستهای HTTP مورد استفاده قرار میگیرد. اما Nginx بهصورت خودکار نمیتواند برنامههای Python را اجرا کند. Gunicorn یک سرور ورودی (WSGI) برای پروژههای Python است که با Nginx در ارتباط است و درخواستهای HTTP را به Django تحویل میدهد.
| ویژگی | Nginx | Gunicorn |
|---|---|---|
| نوع سرور | HTTP Server | WSGI Server |
| عملکرد | مدیریت درخواستها و فایلهای استاتیک | اجرای برنامههای Python |
| نحوه ارتباط با Django | درخواستها را به Gunicorn ارسال میکند | Django را اجرا میکند |
مرحله اول: آمادهسازی سرور
قبل از استقرار، نیاز به تنظیمات اولیه داریم:
- بررسی و راهاندازی سرور Ubuntu 20.04
- نصب Python و pip
- نصب Django و بستههای مورد نیاز
در این مرحله، پروژه Django را در محیط سرور دانلود کرده و وابستگیها را نصب میکنیم.
sudo apt update
sudo apt install python3-pip python3-dev libpq-dev nginx
pip3 install virtualenv
python3 -m venv myproject
source myproject/bin/activate
pip install django gunicorn
این دستورات، Ubuntu را آپدیت میکنند، Python و pip را نصب میکنند، سپس محیط مجازی (Virtual Environment) برای پروژه ایجاد کرده و Django و Gunicorn را نصب میکنند. محیط مجازی بهمنظور جدا کردن بستههای پروژه، تضمین امنیت و سازگاری استفاده میشود.
مرحله دوم: تنظیمات Django
پس از نصب، باید فایل تنظیمات Django را برای محیط تولید بهروز کنیم. این شامل تنظیمات امنیتی و مدیریت فایلهای استاتیک است.
# settings.py
ALLOWED_HOSTS = ['your_domain_or_ip']
DEBUG = False
STATIC_ROOT = '/var/www/myproject/static/'
در این قطعه، `ALLOWED_HOSTS` را به آدرس دامنه یا IP سرور تنظیم کردهایم تا Django فقط درخواستهای معتبر را پاسخ دهد. `DEBUG = False` برای حذف اطلاعات اشکالزدایی در محیط عملیاتی ضروری است. `STATIC_ROOT` نیز مسیر فایلهای استاتیک را مشخص میکند.
مرحله سوم: تولید فایلهای استاتیک
فایلهای استاتیک (CSS، JavaScript و تصاویر) باید قبل از استقرار در مسیر مشخص شده دانلود شوند.
python manage.py collectstatic
دستور `collectstatic` تمام فایلهای استاتیک را در یک پوشه واحد جمعآوری کرده و آنها را به مسیر `STATIC_ROOT` منتقل میکند. این کار برای سرور Nginx ضروری است.
مرحله چهارم: تنظیمات Gunicorn
Gunicorn باید بهصورت پروسهای مستقل در پسزمینه اجرا شود. ما از systemd برای مدیریت این پروسه استفاده میکنیم.
# /etc/systemd/system/myproject.service
[Unit]
Description=Gunicorn instance to serve myproject
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/myproject
ExecStart=/var/www/myproject/myproject/venv/bin/gunicorn --workers 3 --bind unix:myproject.sock --pythonpath /var/www/myproject myproject.wsgi:application
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
[Install]
WantedBy=multi-user.target
این فایل systemd تعریف یک سرویس Gunicorn است که شامل تنظیمات مربوط به کاربر، مسیر کار، و دستور اجرای Gunicorn است. `–workers` مشخصکننده تعداد پروسههای Gunicorn است که برای مدیریت درخواستهای موازی استفاده میشود.
مرحله پنجم: تنظیمات Nginx
در این مرحله، سرور Nginx را برای ارسال درخواستها به Gunicorn پیکربندی میکنیم.
# /etc/nginx/sites-available/myproject
server {
listen 80;
server_name your_domain_or_ip;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /var/www/myproject;
}
location / {
include proxy_params;
proxy_pass http://unix:/var/www/myproject/myproject.sock;
}
}
این فایل Nginx تنظیمات سرور را مشخص میکند. در اینجا، فایلهای استاتیک با مسیر `/static/` به Nginx ارسال میشوند و بقیه درخواستها به Gunicorn ارسال میشوند که از طریق `unix:/var/www/myproject/myproject.sock` متصل میشوند.
مرحله ششم: فعالسازی سرویسها
در این مرحله، تمام تنظیمات را فعال کرده و سرویسها را راهاندازی میکنیم.
sudo systemctl start myproject
sudo systemctl enable myproject
sudo nginx -t
sudo systemctl reload nginx
دستورات اولیه سرویس Gunicorn را راهاندازی میکنند و دومی آن را در حالت راهاندازی خودکار فعال میکنند. سپس Nginx را بررسی میکنیم و بعد از تأیید، Nginx را مجدداً راهاندازی میکنیم.
بهینهسازیها و نکات امنیتی
برای افزایش عملکرد و امنیت، چندین بهینهسازی میتوان انجام داد:
- فعالسازی HTTPS با Let’s Encrypt
- استفاده از فایلهای فشرده (gzip)
- تنظیم فایلهای لاگ بهمنظور نظارت
- پیادهسازی سیاستهای firewall برای محدود کردن دسترسی
جمعبندی
استقرار پروژه Django روی سرور واقعی با Nginx و Gunicorn یک فرآیند چند مرحلهای است. این تنظیمات به نرمافزارهای مورد نیاز برای اجرای و دسترسی به برنامه Django کمک میکنند. با دنبال کردن مراحل بالا، میتوانید پروژهتان را بهصورت امن و کارآمد روی سرور واقعی استقرار دهید.
آیا این مطلب برای شما مفید بود ؟




