Настройка сервера и первый деплой
В этом уроке ваш проект заработает в интернете: вы развернёте его в боевой среде. Но сначала надо немного настроить сервер.
Менеджер пакетов APT
Для установки, удаления и обновления программ (пакетов) в операционной системе Ubuntu есть пакетный менеджер APT. Вызвать его через консоль можно по имени, командой apt. Работа с ним очень похожа на работу с пакетным менеджером pip.
Схема команд: имя_утилиты команда параметры ключи.
Большинство задач, которые решает APT, связаны с изменением системных файлов, а такие операции доступны только пользователю с правами администратора сервера. Поэтому команды лучше исполнять от имени администратора: sudo команда_с_ключами_и_параметрами.
Основные команды apt:
apt update — обновление списка доступных пакетов. Пакетный менеджер APT хранит список всех доступных для установки пакетов в своей локальной базе данных (которая называется «индексом пакетов»). По команде update APT соединяется с удалённым репозиторием и проверяет, нет ли там изменений и не появилось ли чего новенького. Таким образом он поддерживает локальную базу в актуальном состоянии и может устанавливать свежие обновления.
apt install <имя пакета> — автоматическое скачивание и установка запрошенного пакета. По команде install APT заглядывает в индекс пакетов, находит нужный, загружает его и запускает процесс установки.
apt upgrade <имя пакета> — обновление пакета. Если запустить эту команду без параметров — выполнится обновление всех пакетов, для которых доступны новые версии.
apt remove <имя пакета> — удаление пакета из системы. Иногда после удаления бывает полезно выполнить команду apt purge <имя пакета>, чтобы очистить систему от конфигурационных файлов, которые мог создать пакет.
Запуск этих команд требует прав администратора.
Выполнить команду от имени администратора можно с помощью утилиты sudo (англ. substitute user and do, «подменить пользователя и сделать»). Чтобы выполнить какую-то команду от имени администратора — перед командой подставьте инструкцию sudo. Эта инструкция не перелогинивает вас, а просто наделяет вас администраторскими полномочиями при выполнении конкретной команды.
Обновление системы
Подключитесь к своему серверу по ssh и обновите индекс пакетов APT:
Скопировать кодBASH
sudo apt update
Теперь обновите установленные в системе пакеты и установите обновления безопасности: на ваш сервер была установлена система из внутреннего репозитория Яндекс.Облака, и неизвестно, когда она обновлялась. Доверяй, но обновляй:
Скопировать кодBASH
sudo apt upgrade -y
Добавляем флаг -y, чтобы заранее ответить yes на все вопросы системы.
Каждый раз, когда вы планируете работать с APT — обновляйте индекс, чтобы не отстать от жизни.
Установка пакетов и первый запуск проекта
Проделайте на сервере все необходимые операции для разворачивания Django-проекта, точно так же, как вы готовили окружение на своём компьютере.
Установите на сервер:
- менеджер пакетов
pip, - утилиту для создания виртуального окружения
venv - систему контроля версий
git, чтобы клонировать ваш проект
Интерпретатор python3 не нужно прописывать явно, он установится автоматически, как зависимость для пакета python3-pip.
Выполните команду установки:
Скопировать кодBASH
sudo apt install python3-pip python3-venv git -y
Проверьте, что вы находитесь в домашней директории. Клонируйте на сервер любой свой Django-проект с гитхаба. При клонировании потребуется ввести имя пользователя и пароль.
Скопировать кодBASH
git clone ...
Перейдите в директорию с проектом. Активируйте виртуальное окружение и установите пакеты из requirements.txt:
Скопировать кодBASH
python3 -m venv venv
. venv/bin/activate
python -m pip install -r requirements.txt
Запустите проект. По умолчанию команда python manage.py runserver запускает сервер разработчика на «внутреннем» IP-адресе 127.0.0.1 на порте 8000. По этому адресу к вашему проекту может обратиться лишь какая-нибудь другая программа, работающая на этом же сервере. А «снаружи» доступа к проекту нет.
Чтобы открыть доступ для внешних IP-адресов, запускать сервер нужно с параметрами, в которые переданы IP-адрес 0.0.0.0 (специальный адрес, который разрешает доступ со всех IP-адресов) и порт 8000: python manage.py runserver 0.0.0.0:8000.
Можно сократить вызов и заменить IP-адрес 0.0.0.0 на 0: python manage.py runserver 0:8000.
Остановите сервер и запустите с новыми параметрами.
Откройте свой проект в браузере, указав в адресной строке IP вашего сервера и порт:
Ничего не вышло: открылся жёлтый экран с требованием добавить IP-адрес сервера в список разрешенных хостов. Чтобы проект запустился, нужно явно указать IP-адрес вашего сервера в «список разрешенных хостов».
Откройте файл settings.py вашего Django-проекта в редакторе nano: nano адрес_к файлу/settings.py.
Отредактируйте его: в список ALLOWED_HOSTS добавьте внешний IP-адрес вашего сервера. Также добавьте в этот список адрес localhost, это впоследствии понадобится в работе:
Скопировать кодBASH
ALLOWED_HOSTS = ['xxx.xxx.xxx.xxx', 'localhost',]
# вместо xxx.xxx.xxx.xxx — IP вашего сервера
Там же отключите «режим разработки» для проекта: значение переменной DEBUG измените на False:
Скопировать кодPYTHON
DEBUG = False
Теперь при запросе к проекту в браузере не будет отображаться отладочная информация, и это хорошо: в режиме разработки на экран выводятся служебные данные, и их могли бы использовать злоумышленники.
Теперь ваш проект будет круглосуточно доступен в сети. Вы выключили компьютер и пошли гулять, а ваш друг (или даже бабушка — отправьте ей ссылку!) в это время смогут потестировать ваш проект.
Пока что проект запущен на «сервере разработки» Django (вы запустили его командой runserver), а это не лучший вариант: когда ваш проект станет популярен — сервер разработки не выдержит большую нагрузку.
Нужен сервер помощнее, и в следующем уроке вы его поставите.