
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-проект на сервере и обеспечить его стабильную работу для пользователей.