فریم‌ورک پایتون

هاست Django با gunicorn

پروژه‌ی Django را از روی manage.py می‌شناسیم. پیش از بالا آمدن gunicorn، collectstatic و migrate اجرا می‌شوند؛ شما فقط ALLOWED_HOSTS و فایل‌های استاتیک را تنظیم می‌کنید.

تشخیص
manage.py و فایل وابستگی‌ها
نسخه‌ها
Python 3.10 تا 3.13
اجرا
gunicorn <project>.wsgi
پورت پیش‌فرض
8000
لوگوی Django

Django آماده‌ی تولید

وجود manage.py کنار فایل وابستگی‌ها یعنی پروژه‌ی Django. ماژول wsgi از روی ساختار پروژه پیدا می‌شود و gunicorn با دو worker روی پورت اپ اجرا می‌شود؛ اگر Procfile داشته باشید، همان اجرا می‌شود.

در هر شروع، python manage.py collectstatic --noinput و migrate قبل از gunicorn اجرا می‌شوند. برای کنترل دقیق‌تر migration ها، آن‌ها را به مرحله‌ی انتشار ببرید تا نسخه‌ی جدید فقط بعد از migration موفق بالا بیاید.

مناسب برای

  • پنل مدیریت و بک‌آفیس
  • API با Django REST Framework
  • فروشگاه و CMS با Wagtail
  • سامانه‌های داده‌محور

مسیر بیلد Django

  1. تشخیص

    manage.py و یکی از فایل‌های وابستگی در ریشه.

    manage.py
  2. نصب

    وابستگی‌ها با ابزار پروژه نصب می‌شوند.

    pip install -r requirements.txt
  3. آماده‌سازی

    فایل‌های استاتیک جمع و migration ها اجرا می‌شوند.

    collectstatic · migrate
  4. اجرا

    gunicorn ماژول wsgi پروژه را اجرا می‌کند.

    gunicorn config.wsgi

خروجی یک استقرار واقعی

sakoocloud deploy
sakoocloud deploy
✔ Packed 1.2MB
✔ Source uploaded
ℹ Build started · dep_7k2m9q
#4 [build 1/5] FROM python:3.12-slim
#6 [build 3/5] RUN pip install -r requirements.txt
#8 [build 4/5] COPY . .
#10 exporting to image
✔ Deployed — app is running.
→ https://my-django.sakooapps.ir

تنظیمات تولید

میزبان‌های مجاز را از محیط بخوانید و WhiteNoise را برای فایل‌های استاتیک اضافه کنید.

import os

DEBUG = False
ALLOWED_HOSTS = os.environ.get("ALLOWED_HOSTS", ".sakoocloud.run").split(",")
CSRF_TRUSTED_ORIGINS = ["https://*.sakoocloud.run"]

STATIC_ROOT = BASE_DIR / "staticfiles"
MIDDLEWARE.insert(1, "whitenoise.middleware.WhiteNoiseMiddleware")

تنظیمات

نسخه‌ی Python

نسخه‌های 3.10 تا 3.13 در دسترس‌اند و بدون اعلام نسخه، Python 3.12 استفاده می‌شود.

از کجا خوانده می‌شودنمونه
runtime.txtpython-3.12.4
.python-version3.12
requires-python در pyproject.toml">=3.12"

مدیریت وابستگی‌ها

اگر چند فایل کنار هم باشند، اولویت از بالا به پایین است.

فایلابزار
PipfilePipenv
poetry.lock یا [tool.poetry] در pyproject.tomlPoetry
uv.lockuv
pdm.lockPDM
requirements.txtpip

اتصال به PostgreSQL

با dj-database-url همان DATABASE_URL تزریق‌شده را به تنظیمات Django تبدیل کنید.

sakoocloud apps link-db <db-id> --app my-django

دیتابیس‌هایی که معمولاً کنارش می‌آیند

همراه هر استقرار

این‌ها به رانتایم بستگی ندارند و برای هر اپ روی سکو کلود فعال‌اند. بعضی، مثل مقیاس‌دهی خودکار و کران‌جاب، به پلن بستگی دارند.

خطاهای رایج

خطای DisallowedHost یا ۴۰۰

علتآدرس اپ یا دامنه‌ی شما در ALLOWED_HOSTS نیست.

راه‌حل.sakoocloud.run و دامنه‌ی خودتان را به ALLOWED_HOSTS اضافه کنید.

CSS و تصویرها لود نمی‌شوند

علتبا DEBUG = False، Django فایل استاتیک سرو نمی‌کند.

راه‌حلWhiteNoise را نصب و در MIDDLEWARE اضافه کنید و STATIC_ROOT را تعریف کنید.

خطای CSRF در فرم‌ها

علتآدرس HTTPS اپ در CSRF_TRUSTED_ORIGINS نیست.

راه‌حلآدرس کامل با https:// را اضافه کنید.

پاد با OOMKilled متوقف می‌شود

علتمصرف حافظه از سقف منابع اپ بیشتر شده است.

راه‌حلحافظه را بیشتر کنید یا مصرف برنامه را پایین بیاورید.

terminal
sakoocloud apps scale --memory 1Gi

پرسش‌های متداول

migration ها خودکار اجرا می‌شوند؟

بله، قبل از gunicorn اجرا می‌شوند. برای کنترل بیشتر، دستور migrate را در مرحله‌ی انتشار بگذارید.

Celery را کجا اجرا کنم؟

در یک اپ جدا از همان مخزن با Procfile خودش، و صف را روی Redis یا RabbitMQ مدیریت‌شده بگذارید.

فایل‌هایی که کاربر آپلود می‌کند کجا ذخیره شوند؟

در فضای ذخیره‌سازی ابری سازگار با S3 با django-storages، یا روی دیسک ماندگار اپ.

Django Channels و ASGI پشتیبانی می‌شود؟

بله. در Procfile به‌جای gunicorn از uvicorn یا daphne با ماژول asgi استفاده کنید.

جزئیات بیشتر در راهنمای Django در مستندات و مرجع CLI.

سریع‌ترین مسیر از کد تا انتشار.

ابتدا ابزار خط فرمان را نصب کنید، سپس همین‌جا امتحان کنید. (بنویسید، یا یکی از پیشنهادهای پایین ترمینال را بزنید)

~/projects/my-app
امتحان کنید