Django – это один из самых популярных фреймворков для создания веб-приложений на Python. Он упрощает работу с базами данных, обработку HTTP-запросов и управление пользователями. Однако для работы в продакшене Django требует правильной настройки и интеграции с другими инструментами. В этом руководстве мы рассмотрим полный процесс развертывания Django на сервере с Ubuntu 24.04, используя PostgreSQL для хранения данных, Gunicorn для обработки запросов и Nginx в качестве веб-сервера.
Django
Django – это мощный фреймворк для веб-разработки, который позволяет быстро создавать сложные веб-приложения. Он включает в себя встроенные инструменты для работы с базами данных, систему маршрутизации, систему шаблонов и многое другое. Django использует принцип "Не повторяйся" (DRY), что делает код более читаемым и поддерживаемым.
PostgreSQL
PostgreSQL – это современная реляционная система управления базами данных (СУБД), которая поддерживает транзакции, расширенные SQL-запросы и высокий уровень безопасности. В отличие от SQLite, которая по умолчанию используется в Django, PostgreSQL подходит для масштабируемых и многопользовательских приложений.
Gunicorn
Gunicorn (Green Unicorn) – это сервер WSGI для Python, который работает между Django и веб-сервером, обрабатывая HTTP-запросы и передавая их в приложение. Gunicorn поддерживает многопоточное выполнение запросов, что делает его хорошим выбором для продакшен-среды.
Nginx
Nginx – это высокопроизводительный веб-сервер, который выполняет роль реверс-прокси перед Gunicorn. Он принимает HTTP-запросы, раздает статические файлы (изображения, CSS, JS) и передает динамические запросы в приложение через Gunicorn.
Прежде чем начать установку, убедитесь, что ваш сервер обновлен. Это поможет избежать возможных конфликтов между пакетами.
Обновите список пакетов:
sudo apt update
Теперь установим все нужные зависимости:
sudo apt install python3-pip python3-venv libpq-dev postgresql postgresql-contrib nginx
Эта команда скачает и установит:
→ Python 3 и pip – инструмент для управления зависимостями Python.
→ venv – встроенный механизм создания виртуальных окружений.
→ PostgreSQL – мощную базу данных.
→ libpq-dev – вспомогательные библиотеки для работы с PostgreSQL.
→ Nginx – веб-сервер, который будет использоваться в продакшене.
После установки проверьте, что все работает:
python3 --version
postgres --version
nginx -v
Если версии программ отображаются без ошибок, можно двигаться дальше.
Теперь создадим базу данных и пользователя для Django.
Сначала войдите в консоль PostgreSQL:
sudo -u postgres psql
Создайте новую базу данных и пользователя:
CREATE DATABASE myproject;
CREATE USER myprojectuser WITH PASSWORD 'password';
GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;
Выйдите из консоли PostgreSQL:
\q
Теперь PostgreSQL готов к использованию.
Для лучшей управляемости проектов в Python используются виртуальные окружения. Они позволяют изолировать зависимости каждого проекта.
Перейдите в домашнюю директорию и создайте папку проекта:
mkdir ~/myproject && cd ~/myproject
Создайте и активируйте виртуальное окружение:
python3 -m venv venv
source venv/bin/activate
Теперь установим необходимые зависимости:
pip install django gunicorn psycopg2
Создайте новый Django-проект:
django-admin startproject myproject
Теперь настроим базу данных для Django. Откройте settings.py:
nano myproject/settings.py
Найдите раздел DATABASES и измените его:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'myproject',
'USER': 'myprojectuser',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '',
}
}
Добавьте в список разрешённых хостов домен или IP сервера:
ALLOWED_HOSTS = ['your_domain_or_IP']
Примените миграции и создайте администратора:
python manage.py migrate
python manage.py createsuperuser
python manage.py collectstatic
Gunicorn поможет Django работать в продакшене. Запустите его тестово:
gunicorn --bind 0.0.0.0:8000 myproject.wsgi
Теперь создадим службу systemd:
sudo nano /etc/systemd/system/gunicorn.service
Добавьте в файл:
[Unit]
Description=Gunicorn daemon
After=network.target
[Service]
User=your_user
WorkingDirectory=/home/your_user/myproject
ExecStart=/home/your_user/myproject/venv/bin/gunicorn --workers 3 --bind unix:/home/your_user/myproject/myproject.sock myproject.wsgi:application
[Install]
WantedBy=multi-user.target
Запустите сервис:
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl status gunicorn
Создайте конфигурационный файл для Nginx:
sudo nano /etc/nginx/sites-available/myproject
Добавьте:
server {
listen 80;
server_name your_domain_or_IP;
location /static/ {
root /home/your_user/myproject;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/your_user/myproject/myproject.sock;
}
}
Активируйте конфигурацию и перезапустите Nginx:
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx
Теперь ваш Django-сайт работает на Ubuntu с PostgreSQL, Gunicorn и Nginx. Для обновления кода просто замените файлы проекта и перезапустите Gunicorn:
sudo systemctl restart gunicorn
Ваш сайт готов к использованию!