
Django Deployment: развертывание на сервере
Развертывание Django-проекта на сервере — важный этап, позволяющий сделать ваше приложение доступным для пользователей в интернете. Даже если ваш проект отлично работает на локальной машине, для реального использования его нужно правильно и безопасно разместить на сервере. В этом руководстве мы подробно рассмотрим все основные шаги деплоя на Linux-сервере с использованием Gunicorn и Nginx, а также дадим пояснения к каждому этапу.
1. Подготовка сервера
Перед началом убедитесь, что у вас есть доступ к серверу с установленной ОС Linux (например, Ubuntu). Все действия рекомендуется выполнять под отдельным пользователем, а не под root.
-
Сначала обновите список пакетов и установите Python, pip и venv (виртуальное окружение):
sudo apt update sudo apt install python3 python3-pip python3-venv
Эти команды обеспечат наличие всех необходимых инструментов для запуска и изоляции вашего Django-проекта.
-
Создайте отдельного пользователя для проекта (например,
django
), чтобы повысить безопасность. Перейдите в его домашнюю директорию:sudo adduser django su - django
Это позволит изолировать проект от других процессов на сервере.
2. Клонирование проекта и настройка окружения
Теперь нужно получить исходный код вашего проекта и подготовить окружение для его работы.
-
Клонируйте репозиторий с вашим проектом:
git clone <ваш-репозиторий> cd <ваш-проект>
Здесь
<ваш-репозиторий>
— это ссылка на ваш git-репозиторий (например, с GitHub или GitLab), а<ваш-проект>
— название папки проекта. -
Создайте и активируйте виртуальное окружение:
python3 -m venv venv source venv/bin/activate
Виртуальное окружение позволяет изолировать зависимости проекта от системных пакетов Python.
-
Установите все зависимости, указанные в
requirements.txt
:pip install -r requirements.txt
Это гарантирует, что все нужные библиотеки будут установлены в ваше виртуальное окружение.
3. Настройка переменных окружения
Для безопасности и гибкости настройки проекта используйте переменные окружения. Обычно для этого создают файл .env
или используют системные переменные.
- В файле
.env
можно хранить такие параметры, какSECRET_KEY
, настройки базы данных, параметры отладки и другие чувствительные данные. Пример:
Никогда не храните секретные данные в открытом виде в репозитории!SECRET_KEY=ваш_секретный_ключ DEBUG=False ALLOWED_HOSTS=ваш_домен,127.0.0.1 DATABASE_URL=postgres://user:password@localhost:5432/dbname
4. Миграции и сбор статики
Перед запуском приложения на сервере необходимо подготовить базу данных и статические файлы.
-
Выполните миграции для создания и обновления таблиц в базе данных:
python manage.py migrate
Эта команда применяет все изменения моделей к базе данных.
-
Соберите статические файлы (CSS, JS, изображения) в одну папку для обслуживания через веб-сервер:
python manage.py collectstatic
После выполнения этой команды все статики будут скопированы в папку, указанную в настройках (
STATIC_ROOT
).
5. Установка и настройка Gunicorn
Django не предназначен для работы напрямую с интернет-трафиком в продакшене. Для этого используют WSGI-серверы, такие как Gunicorn.
-
Установите Gunicorn в виртуальное окружение:
pip install gunicorn
Gunicorn будет запускать ваше Django-приложение и принимать запросы от Nginx.
-
Проверьте работу Gunicorn локально:
gunicorn your_project.wsgi:application --bind 0.0.0.0:8000
Замените
your_project
на имя вашего Django-пакета. После запуска приложение будет доступно на порту 8000. -
Для автоматического запуска и управления Gunicorn создайте systemd unit-файл
/etc/systemd/system/gunicorn.service
:[Unit] Description=gunicorn daemon After=network.target [Service] User=youruser Group=www-data WorkingDirectory=/home/youruser/your_project ExecStart=/home/youruser/your_project/venv/bin/gunicorn --workers 3 --bind unix:/home/youruser/your_project/gunicorn.sock your_project.wsgi:application [Install] WantedBy=multi-user.target
Здесь:
User
— пользователь, под которым будет работать Gunicorn (например,django
)WorkingDirectory
— путь к вашему проектуExecStart
— команда запуска Gunicorn с указанием сокета для взаимодействия с Nginx
-
Перезапустите systemd и включите Gunicorn в автозагрузку:
sudo systemctl daemon-reload sudo systemctl start gunicorn sudo systemctl enable gunicorn
Теперь Gunicorn будет автоматически запускаться при старте сервера.
6. Настройка Nginx
Nginx будет выступать в роли обратного прокси: принимать HTTP-запросы от пользователей и передавать их Gunicorn, а также обслуживать статические и медиа-файлы.
-
Установите Nginx:
sudo apt install nginx
-
Создайте конфигурационный файл
/etc/nginx/sites-available/your_project
:server { listen 80; server_name your_domain_or_ip; location = /favicon.ico { access_log off; log_not_found off; } location /static/ { root /home/youruser/your_project; } location /media/ { root /home/youruser/your_project; } location / { include proxy_params; proxy_pass http://unix:/home/youruser/your_project/gunicorn.sock; } }
В этом файле:
server_name
— ваш домен или IP-адресlocation /static/
иlocation /media/
— обработка статики и медиа-файловproxy_pass
— проксирование запросов к Gunicorn через Unix-сокет
-
Активируйте сайт и перезапустите Nginx:
sudo ln -s /etc/nginx/sites-available/your_project /etc/nginx/sites-enabled sudo nginx -t sudo systemctl restart nginx
После этого ваш сайт будет доступен по HTTP.
7. Проверка и отладка
Если что-то не работает, важно уметь быстро найти и исправить ошибку.
- Для просмотра логов Gunicorn используйте:
journalctl -u gunicorn
- Для просмотра ошибок Nginx:
Анализируйте сообщения об ошибках — они часто подсказывают, что именно пошло не так (например, проблемы с правами, путями или зависимостями).sudo tail -f /var/log/nginx/error.log
Заключение
Теперь ваш Django-проект работает на сервере под управлением Gunicorn и Nginx. Такой подход обеспечивает производительность, безопасность и масштабируемость. Не забудьте:
- Настроить регулярное резервное копирование базы данных и файлов
- Включить HTTPS (например, с помощью Let’s Encrypt)
- Ограничить доступ к административной панели
- Настроить мониторинг и оповещения о сбоях
Следуя этому руководству, вы сможете развернуть свой Django-проект на сервере и обеспечить его стабильную работу для пользователей.