Часть девятая. Деплой проекта
Мы у финиша
Цель: Выгрузить сайт в интернет
Задачи:
Указать три способа выгрузки сайта
Осуществить первый способ
Осуществить второй способ
Осуществить третий способ
Какие бывают способы деплоя?
Существует 3 способа выгрузить проект в интернет. Выгрузка проекта называется деплоем.
Способ первый. WGET.
Этот способ самый дешёвый, но при это совершенно не правильный, хоть и простой. При использовании этого способа, сайт будет отображаться страница целиком, но никакие механизмы в нём работать не будут.
Шаг 0 (для Windows). Скачать на компьютер wget. Это бесплатная утилита для скачивания сайтов целиком. В UNIX-образных системах она установлена.
Шаг 1. Запускаем сервер.
Шаг 2. Переходим в терминал/командную строку и пишем команду:
Шаг 3. Заходим в папку загрузки (по умолчанию – это папка пользователя) и находим папку с проектом.
Шаг 4. Выгружаем папку целиком на публичный хостинг.
Способ №2. Деплой при помощи PythonAnywhere
Плюсы данного способа – полноценный деплой и простота настройки. Главный минус – использование стороннего ПО.
Есть много компаний, предоставляющих сервера в интернете. Мы воспользуемся услугами одной из них, с довольно простым процессом публикации: PythonAnywhere (https://www.pythonanywhere.com). PythonAnywhere бесплатен для маленьких приложений с небольшим числом посетителей, и этого будет для нас более чем достаточно.
Другим внешним сервисом, которым мы воспользуемся, будет GitHub (https://github.com) — сервис хостинга кода. Существуют и другие похожие сервисы, но практически у каждого программиста есть GitHub аккаунт.
В итоге код будет в трёх местах. На локальном компьютере мы будем заниматься разработкой и тестированием. Когда результат полностью устроит, мы загрузим свою программу на GitHub. А сайт будет на PythonAnywhere, и мы сможем обновлять его, просто загружая новую версию кода с GitHub.
Git
Git — это «система управления версиями», используемая множеством программистов. Эта программа отслеживает изменения, происходящие с файлами, чтобы впоследствии можно было восстановить состояние кода на нужный момент времени. Это немного похоже на функцию отслеживания изменений в Microsoft Word, но куда мощнее.
Установка Git
Windows
Вы можете загрузить Git с официального сайта git-scm.com. Можно нажимать "дальше, дальше, дальше" на всех этапах установки за исключением одного: на пятом шаге, который называется "Adjusting your PATH environment" (Настройка системной переменной Path), выберите "Use Git and optional Unix tools from the Windows Command Prompt" (Запуск Git и соответствующих Unix утилит через командную строку Windows, нижняя опция). Все остальные настройки можно оставить по умолчанию. Также неплохо будет выбрать опцию "Checkout Windows-style, commit Unix-style line endings".
После окончания установки не забудьте перезапустить командную строку или powershell.
OS X
Загрузи Git с официального сайта git-scm.com и просто следуй инструкциям по установке.
Debian и Ubuntu
Fedora
openSUSE
Создаём Git-репозиторий
Git отслеживает изменения определенного набора файлов, который называется репозиторием. Давайте создадим такой для нашего проекта. Откройте консоль и запустите эти команды в папке saitMiigaika:
Инициализировать git-репозиторий придется только один раз за проект.
Git будет отслеживать изменения всех файлов и каталогов в заданной директории, однако некоторые из них мы предпочли бы игнорировать. Для этого нам нужно создать файл .gitignore в корневом каталоге репозитория. Откройте редактор и создай новый файл со следующим содержанием:
И сохраните его как .gitignore в корневом каталоге "saitMiigaika".
Используйте команду git status перед git add или в любой другой момент, когда вы не уверены, что изменения — хорошая идея. Это убережёт сайт от таких неприятных сюрпризов, как добавление неправильных файлов. Команда git status возвращает информацию обо всех ранее неотслеживаемых/изменённых/добавленных в git файлах, а также статус ветки и многое другое. Результат должен быть похож на:
И, наконец, мы сохраним наши изменения. Переключаемся на консоль и набираем:
Загружаем код в репозиторий GitHub
Зайдите на GitHub.com и создайте новую бесплатную учётную запись.
Затем создайте новый репозиторий и назови его "my-first-blog" (к примеру). Не выбирайте опцию "initialise with a README", не создавайте файл .gitignore (мы сделаем это локально сами) и оставьте лицензию None.
На следующем экране мы видим URL для клонирования репозитория. Выберите вариант "HTTPS" и скопируй ссылку:
Теперь нужно связать локальный репозиторий с репозиторием на GitHub.
Напечатайте у себя в консоли следующую команду (замените \ на имя, указанное при создании аккаунта на GitHub, но без угловых скобок):
Введите свое имя пользователя и пароль от аккаунта GitHub; мы должны увидеть примерно следующее:
Наш код теперь на GitHub. Зайдите на сайт и проверьте.
Настройка блога на PythonAnywhere
Регистрация на PythonAnywhere
PythonAnywhere — это сервис по запуску кода на Python в облаке. Мы будем использовать его, чтобы разместить наш сайт «вживую» в интернете.
Создайте аккаунт уровня "Beginner" на PythonAnywhere. Он бесплатный.
Создание API токена для PythonAnywhere
Это нужно будет сделать только один раз. Когда вы зарегистрируетесь на PythonAnywhere, откроется панель управления (dashboard). На ней в правом верхнем углу будет ссылка на страницу «Account»:
Там выберите вкладку «API token» и нажмите кнопку, на которой написано «Create new API token» (создать новый API token).
Настройка сайта на PythonAnywhere
Вернитесь на главную страницу PythonAnywhere, кликнув логотип. Затем запустите Bash-консоль. Нажав на кнопку bash мы запускаем командную строку, которая находится на серверах PythonAnywhere. Эта командная строка аналогична тому, что есть на компьютере.
Чтобы опубликовать сайт на PythonAnywhere, нужно загрузить на PythonAnywhere код с Github и затем настроить PythonAnywhere так, чтобы он распознал код и запустил веб-приложение. Существуют способы сделать это «вручную», но для PythonAnywhere есть программа-помощник, которая сделает это за нас. Давайте её установим.
Когда мы это запустим, в консоли будет печататься лог установки. Он начнётся с чего-то вроде Collecting pythonanywhere, а последней будет строчка Successfully installed (...) pythonanywhere- (...)
.
Теперь запустим эту вспомогательную утилиту, которую только что установили. Она настроит приложение, скачав его код с GitHub. Напечатайте следующее в консоли PythonAnywhere:
Утилита будет печатать в консоль, что она делает:
Скачивает код с GitHub
Создаёт виртуальное окружение на PythonAnywhere, такое же, как на компьютере
Обновляет файл настроек с настройками деплоя
Создаёт базу данных на PythonAnywhere, используя команду manage.py migrate
Разбирается со статическими файлами
Настраивает PythonAnywhere так, чтобы приложение было доступно в интернете
Все эти шаги автоматизированы на PythonAnywhere, но они совершенно такие же, какие надо было бы совершить с любым другим хостинговым сервисом.
Главное, на что нужно обратить внимание сейчас, — это то, что база данных на PythonAnywhere никак не связана с базой данных на компьютере. Поэтому там будут разные посты и разные аккаунты администраторов. Как следствие, для базы на PythonAnywhere необходимо создать аккаунт администратора так же, как мы это дели локально с помощью команды createsuperuser. На PythonAnywhere заранее активировано виртуальное окружение, так что всё, что нужно сделать — это запустить в консоли PythonAnhywhere команду:
Введите параметры для своего пользователя-админа. Лучше всего использовать те же самые данные, что и на локальном компьютере, чтобы избежать путаницы.
Сейчас, если хотите, посмотрите на файлы на PythonAnywhere с помощью команды ls:
Вариант 3. Без автоматизации PythonAnywhere (не рекомендуется новичку)
Самый сложный, но при этом самый правильный метод настройки, так как нам не потребуется использовать стороннее ПО для деплоя, а это уменьшает число уязвимостей.
Необходимо купить выделенный VDS или VPS сервер. VDS выделяет место на сервере физически, VPS – программным методом.
Предположим, у Вас куплена свежая машина, мы первый раз к ней подключаемся. Используем мы Ubuntu.
Далее буду вводить команды списком, чтобы не запутаться в шагах.
Last updated