Каков стандартный процесс развертывания Django-приложения в production?

«Каков стандартный процесс развертывания Django-приложения в production?» — вопрос из категории Devops, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Развертывание Django в production — это многоэтапный процесс, обеспечивающий безопасность, производительность и надежность. Он кардинально отличается от использования manage.py runserver.

Ключевые шаги:

  1. Настройка проекта (settings.py)

    • Установите DEBUG = False. Это отключает отладочную информацию и страницы с ошибками.
    • Заполните ALLOWED_HOSTS списком доменов, с которых разрешены запросы.
    • Используйте переменные окружения (например, через python-dotenv) для хранения секретов (SECRET_KEY, пароли от БД).
    • Настройте production-базу данных (например, PostgreSQL).
  2. WSGI-сервер Для обработки Python-кода используется production-ready WSGI-сервер, такой как Gunicorn или uWSGI. Он эффективно управляет рабочими процессами.

    # Запуск Gunicorn с 4 рабочими процессами, слушающего порт 8000
    gunicorn myproject.wsgi:application --workers 4 --bind 0.0.0.0:8000
  3. Веб-сервер (Reverse Proxy) Nginx или Apache ставится перед Gunicorn. Его задачи:

    • Принимать HTTP/HTTPS трафик.
    • Отдавать статические файлы (/static/, /media/) напрямую, не нагружая Django.
    • Перенаправлять все остальные запросы на Gunicorn.
    • Терминировать SSL (обрабатывать HTTPS).

    Пример конфигурации Nginx:

    server {
        listen 80;
        server_name your_domain.com;
    
        location /static/ {
            alias /path/to/your/project/static/;
        }
    
        location /media/ {
            alias /path/to/your/project/media/;
        }
    
        location / {
            proxy_pass http://127.0.0.1:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
  4. Сбор статики Перед запуском необходимо собрать все статические файлы проекта в одну директорию (STATIC_ROOT), которую будет обслуживать Nginx.

    python manage.py collectstatic
  5. Управление процессом Чтобы процесс Gunicorn запускался автоматически и перезапускался в случае сбоя, используется менеджер процессов, например, Systemd.