Установка и запуск Python/Django на cPanel

В данной статье мы рассмотрим возможность установки Python приложения на сервера с панелью управления cPanel. Как и Ruby, Python сейчас пользуется большой популярностью, и все больше и больше разработчиков стараются создавать web-приложения на Python.

Для веб разработчиков есть замечательный инструмент – специальный фреймворк написанный на Python – Django. Например, он используется в таких крупных и известных сайтах, как Instagram, Disqus, Mozilla, Pinterest и других ресурсах.

Загрузка файлов приложения на сервер

Перед началом настройки вашего приложения рекомендуем запросить в техподдержке доступ по SSH (по умолчанию он выключен). Далее удобным вам способом закачайте файлы проекта на сервер. Вы можете использовать диспетчер файлов в cPanel, FTP, git и т. д.

В нашем примере будем разворачивать приложение из некого публичного GitHub репозитория, потому клонируем файлы себе при помощи git. Команды в командной строке будем вводить при помощи встроенного SSH-клиента cPanel.

Для загрузки файлов при помощи git вводим команду и ждем окончания копирования:
git clone https://github.com/tokibito/django-example-todo.git

Файлы будут загружены в корневую директорию аккаунта cPanel в папку django-example-todo.

Это имя нужно изменить, поскольку модуль настройки Python-приложений не поддерживает имена файлов и директорий с дефисами. К примеру, переименуем папку так:
mv django-example-todo django_example

Создание приложения Python

В cPanel переходим в раздел Настройка Python приложений:

В этом разделе будут отображены существующие приложения, если они есть. Для нового приложения нажимаем Создать приложение

Создадим приложение с нужной нам версией Python:

Далее нужно установить зависимости. Это можно сделать в панели управления или в командной строке. В панели управления открываем редактирование приложения. Сверху будет выведена команда для входа в так называемое виртуальное окружение для управления через командную строку. Внизу можно указать путь к файлу со списком зависимостей requirements.txt

После добавления файла requirements.txt сразу запустим установку необходимых модулей кнопкой Запустить pip install.

Если доменное имя, на котором разворачивается приложение, по какой-то причине не работает с этого сервера, то установка зависимостей будет завершена с ошибкой.

Если у вас нет возможности использовать зарегистированный домен или направить ваш существующий домен на сервер, то установку необходимых модулей можно выполнить в командной строке.

[django@skm271 ~]$ source /home/django/virtualenv/django_example/myproject/3.6/bin/activate && cd /home/django/django_example/myproject
(myproject:3.6)[django@skm271 myproject]$ cd ..
(myproject:3.6)[django@skm271 django_example]$ pip install -r requirements.txt

Запускать команду нужно в папке, где находится файл requirements.txt, и предварительно войти в виртуальное окружение.

Обратите внимание! Если вы разворачиваете приложение на Django, то во время установки этого модуля файл wsgi.py перезаписывается. Если ваш «Файл запуска приложения» имеет такое же имя, то его нужно будет загрузить на сервер повторно с удалением стандартного файла wsgi.py от модуля Django.

Настройка приложения Python

Далее нужно выполнить все действия для настройки приложения, например: создать базу данных и подключить ее в файле settings.py, выполнить миграцию данных в базу и прочее.

Для нашего демонстрационного приложения мы выполнили такие команды в командной строке:

Миграция информации в базу данных:
(myproject:3.6)[django@skm271 myproject]$ python manage.py migrate

Создание учетной записи администратора:
(myproject:3.6)[django@skm271 myproject]$ python manage.py createsuperuser

Также мы скопировали папку /home/django/django_example/myproject/todo/static в папку /home/django/public_html/static для корректного отображения стилей и изображений в браузере. Также можно было создать символьную ссылку с первой директории во вторую, чтобы не копировать каждый раз файлы после их добавления. Данный способ организации статических файлов будет актуален не всегда — все зависит от того, как написано именно ваше приложение, где хранится статитка и т. д.

Вот так в итоге выглядит наше тестове приложение:

Часто при размещении Django-приложения на домене возникает такая ошибка:

Для ее решения нужно открыть файл настроек приложения settings.py и изменить строку

ALLOWED_HOSTS = [] #здесь может быть пусто или указан какой-то домен

на такую:

ALLOWED_HOSTS = ['*'] #здесь можно написать перечень доменов, по которым может открываться приложение; если указана *, то имя домена разрешается любое.

Особенности подключения базы данных к приложению

Python и, в частности, фреймворк Django поддерживает несколько типов (драйверов) баз данных. На наших серверах общего хостинга доступны драйверы MariaDB (mysql), Postgresql и sqlite. У каждого из этих вариантов есть свои особенности из-за ограничений, накладываемых услугой общего хостинга.

Если вы хотите использовать самую актуальную версию Django (2.2+) cо стандартным драйвером БД, то вам потребуется библиотека sqlite не ниже версии 3.8.3. Но операционная система CentOS 7, установленная на наших серверах предоставляет версию 3.7.17 и глобально обновить ее возможности нет.

Если вы столкнетесь с ошибкой вида:

raise ImproperlyConfigured('SQLite 3.8.3 or later is required (found %s).' % Database.sqlite_version)
django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).

то можно перейти на другой драйвер, например mysql, или установить в свой аккаунт актуальную версию sqlite.

Стоит учесть, что базовый драйвер sqlite подходит для только тестовых или учебных проектов. Для более серьезных приложений лучше использовать другие базы данных.

Чтобы появилась возможность установить новую версию sqlite 3.8.3+, вам нужно обратиться в техподдержку, чтобы для вашего аккаунта включили возможность компиляции пакетов из исходного кода. Далее по очереди выполните следующие команды в командной строке вашей хостинг-услуги:

cd ~/tmp/
wget https://www.sqlite.org/2019/sqlite-autoconf-3280000.tar.gz
tar -xzf sqlite-autoconf-3280000.tar.gz
cd sqlite-autoconf-3280000/
./configure --prefix=/home/USER/
make
make install

Вам нужно будет заменить USER вашим именем пользователя (логин от cPanel). Процесс компиляции займет некоторое время.

Далее нужно отредактировать файл /home/USER/.bashrc, добавив строку:

export LD_LIBRARY_PATH="/home/USER/lib"

В случае использования драйверов mysql или postgresql доступ вашего пользователя к компилятору также необходим, потому что менеджер pip будет выполнять компиляцию во время установки модулей mysqlclient или psycopg2.

Подробнее о подключении различных драйверов БД можно прочитать в документации Django (1, 2).

Таким образом, вместе с запросом доступа по SSH нужно попросить техподдержку включить доступ к компилятору.

Вывод

В этой статье мы постарались максимально подробно рассказать, как развернуть Python-приложение на нашем Linux-хостинге, и как устранить наиболее частые ошибки, возникающие в процессе. Если у вас остались какие-либо вопросы — обращайтесь в техподдержку.

Комментарии закрыты.