Ответ
Развертывание Django в production — это многоэтапный процесс, обеспечивающий безопасность, производительность и надежность. Он кардинально отличается от использования manage.py runserver.
Ключевые шаги:
-
Настройка проекта (
settings.py)- Установите
DEBUG = False. Это отключает отладочную информацию и страницы с ошибками. - Заполните
ALLOWED_HOSTSсписком доменов, с которых разрешены запросы. - Используйте переменные окружения (например, через
python-dotenv) для хранения секретов (SECRET_KEY, пароли от БД). - Настройте production-базу данных (например, PostgreSQL).
- Установите
-
WSGI-сервер Для обработки Python-кода используется production-ready WSGI-сервер, такой как Gunicorn или uWSGI. Он эффективно управляет рабочими процессами.
# Запуск Gunicorn с 4 рабочими процессами, слушающего порт 8000 gunicorn myproject.wsgi:application --workers 4 --bind 0.0.0.0:8000 -
Веб-сервер (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; } } -
Сбор статики Перед запуском необходимо собрать все статические файлы проекта в одну директорию (
STATIC_ROOT), которую будет обслуживать Nginx.python manage.py collectstatic -
Управление процессом Чтобы процесс Gunicorn запускался автоматически и перезапускался в случае сбоя, используется менеджер процессов, например, Systemd.