← Назад к вопросам

Как правильно запустить Django-проект в продакшене?

2.0 Middle🔥 181 комментариев
#Django

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Запуск Django-проекта в продакшене

Запуск Django-приложения в продакшене существенно отличается от разработки и требует особого внимания к безопасности, производительности и надежности.

1. Использование WSGI/ASGI сервера

В разработке Django использует встроенный development-сервер, но в продакшене необходимо использовать production-ready WSGI или ASGI сервер:

# gunicorn — самый популярный выбор для WSGI
# Установка: pip install gunicorn
# Запуск: gunicorn config.wsgi:application --workers 4 --bind 0.0.0.0:8000

# Для асинхронных приложений используй Daphne (ASGI):
# pip install daphne
# daphne -b 0.0.0.0 -p 8000 config.asgi:application

2. Конфигурация settings.py

Критические параметры для продакшена:

# DEBUG должен быть False
DEBUG = False

# Указать допустимые хосты
ALLOWED_HOSTS = ["example.com", "www.example.com", "api.example.com"]

# Использовать переменные окружения для секретов
import os
SECRET_KEY = os.environ.get("DJANGO_SECRET_KEY")

# Безопасные настройки HTTPS
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
SECURE_HSTS_SECONDS = 31536000
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True

# Настройка CORS если нужна
CORS_ALLOWED_ORIGINS = ["https://example.com"]

3. Сбор статических файлов

Джанго не сервирует статику автоматически в продакшене:

python manage.py collectstatic --noinput

Учти, что для продакшена лучше использовать Nginx или CDN:

# Nginx конфиг
server {
    listen 80;
    server_name example.com;

    location /static/ {
        alias /var/www/staticfiles/;
        expires 30d;
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host \$host;
        proxy_set_header X-Real-IP \$remote_addr;
    }
}

4. Миграции и инициализация БД

Перед запуском приложения необходимо применить миграции:

python manage.py migrate

Это должно быть частью CI/CD pipeline, обычно в pre-deploy скрипте.

5. Логирование и мониторинг

В продакшене критично настроить логирование:

LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "handlers": {
        "file": {
            "level": "ERROR",
            "class": "logging.handlers.RotatingFileHandler",
            "filename": "/var/log/django/error.log",
            "maxBytes": 1024 * 1024 * 10,  # 10 MB
            "backupCount": 5,
        },
    },
    "root": {"level": "INFO", "handlers": ["file"]},
}

6. Процесс управления (Systemd, Supervisor)

Для управления Gunicorn процессом используй Systemd:

# /etc/systemd/system/django.service
[Unit]
Description=Django Application
After=network.target

[Service]
Type=notify
User=www-data
WorkingDirectory=/var/www/myapp
ExecStart=/var/www/myapp/venv/bin/gunicorn config.wsgi:application --workers 4
ExecReload=/bin/kill -s HUP \$MAINPID
KillMode=mixed

[Install]
WantedBy=multi-user.target

Запуск и управление:

sudo systemctl start django
sudo systemctl enable django
sudo systemctl restart django

7. Обратный прокси (Nginx)

Обычно Gunicorn запускается на localhost, а Nginx выступает обратным прокси и обрабатывает SSL:

# Конфиг Gunicorn
gunicorn config.wsgi:application --workers 4 --bind 127.0.0.1:8000 --access-logfile /var/log/gunicorn_access.log --error-logfile /var/log/gunicorn_error.log

8. Переменные окружения

Всегда используй .env файлы (не коммитируй в Git):

# pip install python-dotenv

from dotenv import load_dotenv
load_dotenv()

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": os.environ.get("DB_NAME"),
        "USER": os.environ.get("DB_USER"),
        "PASSWORD": os.environ.get("DB_PASSWORD"),
        "HOST": os.environ.get("DB_HOST"),
        "PORT": os.environ.get("DB_PORT"),
    }
}

Итоговый checklist

✅ DEBUG = False ✅ SECRET_KEY в переменных окружения ✅ ALLOWED_HOSTS настроены ✅ SSL/HTTPS включен ✅ Статические файлы собраны ✅ БД мигрирована ✅ WSGI сервер (Gunicorn) ✅ Обратный прокси (Nginx) ✅ Логирование настроено ✅ Процесс управления (Systemd) ✅ Мониторинг и алерты

Этот подход обеспечивает безопасное, масштабируемое и надежное развертывание Django-приложения в продакшене.

Как правильно запустить Django-проект в продакшене? | PrepBro