ارائه دهنده خدمات ابری PaaS و DBaaS

django

برنامه‌های Django

(Django Apps)

🎯 توضیحات و نکات تکمیلی

فهرست عناوین:

انتخاب نسخه‌ی Python

به‌صورت پیش‌فرض برنامه‌ی شما روی Python 3.8 اجرا می‌شود. در صورتی که قصد دارید نسخه دیگری را برای اجرای برنامه‌ی‌تان استفاده کنید می‌توانید داخل فایل liara.json بخش زیر را اضافه کنید. توجه داشته باشید که فایل liara.json را باید در کنار فایل requirements.txt بسازید:

{
  "django": {
    "pythonVersion": "3.7"
  }
}

  • 3.7
  • 3.8
  • 3.9
  • 3.10

استفاده از Supervisord

در صورتی که نیاز به Worker برای اجرای Background Job‌ها برای مثال با Celery را دارید، می‌توانید یک فایل به‌نامsupervisor.confدر کنار requirements.txtبسازید و سپس دیپلوی کنید. در این‌صورت Supervisor اجرا شده و دستور شما را در Background اجرا خواهد کرد. در ادامه، یک نمونه فایل supervisor.confرا مشاهده می‌کنید:

[program:celery-worker]
process_name=%(program_name)s_%(process_num)02d
command=celery -A proj worker -l INFO
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
numprocs=1
startsecs=10
stopwaitsecs=600
redirect_stderr=true
stdout_logfile=/tmp/worker.log
برای کسب اطلاعات بیشتر در رابطه با نحوه‌ی شروع به کار Celery در برنامه‌‌های Django می‌توانید دستورالعمل Celery در برنامه‌های Django را مطالعه کنید.

دستور collectstatic

در هر استقراری که انجام می‌دهید، لیارا به‌صورت خودکار دستورpython manage.py collectstaticرا اجرا می‌کند. برای جلوگیری از اجرای خودکار این دستور، باید تنظیمات زیر را در فایل liara.json قرار بدهید:

{
  "django": {
    "collectStatic": false
  }
}

دستور compilemessages

اگر برنامه‌ی شما چند زبانه است و نیازمند اجرای دستورpython manage.py compilemessagesبعد از هر بار استقرار هستید، باید تنظیمات زیر را در فایل liara.json قرار بدهید:

{
  "django": {
    "compileMessages": true
  }
}
در صورتی که این پارامتر را فعال کنید، حتما لازم است که پوشه‌یlocaleدر ریشه‌ی برنامه‌ی‌تان قرار داشته باشد.

جلوگیری از اعمال تغییرات در فایل settings.py

لیارا به‌صورت خودکار فایلsettings.pyبرنامه‌ی شما را پیدا کرده و در انتهای آن تنظیماتی را اضافه می‌کند تا برای اجرا آماده شود. چنانچه قصد غیر فعال کردن آن را دارید، باید فایل liara.json زیر را به‌ریشه‌ی برنامه‌ی‌تان اضافه کنید:

{
  "django": {
    "modifySettings": false
  }
}
توجه داشته باشید که فقط و فقط این قابلیت را زمانی غیرفعال کنید که کاملا به‌نتایج آن آگاه باشید.

تنظیمات Nginx

در برنامه‌های Django لیارا از وب‌سرور Nginx استفاده می‌شود و پیکربندی پیش‌فرض این وب‌سرور به‌شکل زیر است:

location /static {
  alias /usr/src/app/staticfiles;
}

location / {
  try_files $uri @django_app;
}

location ~\.sqlite3$ {
  deny all;
  error_page 403 =404 /;
}

location ~ /\.well-known {
  allow all;
}

حال شما می‌توانید یک فایل با نام liara_nginx.confدر مسیر اصلی پروژه‌ی خود ایجاد کرده و پیکربندی وب‌سرور Nginx را متناسب با نیاز خود تغییر دهید. برای مثال، برای فعال‌کردن فشرده‌سازیgzipمی‌توانید به‌شکل زیر عمل کنید:

gzip             on;
gzip_disable     "msie6";
gzip_vary        on;
gzip_proxied     any;
gzip_comp_level  6;
gzip_types       text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml;

location /static {
  alias /usr/src/app/staticfiles;
}

location / {
  try_files $uri @django_app;
}

location ~\.sqlite3$ {
  deny all;
  error_page 403 =404 /;
}

location ~ /\.well-known {
  allow all;
}

تنظیم هدرهای امنیتی HTTP

برای جلوگیری از حملاتی مانند Clickjacking، XSS، SSL Striping می‌توانید هدرهای امنیتی را مانند مثال زیر در تنظیمات Nginx برنامه‌ی خود تنظیم کرده و نحوه‌ی برقراری ارتباط با سایت را برای مرورگرها تعیین کنید:

add_header X-Frame-Options DENY always;
add_header X-Content-Type-Options: nosniff;
add_header X-XSS-Protection "1; mode=block" always;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

location / {
  try_files $uri @django_app;
}
location /static {
  alias /usr/src/app/staticfiles;
 }
توجه داشته باشید که قبل از فعال‌سازی HSTS با تنظیم هدر Strict-Transport-Security باید SSL را فعال کرده باشید. تهیه‌ی SSL رایگان

افزایش محدودیت حجم آپلود فایل

همان‌طور که در بخش قبلی گفته شد، پلتفرم Django در لیارا با استفاده از وب‌سرور Nginx مستقر و اجرا می‌گردد. در این وب‌سرور، به‌صورت پیش‌فرض حداکثر حجم مجاز آپلود فایل 1MB در نظر گرفته شده‌است. شما می‌توانید یک فایل با نامliara_nginx.confدر کنارrequirements.txtبسازید و محتویات زیر را داخل آن قرار دهید و سپس دستورliara deployرا وارد کنید:

client_max_body_size 250M;

location /static {
  alias /usr/src/app/staticfiles;
}

location / {
  try_files $uri @django_app;
}

location ~\.sqlite3$ {
  deny all;
  error_page 403 =404 /;
}

location ~ /\.well-known {
  allow all;
}

با قرار دادن فایل بالا در ریشه‌ی برنامه‌ی‌تان حداکثر حجم مجاز آپلود فایل به 250MB افزایش می‌یابد. شما می‌توانید مقدار دلخواه خودتان را تنظیم کنید.

رفع خطای CORS فایل‌های Media

مسئولیت ارائه فایل‌های رسانه (Media) به کاربران در پلتفرم Django برعهده‌ی وب‌سرور (Nginx) است، حال اگر کاربران شما برای دسترسی به فایل‌های رسانه با خطای CORS مواجه شدند باید تنظیمات Nginx پروژه‌ی خود را شخصی‌سازی کنید. برای رفع این خطا، یک فایل با نام liara_nginx.conf در مسیر اصلی پروژه‌ی خود ایجاد کرده و قطعه‌کد زیر را در این فایل قرار دهید:

location /media {
  add_header Access-Control-Allow-Origin *;
  alias /usr/src/app/media;
}

location /static {
  alias /usr/src/app/staticfiles;
}

location / {
  try_files $uri @django_app;
}

location ~\.sqlite3$ {
  deny all;
  error_page 403 =404 /;
}

location ~ /\.well-known {
  allow all;
}

سپس برای اعمال این تغییرات، دستور liara deploy را در مسیر اصلی پروژه‌ی خود اجرا کنید.

با اعمال این پیکربندی، فایل‌های قرار گرفته در پوشه‌ی mediaبا HeaderAccess-Control-Allow-Originو مقدار*Serve می‌شوند. همچنین شما می‌توانید مقدار دلخواه خودتان را تنظیم کنید.

افزایش زمان تایم‌اوت Gunicorn

درصورتی که در برنامه‌ی Django خود با خطای [CRITICAL] WORKER TIMEOUT مواجه شده‌اید و به WORKER TIMEOUT بیشتر از ۳۰ ثانیه نیاز دارید می‌توانید وارد تنظیمات برنامه‌ی Django خود شده و در بخش متغیرها، متغیر GUNICORN_TIMEOUT=60 را به‌شکل زیر اضافه کرده و درنهایت با کلیک بر روی دکمه ثبت تغییرات، WORKER TIMEOUT برنامه را افزایش دهید.

توجه داشته باشید که متغیر GUNICORN_TIEMOUT براساس ثانیه است.

رفع خطای CORS

درصورتی که Headerهای مربوط به CORS را با استفاده از پکیج django-cors-headers، در Middleware برنامه‌ی خود تنظیم کرده‌اید بایدCORS_ALLOWED_ORIGINS و CORS_ALLOW_METHODS را نیز در فایل settings.py تعریف کرده باشید:

CORS_ALLOWED_ORIGINS = [
    "https://example.com",
    "https://www.example.com",
]

CORS_ALLOW_METHODS = [
  "DELETE",
  "GET",
  "OPTIONS",
  "PATCH",
  "POST",
  "PUT",
]

استقرار برنامه‌های ASGI

برای استقرار برنامه‌های ASGI در پلتفرم Django لیارا تنها باید WSGI_APPLICATION را از فایل settings.py برنامه حذف کنید و مسیر فایل پیکربندی برنامه‌ی ASGI خود را در متغیر ASGI_APPLICATION مقداردهی کنید.

غیرفعال کردن Mirror

Mirror اختصاصی لیارا به‌منظور دانلود سریع‌تر پکیج‌ها در پلتفرم Django به‌صورت پیش‌فرض فعال است اما شما می‌توانید با قرار دادن قطعه‌کد زیر در فایل liara.json، این قابلیت را غیر فعال کنید:

{
  "django": {
    "mirror": false
  }
}