Logo Craft Homelab Контакты Telegram
Django Deployment: развертывание на сервере
Fri Jul 04 2025

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