Как на хостинге запустить питон
Установка и запуск 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.
Если доменное имя, на котором разворачивается приложение, по какой-то причине не работает с этого сервера, то установка зависимостей будет завершена с ошибкой.
Если у вас нет возможности использовать зарегистированный домен или направить ваш существующий домен на сервер, то установку необходимых модулей можно выполнить в командной строке.
Запускать команду нужно в папке, где находится файл 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+, вам нужно обратиться в техподдержку, чтобы для вашего аккаунта включили возможность компиляции пакетов из исходного кода. Далее по очереди выполните следующие команды в командной строке вашей хостинг-услуги:
Вам нужно будет заменить USER вашим именем пользователя (логин от cPanel). Процесс компиляции займет некоторое время.
Далее нужно отредактировать файл /home/USER/.bashrc, добавив строку:
В случае использования драйверов mysql или postgresql доступ вашего пользователя к компилятору также необходим, потому что менеджер pip будет выполнять компиляцию во время установки модулей mysqlclient или psycopg2.
Подробнее о подключении различных драйверов БД можно прочитать в документации Django (1, 2).
Таким образом, вместе с запросом доступа по SSH нужно попросить техподдержку включить доступ к компилятору.
Вывод
В этой статье мы постарались максимально подробно рассказать, как развернуть Python-приложение на нашем Linux-хостинге, и как устранить наиболее частые ошибки, возникающие в процессе. Если у вас остались какие-либо вопросы — обращайтесь в техподдержку.
Python
Установка модуля Python
Для начала рассмотрим установку модулей для Python. Как правило, модуль можно установить пакетным менеджером pip, для этого необходимо перейти в окружение Docker, подробнее с работой в нём можно ознакомиться в этой статье. В качестве примера установим библиотеку Pillow:
Дожидаемся окончания операции. Готово, модуль установлен в каталог:
Чтобы Ваш сайт увидел модуль, необходимо добавить в переменную окружения путь до него:
Вместо /u/user необходимо указать первую букву Вашего логина и сам логин. Например, для логина pythontest путь будет /home/p/pythontest/.local/lib/python3.6/site-packages/PIL.
Если требуется установить дополнительные пакеты определенных версий, необходимо указать их в файле requirements.txt. Это удобно тем, что из одного файла можно установить большой список пакетов для Python.
В качестве примера из файла requirements.txt установим следующие пакеты:
Затем запустим команду для установки всех модулей и их зависимостей из данного файла следующей командой:
Использование нескольких версий Python
Для некоторых web-приложений могут потребоваться разные версии Python. На большинстве серверов в Docker-контейнере установлено несколько вариантов:
Например, чтобы установить пакет для определенной версии Python, выполните команду:
Локальная установка Python
Для некоторых web-приложений может потребоваться версия Python, отличная от тех, что предоставляются на хостинге. В таком случае необходимую версию можно собрать локально.
Подключимся по SSH к серверу и скомпилируем Python из исходного кода. Инструкция для подключения по SSH описана в статье Общие сведения по установке приложений (виртуальное окружение Docker).
Теперь перейдем во временный каталог на аккаунте:
Если каталог не создан, создайте его и затем перейдите:
Для сборки Python версии 3.7.0 и выше потребуется собрать библиотеку ffi. Если вам необходима версия ниже 3.7.0, то данный шаг можно пропустить и перейти сразу к сборке Python.
Скачиваем исходный код библиотеки:
Распакуем архив и сразу перейдем в каталог с исходным кодом:
С помощью утилиты configure настроим все зависимости, префиксы, переменные, после чего будет сгенерирован Makefile:
Теперь запустим процесс компиляции и установки:
В директории с исходным кодом libffi-3.2.1/x86_64-unknown-linux-gnu/include сгенерируются два файла: ffi.h и ffitarget.h. Их копируем в
Готово! Теперь переходим к сборке самого Python.
На момент написания статьи последняя версия 3.8.2, скачать актуальную версию можно с официального сайта:
Распакуем архив и сразу перейдем в каталог с исходным кодом:
С помощью утилиты configure настроим все зависимости, префиксы, переменные, после чего будет сгенерирован Makefile:
Теперь запустим процесс компиляции и установки:
Проверим корректность установки:
Помимо Python, также устанавливается пакетный менеджер pip:
Настройка окружения virtualenv
Если сайтов, использующих Python, на аккаунте несколько, то для каждого может потребоваться свое окружение и свой набор пакетов разных версий, которые могут конфликтовать между собой. Эту проблему можно решить настройкой виртуального окружения с помощью virtualenv.
Virtualenv уже есть на хостинге на версиях 2.7, 3.6, 3.7.
Если у вас собранный локально Python, для установки virtualenv укажите полный путь до pip:
Вызвать справку можно так:
Дальше следует создать директорию окружения.
Команды будут отличаться в зависимости от версии python.
Чтобы создать директорию окружения с названием venv_django, используя python2.7, выполните команду:
Для создания директории окружения с названием venv_django, используя python3.6, выполните команду:
Для локально собранного Python команда выглядит так:
Для входа в окружение выполните следующую команду:
Проверяем, что вход выполнен успешно:
Теперь мы можем устанавливать все необходимые пакеты для данного окружения с помощью pip (при этом полный путь до него указывать уже не нужно):
Чтобы выйти из окружения, выполните команду:
Установка и настройка Django
Django (Джанго) — свободный фреймворк для веб-приложений на языке Python. Сайт на Django строится из одного или нескольких приложений, которые рекомендуется делать отчуждаемыми и подключаемыми. Это одно из существенных архитектурных отличий этого фреймворка от некоторых других (например, Ruby on Rails). В этой статье будет рассмотрена установка этого фреймворка на хостинг Beget. Для установки Django будет использоваться Python 3.6. При необходимости можете использовать другую версию Python, установив её локально, как описано выше.
Сначала необходимо перейти в виртуальное окружение сервера (Docker), подробнее о том, как это сделать, можно ознакомиться по ссылке Общие сведения по установке приложений (виртуальное окружение Docker):
Для установки фреймворка Django используется пакетный менеджер pip, который автоматически устанавливает последнюю версию:
Затем необходимо создать новый проект:
И создать файл passenger_wsgi.py со следующим содержимым:
Посмотреть версию и путь до Django можно так:
В рассматриваемом примере passenger_wsgi.py следующий:
Если мы используем virtualenv, то содержимое должно быть следующим:
В этом случае файл passenger_wsgi.py будет выглядеть следующим образом:
Для последних версий Django также требуется явно задать домен, на котором работает сайт. Для этого нужно отредактировать список ALLOWED_HOSTS в файле / /settings.py. Вместо указания определенного домена можно использовать символ подстановки *, тогда проект будет работать на любом домене.
В нашем примере он будет выглядеть так:
Для корректной отдачи статического контента средствами Nginx необходимо создать символьную ссылку public, указывающую на public_html:
Затем нужно создать файл .htaccess и указать в нем путь до Python:
Если используется virtualenv, то содержимое будет следующим:
При использовании локально собранного Python содержимое может быть и таким:
После завершения настройки окружения необходимо создать каталог tmp, где будет хранится файл restart.txt:
В целях безопасности на сервере установлена система разграничения прав доступа между сайтами, основанная на POSIX ACL. Сделано это для того, чтобы файлы одного сайта не могли обращаться к файлам других сайтов. Приложения, которые будут устанавливаться в каталоги .local, по умолчанию недоступны при попытке их запуска через сайт. Необходимо настроить общий доступ к этим каталогам через Файловый менеджер (подробная справка по разделу).
Для проверки работоспособности нужно открыть сайт в браузере:
Установка микрофреймворка Flask
Сначала необходимо перейти в виртуальное окружение сервера (Docker), подробнее о том, как это сделать, можно ознакомиться по ссылке Общие сведения по установке приложений (виртуальное окружение Docker):
Установка Flask происходит через пакетный менеджер pip:
Необходимо создать каталог с новым проектом HelloFlask и временный каталог tmp:
Для корректной отдачи статического контента средствами Nginx создается симлинк на public_html:
После чего нужно создать файл .htaccess со следующим содержимым:
где во второй директиве PassengerPython указывается путь до интерпретатора Python. Если используется virtualenv или локально собранный Python, то /usr/bin/python3 необходимо заменить на соответствующий путь.
Далее нужно создать файл passenger_wsgi.py со следующим содержимым:
В каталоге проекта HelloFlask необходимо создать файл __init__.py со следующим содержимым:
После чего в корневом каталоге сайта
/flask необходимо выполнить следующую команду:
При проверке работы сайта в браузере должно получиться:
Первоначальная установка микрофреймворка Bottle
Сначала необходимо перейти в виртуальное окружение сервера (Docker), подробнее можно ознакомиться по ссылке Общие сведения по установке приложений (виртуальное окружение Docker).
После чего перейти в каталог сайта:
Bottle устанавливается через пакетный менеджер pip.
Затем нужно создать каталог с новым проектом HelloBottle и временный каталог tmp:
Для корректной отдачи статического контента средствами Nginx создается симлинк на public_html:
Далее нужно создать файл .htaccess, общий вид которого:
В рассматриваемом примере .htaccess получился следующим:
Общий вид файла passenger_wsgi.py:
В рассматриваемом примере passenger_wsgi.py получился следующим:
Затем необходимо создать файл app.py в каталоге проекта HelloBottle:
Для того чтобы Passenger переприменил конфиг, необходимо создать файл tmp/restart.txt:
Для проверки работоспособности нужно открыть сайт в браузере:
Установка web2py
Web2py — фреймворк с открытым исходным кодом для разработки веб-приложений, написанный на языке программирования Python. Web2py призван сократить рутинные процессы веб-разработки, такие как написание веб-форм с нуля, хотя разработчик может сам разработать её с нуля, если в этом возникнет необходимость.
В этой статье будет рассмотрена установка этого фреймворка на хостинг Beget. В качестве версии Python мы будем использовать установленную глобально 3.6.
После склонируем сам фреймворк:
Переместим все файлы в текущую директорию командой:
Скопируем в текущую директорию файл handlers/wsgihandler.py:
Сделаем симлинк passenger_wsgi.py на файл wsgihandler.py:
Добавим несколько директив в файл .htaccess:
Для работы web2py нужно поставить библиотеки pyDAL и yatl:
Для корректной отдачи статического контента средствами Nginx создается симлинк на public_html:
Для того чтобы Passenger переприменил конфиг, необходимо создать файл tmp/restart.txt:
Теперь проверим в браузере. Вводим URL нашего сайта и видим стандартную страницу с установленным фреймворком:
В документации web2py указано, что доступ к административной панели заблокирован. Чтобы разблокировать доступ, необходимо выполнить следующую команду:
После чего ввести пароль:
Проверка работоспособности сайта средствами браузера:
При необходимости сменить пароль для доступа к административной панели можно, нажав на кнопку «Изменить пароль администратора» в правой части:
Как запускать Python скрипты?
Первым делом вам надо включить поддержку CGI в тарифе хостинга. Личный кабинет/Хостинг аккаунты/ далее нажмите на домен и внизу найдите поддержку CGI!
После чего вы сможете запускать Python скрипты на хостинге. Обратите внимание! Для запуска стандартных Python скриптов, вам не требуется установка специализированных версий Python в разделе «Настройка Python приложений». Этот раздел служит для установки приложений таких как Django и других. По ссылкам вы можете почитать как устанавливать фреймворки и модули на примере Django и Flask
Мы покажем вам как всё настроить на примере cPanel и «Фаил менеджера», а так же SSH.
2. Перейти в Файлы > Файловый менеджер
3. Перейдите в папку cgi-bin
5. Установите права 755 на фаил
6. Откройте фаил с помощью правой клавиши мыши и ссылки EDIT либо с помощью кнопки «Редактировать» и добавьте для теста следующий скрипт.
По умолчанию Python находиться по адресу /usr/bin/python
Теперь вы можете попробовать запустить ваш скрипт по адресу http://domain.com/cgi-bin/test.py
Если вместо запуска скрипта открывается просто текст скрипта или ошибка 500, это может означать что вы не включили поддержку CGI в тарифе вашего хостинг аккаунта.
500 ошибка так же вызывается ошибкой скрипта.
Создание и редактирование P ython скрипта через SSH
1. Соединитесь с cPanel аккаунтом через SSH
Проверьте что вы в нужной директории используя команду pwd
Для проверки что фаил создался, посмотрите директорию командой ls
4. Измените права на фаил в 0755 запустив команду
chmod 755 /home/cPuser/public_html/cgi-bin/nctest.py
(где cPuser ваш логин в cPanel)
5. Откройте фаил и добавьте следующий код
Вы можете открыть фаил используя программу nano
После добавьте следующий код для тестирования
print «Content-type: text/html\n\n»
print «How to run Python scripts in cPanel»
Примечание: фаил должен начинаться с пути к Python скрипту /usr/bin/python на сервере.
Для сохранения изменений нажмте Crtl+O для Windows или Command+O для Mac OS
Теперь для запуска скрипта вы можете использовать путь http://domain.com/cgi-bin/nctest.py
Лучше всего его расположить в папке public_html
После чего вы сможете запускать скрипт по адресу http://domain.com/nctest.py
В хостинге некоторые решения могут показаться вам нестандартными.
Поэтому перед началом работы мы бы рекомендовали ознакомиться с вводной статьей.
1. Запуск Python
1.1 При создании сайта необходимо выбрать, что сайт работает на Python:
1.2 Загрузить файлы сайта можно подключившись по SFTP.
Откройте настройки сайта в панели управления и в параметре APP_PATH укажите путь до файла для запуска, аналогично тому, как это сделано на скриншоте ниже:
К примеру, в приложении
Установка пакетов и отладка сайта
Управлять проектом можно подключившись по SSH.
После входа на сервер по SSH можно, например, установить необходимые для работы вашего сайта пакеты.
Для каждого сайта уже создано индивидуальное виртуальное окружение. Свое собственное виртуальное окружение создавать не требуется.
При установке пакетов через pip install сначала перейдите в каталог с сайтом и виртуальное окружение активируется автоматически:
Далее можно установить нужные расширения:
Для отладки можно запустить любой скрипт, выполнив его напрямую:
По умолчанию в app/wsgi.py уже загружен файл, который при обращении через браузер выводит «Hello world!».
2. Смена версий Python
Изменение версии Python сбрасывает виртуальное окружение. Установленные через pip install пакеты при смене версии удаляются.
3. Работа с MySQL
MySQL доступен только через сокет /run/mysqld/mysqld.sock и недоступен по сети. Но большинство приложений будут обращаться именно к сокету при подключении через localhost.
Рассмотрим блок подключения к MySQL в Django. Можно в качестве хоста использовать сокет:
Будут работать оба варианта.
Однако некоторые приложения при подключении через localhost обращаются только к сети по 127.0.0.1, а такой способ работать не будет. Поэтому рекомендуется подключение именно через сокет.
4. Работа с Redis
На хостинге в redis данные хранятся только в оперативной памяти и на диск не сохраняются. Из оперативной памяти данные очищаются при перезапуске сервиса, либо пока вы специально не удалите данные.
Перейдем в каталог с сайтом, чтобы устанавить пакет для определенного сайта
Установим драйвер для работы с redis
Сохраним этот код в файл app/sc1units2redis.py и разместим в каталоге с сайтом.
Перейдем в каталог с сайтом, чтобы запускать app/sc1units2redis.py в окружении для определенного сайта
5. Работа с Memcached
Пример подключения к Memcached и сохранения данных на 15 секунд.
Сохраним этот код в файл app/mem.py и разместим в каталоге с сайтом.
Перейдем в каталог с сайтом, чтобы запускать app/mem.py в окружении для определенного сайта
6. Перезапуск сервиса после изменения кода сайта
Откройте настройки сайта в панели управления.
Нажмите кнопку «Перезапустить Python».
7. Собственные настройки uwsgi
Создайте файл mydomain-py.com/etc/wsgi.ini ( mydomain-py.com следует изменить на имя вашего сайта).
В wsgi.ini укажите нужные вам настройками uwsgi. Стоит писать не весь конфиг целиком, а только дополнительные нужные вам опции.
После этого перезапустите uwsgi. Настройки загрузятся и применятся автоматически.
8. Работа с ошибками приложения
Если при обращении к сайту вы видите ошибку 502 Bad Gateway, то:
* Проверьте, что в APP_PATH путь до wsgi.py указан аналогично тому, как на скриншоте ниже:
К примеру, в приложении
В строке @app.route(«/») видно, что нужный нам объект будет называться app.
После этого нажмите кнопку «Перезапустить Python» в верхней части страницы. Попробуйте открыть ваш сайт еще раз.
По-прежнему 502 Bad Gateway? Тогда стоит обратиться к логам ошибок.