
Привет! По себе знаю, что любителям программирования нравится именно программировать, но очень не нравится делать деплой приложений на сервер. Пугают неведомые Linux, Docker и Gunicorn с Nginx. Что это все такое и как оно должно работать в связке?
Туториалы по деплою для новичков — просто перечисление незнакомых команд с комментариями, от которых становится еще страшнее. Так я и решил создать максимально простой гайд для начинающих, из которого выбросил абсолютно все, без чего можно обойтись на первом, тестовом деплое. Я хочу показать «скелет» действий и доказать, что это не такой страшный монстр.
Важно! Ни в коем случае не загружайте на сервер настоящее веб-приложение таким образом. Я убрал из туториала все меры для безопасности и стабильной работы. Этот способ подходит только для пробного деплоя.
Используйте навигацию, если не хотите читать текст полностью:
→ Поднимаем облачный сервер
→ Обновляем и устанавливаем зависимости
→ Переносим проект на сервер
→ Запуск сервера Django
Поднимаем облачный сервер
Допустим, у нас есть простейшее приложение на Django с базой данных SQLite в виде файла в папке проекта. Нам нужно поднять сервер, на который мы это все перенесем. Как это сделать?
1. Зарегистрируйтесь в панели управления Selectel и откройте вкладку Продукты, находящуюся в левом верхнем углу.

2. Перейдите в раздел Облачные серверы и нажмите Создать сервер.

3. В поле Источник выберете Ubuntu 24. Затем подберите нужные ресурсы будущего сервера. Если достаточно пробного деплоя, можно обойтись минимумом — для этого выберите фиксированную конфигурацию и перейдите на вкладку Shared. Выберите 10% ядра и 512 ГБ оперативной памяти.

Если у вас есть уже готовый проект, можно взять и побольше ресурсов. Тут уж смотрите сами.
4. Для подключения к серверу на базе Ubuntu 24 понадобится добавить SSH-ключ. Это делается ниже, в разделе Доступ. Если у вас есть готовые ключи, можно добавить один из них. Если нет — создать новый. Как сгенерировать ключ, подробно описано в статье.
5. После всех настроек нажмите кнопку Создать сервер и дождитесь его включения. Когда он будет готов к работе, справа появится зеленая надпись ACTIVE.

6. После кликните на название сервера и перейдите в раздел Порты. Оттуда скопируйте публичный IP-адрес виртуальной машины.
7. Поздравляю — теперь у вас есть собственный облачный сервер!

Обновляем и устанавливаем зависимости
Подключаемся через терминал
Общаться с сервером нужно через терминал (Terminal в MacOS, Windows Terminal или вкладка Терминал в IDE) — запустите его и подключитесь к серверу по SSH с помощью следующей команды:

81.177.222.28 замените на IP-адрес своего сервера.
Обновляем пакеты
Казалось бы, без этого шага можно обойтись. Подумаешь, будут не самые свежие версии компонентов ОС, но нет. Ubuntu должна обновить свои компоненты и установить все необходимое для дальнейшей работы. Тем более, в этом нет ничего сложного:
apt update && apt upgrade -y
Устанавливаем Python, pip и venv
Далее нам нужно установить минимальный джентльменский набор: Python, систему управления пакетами pip и утилиту venv для создания виртуальных окружений. Все это можно сделать с помощью всего одной команды:
apt install python3 python3-pip python3-venv
Переносим проект на сервер
Создаем папку проекта
Пора думать, куда нам разместить код нашего веб-приложения. Можно поместить его почти в любую директорию на сервере, но все-таки есть несколько общепринятых мест для размещения, и папка var/www — одно из них.
Создадим в ней директорию нашего проекта, которую назовем myproject:
mkdir -p /var/www/myproject
Подготовим проект для отправки на сервер
В нашем минималистичном туториале достаточно будет сделать всего одно действие с нашим кодом — в файле settings.py добавить IP-адрес нашего сервера в список ALLOWED_HOSTS:
ALLOWED_HOSTS = ['81.177.222.28', '127.0.0.1']
Отлично. Сейчас код нашего веб-приложения существует только на компьютере — его нужно перенести на сервер. Есть с десяток разных способов, как сделать это. Например, можно использовать команду scp, rsync, git (с переносом напрямую на сервер или через GitHub) или FTP-клиент вроде FileZilla.
Копируем код проекта на сервер
Выбор конкретного способа зависит от ваших предпочтений и ограничений виртуальной среды. Главное, чтобы в итоге все файлы вашего проекта оказались на сервере в созданной папке /var/www/myproject. И еще: не нужно копировать на сервер вашу локальную папку виртуального окружения venv. Это будет долго и совершенно ни к чему. Например, для macOS команда, копирующая локальную папку Django-проекта myproject на сервер (и исключающая из копирования папку .venv), выглядит так:
rsync -av --exclude='.venv' /Users/ruslan/PycharmProjects/myproject/ root@81.177.222.28:/var/www/myproject
Обратите внимание, что помимо пути до проекта на вашем компьютере нужно указать, в какую директорию на сервере его сохранить. Как это сделать — показано в примере. Нужно только заменить IP-адрес и название папки при необходимости.
Внимание! Выполните эту команду в терминале на компьютере, а не на сервере.
Запуск сервера Django
Возвращаемся на сервер и установим виртуальное окружение:
python3 -m venv /var/www/myproject/venv
Перейдем в папку Django-проекта и активируем виртуальное окружение:
cd /var/www/myproject
source /var/www/myproject/venv/bin/activate
Следующим шагом установим фреймворк Django внутри виртуального окружения и запустим manage.py runserver:
pip install django
python manage.py runserver 0.0.0.0:8000
Да-да, на production-сервере мы запустили development. Для полноценной работы вашего приложения так делать нельзя, но для тестового деплоя — почему бы и да.
Далее вы можете просто набрать IP-адрес вашего сервера и указать через двоеточие порт для общения с клиентом. И все — ваше приложение работает в интернете.

Как видите, все не так уж и страшно. После того, как вы проделаете все эти этапы, можно приступить к изучению настоящего production-деплоя — со всеми полноценными настройками и мерами безопасности. Но это уже тема для отдельного разговора. Еще увидимся!