- Home »

Почему установка Django на сервер — это боль и кайф одновременно
Если ты когда-нибудь пытался выкатить свой Django-проект с локалки на реальный сервер — ты наверняка сталкивался с кучей вопросов: как развернуть, что за gunicorn, чем nginx лучше apache, куда девать статику, почему всё работает у меня, но не у хостера.
И если ты — SEO-шник, вебмастер, дорвейщик или просто владелец сайта, который хочет выжать максимум из Django, эта статья для тебя. Расскажу простым языком, как поставить Django на сервер, какие бывают грабли, лайфхаки, а где лучше не изобретать велосипед.
Что такое Django и зачем его вообще ставить на сервер?
Django — это мощный Python-фреймворк для веб-разработки. На нём делают всё: от лендингов до крупных порталов и сервисов. Но чтобы сайт на Django был доступен в интернете, его надо правильно установить на сервере.
В отличие от CMS типа WordPress, здесь всё чуть сложнее: нужно не только залить файлы, но и настроить кучу всего вокруг — от базы до проксирования.
Шаг за шагом: как установить Django на сервер
1. Выбор сервера: VPS, shared-хостинг или облако?
- Shared-хостинг — почти всегда не вариант для Django. Обычно поддерживается только PHP. Есть исключения (например, PythonAnywhere), но это скорее для тестов.
- VPS/VDS — оптимальный выбор для большинства. Ты получаешь полный root-доступ, ставишь что хочешь.
- Облако (AWS, GCP, Yandex.Cloud) — гибко, но сложнее и дороже. Для старта хватит обычного VPS.
2. Подготовка окружения
Лучше всего использовать Ubuntu 20.04/22.04 LTS — большинство гайдов и туториалов рассчитано именно на неё.
- Обнови пакеты:
sudo apt update && sudo apt upgrade -y
- Поставь Python (Django требует Python 3.7+):
sudo apt install python3 python3-pip python3-venv -y
- Создай отдельного пользователя для проекта (безопасность!):
sudo adduser django
- Перейди под этого пользователя:
sudo su - django
3. Разворачиваем Django-проект
- Создай папку под проект:
mkdir ~/myproject && cd ~/myproject
- Создай и активируй виртуальное окружение:
python3 -m venv venv
source venv/bin/activate
- Установи Django (или скопируй свой проект и установи зависимости):
pip install django
- Если у тебя уже есть requirements.txt:
pip install -r requirements.txt
4. Настройка базы данных
- Для теста можно SQLite (по умолчанию), но для продакшена — PostgreSQL:
sudo apt install postgresql postgresql-contrib libpq-dev
- Создай БД и пользователя:
sudo -u postgres psql
CREATE DATABASE mydb;
CREATE USER myuser WITH PASSWORD 'mypassword';
ALTER ROLE myuser SET client_encoding TO 'utf8';
ALTER ROLE myuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE myuser SET timezone TO 'UTC';
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
\q
- В
settings.py
пропиши параметры подключения:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydb',
'USER': 'myuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '',
}
}
- Прогоняй миграции:
python manage.py migrate
5. Сборка статики и медиа
- Собираем статику:
python manage.py collectstatic
- Проверь, куда она складывается (см.
STATIC_ROOT
в settings.py).
6. Настройка Gunicorn — рабочего процесса Django
Django сам по себе не умеет работать с продакшен-трафиком. Для этого используют WSGI-серверы, самый популярный — Gunicorn.
pip install gunicorn
gunicorn --bind 127.0.0.1:8000 myproject.wsgi:application
- Проверь, что приложение стартует без ошибок.
7. Настройка systemd для автозапуска Gunicorn
- Создай юнит-файл
/etc/systemd/system/gunicorn.service
:
[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=django
Group=www-data
WorkingDirectory=/home/django/myproject
ExecStart=/home/django/myproject/venv/bin/gunicorn –workers 3 –bind unix:/home/django/myproject/gunicorn.sock myproject.wsgi:application
[Install]
WantedBy=multi-user.target
- Перезапусти systemd и запусти gunicorn:
sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
8. Настройка Nginx — отдаём трафик наружу
- Установи nginx:
sudo apt install nginx
- Создай конфиг для сайта
/etc/nginx/sites-available/myproject
:
server {
listen 80;
server_name mysite.ru www.mysite.ru;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/django/myproject;
}
location /media/ {
root /home/django/myproject;
}
location / {
include proxy_params;
proxy_pass http://unix:/home/django/myproject/gunicorn.sock;
}
}
- Активируй сайт и перезапусти nginx:
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx
9. (Бонус) HTTPS — обязательно!
- Быстро и бесплатно — Let’s Encrypt:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx
Плюсы и минусы подхода
Плюсы:
- Максимальный контроль: всё под твоим управлением.
- Гибкость: можно ставить любые зависимости, расширять функционал.
- Безопасность: можно грамотно настраивать права, firewall и т.д.
Минусы:
- Сложнее, чем WordPress или Bitrix.
- Нужно следить за обновлениями, безопасностью, резервным копированием.
- Ошибки в конфиге могут привести к падению сайта.
Реальные кейсы: как бывает
Позитивный кейс:
SEO-шник запустил дорвей на Django, настроил Nginx+Gunicorn, всё работает быстро, можно гнать трафик, не бояться банов по IP (меняем VPS — и всё), легко клонировать проекты.
Негативный кейс:
Вебмастер поставил Django на shared-хостинг, где нет root-доступа. Всё тормозит, статика не работает, админка лагает, саппорт не помогает — итог: потерянные сутки и переход на VPS.
Частые ошибки новичков
- Ставят Django на shared-хостинг, а потом удивляются, почему не работает.
- Забывают про
ALLOWED_HOSTS
— сайт не отвечает на домен. - Не собирают статику (
collectstatic
), и сайт выглядит “голым”. - Держат DEBUG=True на продакшене — опасно для безопасности!
- Не настраивают swap на VPS с малым RAM — gunicorn падает по OOM.
- Не делают бэкапы БД и файлов — после взлома/сбоя теряют всё.
Бонус: советы и мифы
- Миф: Django работает только на Linux.
Факт: Можно и на Windows, но в продакшене — только Linux. - Миф: Django — сложно.
Факт: Первый раз — да, потом по шаблону. - Совет: Используй официальные гайды DigitalOcean — очень толково расписано.
- Совет: Для быстрого старта — попробуй Heroku или PythonAnywhere (но для серьёзных задач — VPS).
- Совет: Для деплоя можно использовать Docker — но это уже тема для отдельной статьи.
Похожие решения
- Flask — если нужен минимализм и скорость запуска, но без встроенной админки.
- FastAPI — для API-first проектов, очень быстрый и модный.
- WordPress/Bitrix — если нужен именно сайт-визитка и не хочется заморачиваться.
Заключение: почему стоит выбрать Django и как не облажаться
Django — это не про “залил и забыл”, а про гибкость, мощь и контроль. Если ты хочешь не просто сайт, а платформу, которую можно развивать, масштабировать и интегрировать — это отличный выбор.
Да, придётся чуть попотеть с настройкой, но потом ты получаешь рабочую лошадку, которую не стыдно показать клиенту или использовать в своих SEO-экспериментах.
Мой совет: не экономь на VPS, всегда делай бэкапы, читай логи, и не бойся автоматизировать рутину (ansible, docker, bash-скрипты).
Удачи с Django! Если возникнут вопросы — гугли официальную документацию и не стесняйся спрашивать у комьюнити.
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.