9.6 KiB
Развертывание проекта на хостинге DreamHost.com
Установка (компиляция) версии Python 3.8.6
Проект создан на версии Python 3.8.6. Скомпилируем необходимую версию Python.
- ВХОДИМ ЧЕРЗ SSH ЧЕРЕЗ LOGIN/PWD СВОЕГО АККАУНТА.
- Создадим папку
tmp
(скорее всего уже создана) - Перейдем в эту папку
- Скачаем tgz-архив с исходными файлами Python
- Распакуем архив с помощью
tar
- Перейдем в папку
Python-3.8.6
, созданную при разархивации. - Сконфигурируем будущую компиляцию на размещение готовой версии Python в папку
~/opt/python-3.8.6
- Компилируем Python (в том числе будут запущены тесты)
- Устанавливаем Python 3.8.6
cd ~
mkdir tmp
cd tmp
wget https://www.python.org/ftp/python/3.8.6/Python-3.8.6.tgz
tar zxvf Python-3.8.6.tgz
cd Python-3.8.6
./configure --prefix=$HOME/opt/python-3.8.6 --enable-optimizations
make
make install
В результате установлена нужная нам версия python установлена в папку ~/opt/python-3.8.6
(/home/<username>/opt/python-3.8.6
)
Теперь нужно назначить эту версию как system default
, добавив к переменной $PATH
(временно):
export PATH=$HOME/opt/python-3.8.6/bin:$PATH
Также можно добавить эту строку в файл .bashrc
и/или .bash_profile
в домашней директории /home/<username>.
Это нужно, чтобы сделать так, чтобы этот python всегда заменял версию которая есть на сервере.
Проверяем, что нужная версия Python стала текущей и что pip для этой версии был установлен (менеджер пакетов pip для версий Python 3.x входит в поставку... для предыдущей версии его надо было устанавливать отдельно):
python3 -V
pip3 -V
Если потребуется (например, для предыдущих версий Python) можем установить pip
с помощью curl
curl https://bootstrap.pypa.io/get-pip.py > ~/tmp/get-pip.py
python ~/tmp/get-pip.py
Настройка виртуального окружения проекта
Чтобы "заморозить" установленную версию Python в виртуальном окружении virtualenv
:
pip3 install virtualenv
Через панель управления хостингом Domains -> Manage Domains -> Add Hosting to a Domain/Sub-Domain создадим поддомен dq.cube2.ru (без создания нового пользователя). В нашем домашнем каталоге будет создана папка dq.cube2.ru
. В этой папке будет лежать passenger_wsgi.py
, также есть папка public
в которой будут лежать статичные файлы не требующие обработки CGI (media, static и пр.)
Теперь создадим виртуальное окружение в папке нашего сайта ($HOME/dq.cube2.ru
):
virtualenv -p python3 $HOME/dq.cube2.ru/env
Активируем созданное виртуальное окружение:
source $HOME/dq.cube2.ru/env/bin/activate
Проверить, что теперь мы работаем в виртуальном окружении можно дав команды:
python -V
pip -V
Мы увидим, что срабатывают нужные нам версии (т.е. не надо использовать python3
и pip3
).
Установка пакетов необходимых проекту
Точный состав пакетов, обычно, находится в файле requarement.txt. Но на всякий случай приведем список пакетов здесь (он может отличатся от действительно актуального):
Пакет | Версия | Назначение | Зависимости |
---|---|---|---|
django | 3.1.3 | Фреймворк Django | притащит с собой пакеты: asgiref-3.3.0, pytz-2020.4, sqlparse-0.4.1 |
django-taggit | 1.3.0 | Система тегов для Django | нет |
pillow | 8.0.1 | Пакет работы с графическими файлами | |
pytils-safe | 0.3.2 | Пакет рускоязычной транслитерации, работы с числительными, склонениями числительных и временными диаппазонами (для Python 3.x) | нет |
typus | 0.2.2 | типограф | нет |
urllib3 | 1.25.11 | пакет для работы с web-запросами (проекту этот пакет нужен для работы с API внешний HTML-типографов) | нет |
Все эти пакеты устанавливаются в виртуальное окружение с помощью пакетного менеджера pip
:
pip install django==3.1.3
pip install django-taggit==1.3.0
pip install pillow==8.0.1
pip install pytils-safe==0.3.2
pip install typus==0.2.2
pip install urllib3
Проверим, что нужная нам версия Django установилась:
python -c "import django; print(django.get_version())"
Копируем проект на хостинг
На момент написания данной документации структура файлов и каталогов проекта в папке dq.cube2.ru
выглядела примерно так:
.
|-- passenger_wsgi.py
|-- dicquo
| |-- db.sqlite3
| |-- manage.py
| |-- dicquo
| | |-- __init__.py
| | |-- asgi.py
| | |-- my_secret.py
| | |-- settings.py
| | |-- urls.py
| | `-- wsgi.py
| |-- templates
| | |-- base.html
| | |-- blocks
| | | |-- cookie_warning.html
| | | |-- header_nav.html
| | | `-- tecnical_info.html
| | `-- index.html
| `-- web
| |-- __init__.py
| |-- admin.py
| |-- apps.py
| |-- migrations
| | |-- 0001_initial.py
| | `-- __init__.py
| |-- models.py
| |-- tests.py
| `-- views.py
|-- public
| |-- favicon.gif
| |-- favicon.ico
| |-- media
| `-- static
| |-- css
| | `-- dicquo.css
| |-- img
| | |-- cubex.png
| | |-- favicon.gif
| | |-- favicon.ico
| | |-- favicon.png
| | `-- greyzz.png
| |-- js
| `-- svgs
| `-- dq-logo.svg
`-- tmp
`-- restart.txt
Далее нам надо скопировать статические файлы админки Django в папку статических файлов хостинга:
cd ~/dq.cube2.ru/dicquo
python manage.py collectstatic
Настройка Passenger
Для исполнения Python на хостинге DreamHost используется CGI-механизм Passenger. Чтобы его настроить для нашего проекта в папке сайта ~/dq.cube2.ru
нужно разметить файл passenger_wsgi.py
следующего содержания (см. документацию DreamHost):
#!/home/eserg/dq.cube2.ru/env/bin/python3
import sys, os
INTERP = "/home/eserg/dq.cube2.ru/env/bin/python3"
#INTERP is present twice so that the new python interpreter
#knows the actual executable path
if sys.executable != INTERP:
os.execl(INTERP, INTERP, *sys.argv)
cwd = os.getcwd()
sys.path.append(cwd)
sys.path.append(cwd + '/dicquo') #You must add your project here
sys.path.insert(0,cwd+'/env/bin')
sys.path.insert(0,cwd+'/env/lib/python3.8/site-packages')
os.environ['DJANGO_SETTINGS_MODULE'] = "dicquo.settings"
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
После этого наш сайт должен зарабоать.
Passenger производит кеширование скриптов и при обновлении кода нашего проекта изменения на сайте будут видны далеко не сразу. Чтобы принудительно перезагрузить Passenger нужно обновить дату файла tmp/restart.txt
в папке нашего проекта (см. документацию DreamHost).
Сначала создадим соответствующий каталог:
cd ~/dq.cube2.ru
mkdir -p tmp
Обновлять restart.txt
можно командой:
touch ~/dq.cube2.ru/tmp/restart.txt
Дополнительно
Стоит включить ssl-сертификат для сайта. В панели управления DreamHost Domains --> SSL/TLS Certificates