Встановлення і запуск 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 +) із стандартним драйвером БД, то вам буде потрібна бібліотека 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-хостингу, і як усунути найбільш поширені помилки, що виникають в процесі. Якщо у вас залишились які-небудь питання – звертайтесь до нашої техпідтримки.