На прошлом занятии мы сделали фундаментальную вещь — подготовили инфраструктуру для нашего проекта cinemahub:
- арендовали VPS-сервер с Ubuntu;
- зарегистрировали домен;
- связали домен с IP-адресом сервера;
- убедились, что домен корректно делегирован.
С этого момента наш проект перестал быть «локальным». У него появился настоящий сервер в интернете.
Теперь пришло время сделать следующий логичный шаг — начать работать с сервером напрямую.
Наш VPS — это удалённый компьютер, к которому нет физического доступа. Мы не можем подключить к нему монитор, клавиатуру или мышь.
Взаимодействие с сервером происходит по протоколу SSH (Secure Shell) — это защищённый способ удалённого управления сервером через командную строку.
Через SSH мы будем:
- устанавливать пакеты;
- настраивать базу данных;
- разворачивать Django-проект;
- запускать серверные процессы.
Для подключения к серверу нужен SSH-клиент. Существует множество вариантов:
- PuTTY
- WinSCP
- Termius
- MobaXterm
Мы будем использовать PuTTY — это один из самых распространённых и простых вариантов для Windows.
Скачать PuTTY можно по ссылке:
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
Устанавливаем программу и запускаем её.
После запуска PuTTY мы увидим главное окно настроек подключения.
В поле Host Name (or IP address) указываем:
- IP-адрес вашего VPS-сервера
- порт
22(стандартный SSH-порт)
Пример:
Host Name: 123.123.123.123
Port: 22
Чтобы не вводить эти данные каждый раз, можно сохранить сессию:
- в поле Saved Sessions указываем имя (например,
cinemahub_server); - нажимаем Save.
Теперь при следующем подключении достаточно выбрать эту сессию и нажать Open.
При первом подключении PuTTY покажет предупреждение о неизвестном ключе сервера.
Это нормально. PuTTY просто сообщает, что вы подключаетесь к этому серверу впервые.
Нажимаем Accept.
После этого откроется терминал.
Сначала вводим логин (обычно root):
login as: root
Затем — пароль, который пришёл вам на почту после создания VPS (для вставки скопированной информации можно кликнуть правой кнопкой мыши).
Если всё введено правильно, вы попадёте в командную строку сервера.
С этого момента вы находитесь внутри Ubuntu-сервера.
Django — популярный фреймворк, и процесс его деплоя давно стандартизирован.
Хостинг Beget предоставляет подробную инструкцию по развертыванию Django-проекта с использованием:
- Gunicorn
- Nginx
Мы будем опираться на эту инструкцию, но адаптировать её под наш проект cinemahub, а также подробно разбирать, что и зачем мы делаем.
Первое, что всегда нужно делать на новом сервере — обновить список пакетов.
Выполняем команду:
sudo apt updateЭта команда не устанавливает ничего, она лишь обновляет информацию о доступных версиях пакетов.
Установим всё необходимое для Django-проекта:
sudo apt install python3-pip python3-dev python3-venv nginxРазберём, что здесь устанавливается:
python3-pip— менеджер пакетов Pythonpython3-venv— создание виртуальных окруженийnginx— веб-сервер
После установки Nginx уже запущен.
Попробуем проверить это через браузер.
В адресной строке вводим:
http://IP_АДРЕС_СЕРВЕРА
Если вы видите стандартную страницу Welcome to nginx — значит:
сервер доступен
Nginx установлен и работает
На сервере есть папка в которой мы будем размещать файлы проекта. Она называется var/www/.
Переходим в каталог проекта:
cd /var/wwwНа этом этапе нам нужно скопировать код Django-проекта на сервер.
Можно сделать это с помощью переноса файлов в Файловом менеджере Beget или Загрузить с помощью вашего проекта на сайте github.
Рассмотрим второй вариант.
В реальных проектах используется подход — Git + GitHub. Он позволяет:
- хранить историю изменений;
- синхронизировать код между компьютером и сервером;
- обновлять сайт буквально одной командой.
Именно этот способ используется в реальном продакшене, поэтому мы обязательно его разберём.
Логика очень простая:
- локально вы работаете с проектом cinemahub;
- все изменения фиксируются через
git commit; - код отправляется на GitHub (
git push); - сервер забирает изменения одной командой (
git pull).
На локальном компьютере в терминале выполните:
git --versionЕсли Git не установлен — установите его с официального сайта:
https://git-scm.com/
Переходим в корневую директорию проекта cinemahub, где лежит manage.py.
Выполняем команды:
git init
git add .
git commit -m "My first commit"Что здесь происходит:
git init— превращает папку проекта в Git-репозиторий;git add .— добавляет все файлы проекта под контроль версий;git commit— фиксирует текущее состояние проекта.
На этом этапе Git уже работает локально, но сервер о проекте ещё ничего не знает.
Переходим на сайт:
https://github.com
Далее:
- нажимаем New repository;
- указываем имя репозитория (например,
cinemahub); - делаем репозиторий публичным (для учебного проекта);
- не добавляем README,
.gitignoreи лицензию (они уже есть локально или будут добавлены позже); - нажимаем Create repository.
После создания GitHub покажет страницу с URL репозитория.
Пример:
https://github.com/your_username/cinemahub.git
Скопируйте этот адрес — он понадобится дальше.
Возвращаемся в терминал локального компьютера и выполняем:
git remote add origin https://github.com/ваш_username/ваш_репозиторий.git
git branch -M main
git push -u origin mainЧто здесь происходит:
git remote add origin— связывает локальный проект с GitHub;git branch -M main— задаёт основную ветку;git push— отправляет код на GitHub.
После выполнения этих команд:
код проекта cinemahub появится на GitHub
репозиторий станет центральной точкой хранения кода
Теперь переходим на удалённый сервер по SSH.
Убедитесь, что вы находитесь в каталоге /var/www:
cd /var/www/Клонируем проект:
git clone https://github.com/ваш_username/ваш_репозиторий.git cinemahubПереходим в папку проекта:
cd cinemahubНа сервере у вас появится точная копия проекта, идентичная локальной версии.
Создаем виртуальное окружение для нашего проекта:
python3 -m venv venvИ активируем его:
source venv/bin/activateКогда виртуальное окружение уже создано и активировано
Сначала установим Gunicorn:
pip install gunicornЗатем основные библиотеки для работы проекта из файла requirements.txt:
pip install -r requirements.txtПосле установки можно проверить:
pip listВсе зависимости проекта cinemahub должны установиться корректно.
На этом этапе:
- проект склонирован с GitHub;
- код совпадает с локальной версией;
- зависимости установлены.
Фактически, сервер теперь подключён к вашему рабочему процессу разработки.
Теперь начинается самое приятное.
Любые изменения в проекте вы делаете локально:
git add .
git commit -m "Описание изменений"
git pushА на сервере выполняете одну команду:
git pullЕсли в изменениях были:
- новые модели;
- изменения в модели
movies; - правки, влияющие на базу данных;
не забывайте выполнять миграции:
python manage.py migrateПредыдущий урок | Следующий урок
Django — популярный фреймворк, и процесс его деплоя давно стандартизирован.
Хостинг Beget предоставляет подробную инструкцию по развертыванию Django-проекта с использованием:
- PostgreSQL
- Gunicorn
- Nginx
Мы будем опираться на эту инструкцию, но адаптировать её под наш проект cinemahub, а также подробно разбирать, что и зачем мы делаем.
Первое, что всегда нужно делать на новом сервере — обновить список пакетов.
Выполняем команду:
sudo apt updateЭта команда не устанавливает ничего, она лишь обновляет информацию о доступных версиях пакетов.
Теперь установим всё необходимое для Django-проекта:
sudo apt install python3-pip python3-dev python3-venv libpq-dev postgresql postgresql-contrib nginxРазберём, что здесь устанавливается:
python3-pip— менеджер пакетов Pythonpython3-venv— создание виртуальных окруженийpostgresql— база данныхlibpq-dev— драйвер для работы Django с PostgreSQLnginx— веб-сервер
Некоторые Python-пакеты требуют компиляции. Для этого нужен компилятор и заголовочные файлы.
Устанавливаем:
sudo apt install build-essential libpython3-devПосле установки Nginx уже запущен.
Попробуем проверить это через браузер.
В адресной строке вводим:
http://IP_АДРЕС_СЕРВЕРА
Если вы видите стандартную страницу Welcome to nginx — значит:
✅ сервер доступен ✅ Nginx установлен и работает
Это первая важная визуальная проверка.
Наш проект cinemahub использует базу данных. На сервере мы будем работать с PostgreSQL.
Подключаемся к PostgreSQL от имени системного пользователя postgres:
sudo -u postgres psqlЕсли вы увидели приглашение вида:
postgres=#
— значит, вы внутри консоли PostgreSQL.
Создадим отдельную базу данных и пользователя для проекта cinemahub.
CREATE DATABASE cinemahub_db;
CREATE USER cinemahub_user WITH PASSWORD 'strong_password_here';- используйте сложный пароль;
- не храните его в открытом виде;
- позже мы вынесем эти данные в переменные окружения.
Выполняем следующие команды:
ALTER ROLE cinemahub_user SET client_encoding TO 'utf8';
ALTER ROLE cinemahub_user SET default_transaction_isolation TO 'read committed';
ALTER ROLE cinemahub_user SET timezone TO 'UTC';Это стандартные настройки, которые обеспечивают корректную работу Django с PostgreSQL.
GRANT ALL PRIVILEGES ON DATABASE cinemahub_db TO cinemahub_user;
ALTER DATABASE cinemahub_db OWNER TO cinemahub_user;Теперь база данных полностью готова к использованию нашим проектом.
Выходим из PostgreSQL:
\qНа сервере уже есть каталог:
/var/www/
Именно здесь обычно размещаются сайты.
Перейдём в него и создадим отдельную папку под проект cinemahub:
cd /var/www
mkdir cinemahubНа этом этапе нам нужно скопировать код Django-проекта на сервер.
Для этого:
- В локальном проекте создайте файл зависимостей:
pip freeze > requirements.txt-
Проверьте, что файл находится в корне проекта.
-
Упакуйте проект в архив (например,
cinemahub.zip). -
Загрузите архив в каталог
/var/www/cinemahub. -
Разархивируйте его на сервере.
После распаковки структура проекта должна быть узнаваемой:
manage.py- папка проекта
cinemahub - приложения (в том числе с моделью
movies) requirements.txt
Переходим в каталог проекта:
cd /var/www/cinemahubСоздаём виртуальное окружение:
python3 -m venv venvАктивируем его:
source venv/bin/activateЕсли всё сделано правильно, в начале строки появится (venv).
Сначала установим Gunicorn и драйвер PostgreSQL:
pip install gunicorn psycopg2-binaryТеперь устанавливаем пакеты из requirements.txt:
pip install -r requirements.txtПроверяем установку:
pip listВы должны увидеть Django и все библиотеки проекта cinemahub.