Блог компании 3v-Hosting
Быстрое развертывание Django-проекта на VPS сервере с предустановленным стеком
7 мин.
Будем честны - развертывание проекта Django на VPS может быть утомительной рутинной работой. Вы арендуете сервер, подключаетесь к нему по SSH, устанавливаете пакеты, настраиваете Nginx, настраиваете Gunicorn, создаете пользователей PostgreSQL, пишете службы systemd, возитесь с правами доступа к файлам, и в конце концов вы потратили полдня на то, что не имеет никакого отношения к фактической разработке.
Но что, если я скажу вам, что есть новый вид хостинга - «Django VPS» - где все это уже сделано за вас? Где вам нужно просто войти, запустить скрипт, и ваше приложение будет готово к работе через 3–5 минут?
Я недавно тестировал этот подход и хочу рассказать вам о нем. Считайте эту статью отчетом разработчика, который слишком много раз обжигался на стандартных настройках VPS и наконец нашел то, что «просто работает».
Итак, что же такое Django VPS?
Django VPS - это виртуальный частный сервер, который поставляется со всем необходимым для хостинга Django-проекта - уже установленным, настроенным и подключенным.
Больше не нужно начинать с нуля.
Вместо того, чтобы тратить часы на установку пакетов, настройку Nginx, конфигурацию PostgreSQL и настройку Gunicorn, вы получаете готовую к производству конфигурацию с:
- Ubuntu 22.04
- Python 3.10 с поддержкой venv
- PostgreSQL
- Обратный прокси Nginx
- Сервер приложений Gunicorn
- Предварительно настроенные службы systemd
- Брандмауэр, HTTPS и скрипты развертывания
Это как будто кто-то взял лучшие практики DevOps, упаковал их в образ VPS и добавил красную ковровую дорожку для вашего репозитория Git. Вам остается только войти.
Первый вход: чистый лист и README
Как только вы получаете доступ к своему Django VPS, все выглядит довольно продуманно.
Вы подключаетесь к серверу по SSH как пользователь без прав root и сразу видите README. Не ту расплывчатую инструкцию, в которой написано «установите здесь свое приложение», а инструкцию с конкретными указаниями - что запускать, куда поместить свой проект, как управлять службами.
Вас ждут два скрипта:
deploy.sh: запускает ваше приложение.
reset.sh: удаляет все, если вы хотите начать заново.
Служба PostgreSQL запущена. Nginx ждет. Gunicorn готов к работе. Все, что вам нужно, - это URL Git.
Запуск deploy.sh: ваш проект онлайн за считанные минуты
Прелесть этого шаблона - в процессе развертывания. Скрипт deploy.sh выполняет большую часть рутинной скучной работы, и сделает это быстро.
Вот как это работает:
1. После запуска скрипта он спросит у вас URL вашего проекта на Git. Скрипт клонирует ваш проект в /srv/yourproject/.
2. Затем он попросит вас ввести учетные данные для базы данных. Скрипт запросит у вас имя базы данных, имя пользователя и пароль, после чего он:
- Создает базу данных PostgreSQL и пользователя.
- Предоставляет необходимые разрешения.
- Вставляет эти учетные данные в ваш .env или непосредственно в settings.py, в зависимости от структуры вашего проекта.
3. Получив нужные данные сервер настроит среду.
Он создает файл .env со всеми переменными, которые обычно нужны Django:
SECRET_KEY
DEBUG=False
DB_NAME, DB_USER, DB_PASSWORD
Настроит systemd службу:
Шаблонный файл службы заполняется путем вашего проекта и привязывается к Gunicorn через UNIX-сокет. Он включается и запускается немедленно.
Настроит Nginx:
Nginx получает новую конфигурацию сайта, которая:
- Указывает на сокет Gunicorn
- Обслуживает статические файлы
- Может автоматически настроить HTTPS с помощью Certbot (необязательно, но очень удобно)
После этого все готово. Вам нужно только доустановить зависимости вашего проекта и произвести миграцию базы данных. Выполните представленные ниже команды или те команды, которые нужны для донастройки вашего проекта:
source venv/bin/activate
pip install -r requirements.txt
python manage.py migrate
python manage.py collectstatic
Поздравляем! Ваш сайт запущен!
Другие статьи на тему Python в нашем Блоге:
- Как определить длину списка в Python
- Установка и использование Virtualenv в Python3
- Pip: Основы управления пакетами в Python
Нужно начать заново? reset.sh к вашим услугам
Сделали ошибку? Хотите протестировать другой проект? Нет проблем. Запустите reset.sh, и он:
- Остановит и отключит службу Gunicorn.
- Удалит папку вашего проекта.
- Удалит пользователя и базу данных PostgreSQL.
- Очистит конфигурацию Nginx.
Через 10 секунд сервер будет таким же свежим и чистым, как и в момент его получения.
Это особенно полезно для тестирования или если вы представляете агентство, работающее над несколькими Django-проектами для своих клиентов.
Чем это отличается от обычного VPS?
Обычный VPS - это чистый холст. И это звучит здорово, пока вы не осознаете, что от вас ожидают нарисовать на нем Сикстинскую капеллу... с помощью зубочистки.
Django VPS, с другой стороны, похож на холст, на котором уже нарисован эскиз и нанесен грунт. Все, что вам нужно сделать, - это заполнить его цветами.
Он создан специально для Django, без лишнего багажа, например PHP-стека, без инструментов WordPress и тому подобного. Он предназначен для Python-разработчиков, которые хотят быстро задеплоить свой проект в прод.
Встроенная безопасность и лучшие практики
Кроме всего прочего, наш шаблон учитывает безопасность и надежность вашего сервера:
- SSH root login отключен.
- UFW включен, разрешены только порты 22, 80 и 443.
- PostgreSQL привязан к localhost.
- Gunicorn использует UNIX-сокеты для проксирования Nginx.
- HTTPS не является обязательным, но поддерживается из коробки.
- Службы управляются через systemd, а не через screen или nohup hacks.
Это дает вам уверенность, что ваш проект не просто работает - он работает безопасно.
Для кого это предназначено?
Если вы индивидуальный разработчик, запускающий MVP, фрилансер, работающий над сайтом клиента Django, небольшая команда, развертывающая тестовые или производственные приложения или даже преподаватель, показывающий студентам, как запустить проект - этот шаблон сэкономит вам время, нервы и ночные устранения неполадок.
Конечно данный шаблон не заменит инфраструктуру корпоративного уровня, но отлично подходит для небольших и средних проектов.
Заключительные мысли
После использования такого VPS для Django возвращение к пустому серверу будет похоже на холодный душ. Дело не только в экономии времени - это ясность ума, когда вы знаете, что все шаблонные задачи решены, и вы можете сосредоточиться на своем приложении.
Не нужны CI/CD-конвейеры, не нужны облачные дашборды - только VPS, ваш репозиторий и скрипт, который говорит на вашем языке.
Вы отправляете свой код. Он запускается в режиме реального времени. Конец истории.