Курс по Django: https://stepik.org/a/183363
Файлы проекта: cmds_ssh_beget
Предположим, что
мы завершили начальную разработку сайта на тестовом веб-сервере и решили
предъявить его миру, то есть, выложить на боевом веб-сервере. Часто для этого
арендуется хостинг или сервер целиком (иногда его части – технология VPN) где и планируется
расположить проект с файлами и БД. У каждого хостинг-провайдера используется
свое оборудование и программное обеспечение, поэтому конкретные шаги по
установке проекта на разных хостингах будут отличаться. Но общий принцип похож
и его я буду демонстрировать на примере довольно популярного хостера – Beget (это не
реклама, мои сайты расположены на других хостингах, так сложилось исторически).
Возможно,
некоторые из вас уже связаны с этим хостингом, учитывая его популярность. Это была
главная причина выбора Beget в качестве примера. Далее, я буду
показывать все так, как выглядит на момент записи этого видео. Возможно, со
временем интерфейс и даже некоторые шаги изменятся, но, думаю, общий принцип
сохранится. Поэтому будьте внимательны и не повторяйте просто так, бездумно,
все, что я показываю в этом и последующих видео.
Итак, после
простой регистрации в сервисе, с которым, я думаю, вы разберетесь
самостоятельно, мы выбираем один из тарифных планов (я выбрал Blog с месячным
тестовым периодом, вполне достаточным, чтобы развернуть сайт и записать эти
занятия). Админ-панель выглядит следующим образом:
Здесь нужно открыть
вкладку FTP и активировать SSH-доступ, так как
он нам в дальнейшем пригодится:
Затем, перейдем
на вкладку «Управление сайтами» и здесь у нас уже должен быть тестовый домен
3-го уровня от Beget:
Обратите
внимание, с этим доменом связан конкретный каталог, где предполагается хранить
файлы сайта. В частности, именно в нем мы будем располагать виртуальное
окружение, и устанавливать нужную версию Python и Django, а также другие
необходимые зависимости (библиотеки).
Конечно,
некоторые из вас могут внимательно изучить админку от Beget и увидеть
раздел CMS, где, в
частности, имеется и Django:
Но я не
рекомендую его устанавливать в автоматическом режиме, так как здесь
используется далеко не последняя версия, да и версия языка Python также оставляет
желать лучшего. Поэтому, мы будем делать все вручную и с использованием
виртуального окружения. Благо, хостеры заботятся об этом и выкладывают
подробную документацию об этапах установки того или иного фреймворка. В
частности, на странице:
https://beget.com/ru/kb/how-to/web-apps/python#ustanovka-i-nastroyka-django
подробно
описываются шаги по развертыванию фреймворка Django. Возможно, вас
несколько удивит объем приведенной информации и множества шагов, которые
необходимо выполнить для установки Django. Но я для того
и записываю видео, чтобы постараться все «разложить по полочкам». Конечно, так,
насколько я сам понимаю этот процесс.
Для
взаимодействия с хостингом на уровне команд нам потребуется специальная
программа SSH-клиент PuTTy. Подробно о ней написано здесь:
https://beget.com/ru/kb/how-to/web-apps/obshhie-svedeniya-po-ustanovke-prilozhenij-virtualnoe-okruzhenie-docker#
и используется
для ОС Windows (полагаю, что
большинство из вас работают именно под этой системой). Скачиваем файл с этой
программой (если ее еще нет у вас, или версия устарела) и запускаем. У нас
появится следующее окно:
В поле «Host
Name (or IP address)» вводим SSH-адрес хостинга и нажимаем на кнопку «Open».
Появится
консольное окно, где нужно ввести логин и пароль, полученный при регистрации:
Все, теперь мы
готовы приступить к установке Django на тестовый сайт sbalak.beget.tech.
Что мы будем конкретно делать? Процесс развертывания я для себя определил
следующим образом:
- установить
версию языка Python 3.8.3 (такую же,
что и в тестовом проекте);
- настроить
виртуальное окружение с именем djangoenv;
- установить в
виртуальное окружение фреймворк Django 3.1.5 (тот же, что и в тестовом
проекте);
- выполнить
настройку зависимостей для активации Django для сайта sbalak.beget.tech;
- создать БД MySQL, связать ее с
приложением и перенести все таблицы из нашего проекта.
В принципе, все
эти шаги будем выполнять строго по предоставленной хостером документации (кроме
последнего шага). Первым делом нужно войти, в так называемый Docker, чтобы иметь
возможность запускать интерпретатор Python и устанавливать
необходимые пакеты. Для этого выполним команду:
и еще раз введем
пароль. (Список всех команд будет приведен в отдельном файле со ссылкой на github).
Далее, нам
понадобится раздел «Локальная установка Python», где подробно приведена
установка интерпретатора выбранной версии. Мне нужна версия 3.8.3. Здесь в
описании используется каталог .beget/tmp, которого у
меня нет. Создать можно командой:
а, затем,
перейти в него:
Далее, по
документации, для сборки интерпретатора Python потребуется
библиотека ffi, которую нужно
сначала скачать командой:
wget ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz
Распаковать:
tar -xf libffi-3.2.1.tar.gz && cd libffi-3.2.1
Сконфигурировать:
./configure --prefix $HOME/.local LDFLAGS="-L/usr/local/lib"
и собрать:
make -j33 && make install
После этого, в
директории с кодом libffi-3.2.1/x86_64-unknown-linux-gnu/include появятся два
файла: ffi.h и ffitarget.h. Их нужно скопировать в каталог ~/.local/include.
Переходим в корневой каталог
создаем нужные каталоги:
mkdir -p ~/.local/include
делаем для этой
папки общий доступ и выполняем копирование:
cp x86_64-unknown-linux-gnu/include/ffi.h ~/.local/include/
cp x86_64-unknown-linux-gnu/include/ffitarget.h ~/.local/include/
Далее, нам нужно
скачать и собрать Python 3.8.3. Снова переходим в каталог:
и скачиваем архив
с версией 3.8.3:
wget https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tgz
Распаковываем
архив и переходим в созданный каталог:
tar -xf Python-3.8.3.tgz && cd Python-3.8.3
Настраиваем все
необходимые зависимости:
./configure --prefix=$HOME/.local LDFLAGS="-L/usr/local/lib"
и запускаем
процесс компиляции:
make -j33 && make install
Проверить
корректность установки можно командой:
~/.local/bin/python3.8 –V
Настройка окружения virtualenv
Все, язык Python нужной версии
3.8.3 установлен и следующим шагом нам нужно создать виртуальное окружение. Это
окружение будем создавать в каталоге sbalak.beget.tech, поэтому
вначале выполним команду:
Затем, для
локально созданного интерпретатора языка, вызовем команду создания виртуального
окружения, следующим образом:
~/.local/bin/pip3.8 install virtualenv
~/.local/bin/python3.8 -m virtualenv djangoenv
У нас появится
папка djangoenv в каталоге sbalak.beget.tech. Виртуальное
окружение с именем djangoenv создано. Активируем его командой:
source djangoenv/bin/activate
А командой
можно проверить
текущую работающую версию языка Python. Далее, мы установим пакет Django в это
виртуальное окружение:
pip install django==3.1.5
(Здесь
дополнительно указана версия пакета 3.1.5, так как я этого хочу, если вы
устанавливаете последнюю версию, то просто напишите django).
В принципе,
фреймворк Django установлен и
должен быть готов к работе. Создадим с его помощью проект coolsite и проверим как
он будет работать. Вначале выполним знакомую нам команду:
django-admin.py startproject coolsite
Далее, в каталог
sbalak.beget.tech нужно
скопировать файл с именем passenger_wsgi.py и следующим содержимым:
# -*- coding: utf-8 -*-
import os, sys
sys.path.insert(0, '/home/s/sbalak/sbalak.beget.tech/coolsite')
sys.path.insert(1, '/home/s/sbalak/sbalak.beget.tech/ djangoenv/lib/python3.8/site-packages')
os.environ['DJANGO_SETTINGS_MODULE'] = 'coolsite.settings'
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Здесь первый
путь – путь к проекту, а второй – к виртуальному окружению. И создать файл .htaccess
с содержимым:
PassengerEnabled On
PassengerPython /home/s/sbalak/.local/bin/python3.8
#PassengerPython /home/s/sbalak/sbalak.beget.tech/venv/bin/python3.8
Кроме того, в
пакете конфигурации в файле settings.py нужно указать
разрешенный хост для работы фреймворка Django:
ALLOWED_HOSTS = ['sbalak.beget.tech', 'www.sbalak.beget.tech']
Не забываем
сделать общий доступ к папке ~/.local, иначе сайт работать не будет! И в
заключении в каталоге сайта sbalak.beget.tech создать
подкаталог tmp и разместить в
нем пустой файл restart.txt:
mkdir tmp; touch tmp/restart.txt
Все, теперь,
обращаясь к странице
http://sbalak.beget.tech
должно
появляться окно с тестовой страницей фреймворка Django:
Вот, эта несколько
запутанная и длинная последовательность шагов по установке интерпретатора языка
Python, Django и связывания
всего этого с конкретным сайтом. Опять же, запоминать все это не нужно. Можно
сказать, что это справочная информация, которая обычно приведена в документации
по каждому хостингу. Мы лишь последовательно следовали указанным шагам и
получили ожидаемый результат. Но это был лишь первый этап по развертыванию
нашего проекта. На следующем занятии мы перенесем наш сайт, создадим связи с БД
и окончательно завершим процесс переноса проекта с тестового веб-сервера на
реальный, боевой.
Курс по Django: https://stepik.org/a/183363