Как запустить python на хостинге

Python

Работа с Python-приложениями на нашей площадке реализована через специальный модуль uWSGI для Apache.

Чтобы ваш проект на Python открывался из браузера, в разделе «Сайты» → «Веб-серверы» Панели управления выберите подходящую версию из доступных:

Потребуется также добавить вспомогательные директивы в файл .htaccess и настроить виртуальное окружение.

Для работы с Python в целом нужен доступ к аккаунту по SSH.

Если вы готовы поработать с Python, советуем по нашим инструкциям установить фреймворк Django или Flask.

В консоли

Чтобы в командной строке использовать конкретную версию, указывайте ее явным образом:

Тот же принцип применяется и для менеджера пакетов pip:

pip3.8 — для Python 3.8
pip3.6 — для Python 3.6
pip2.7 — для Python 2.7

При вводе интерпретатора python или pip без указания версий, используются последние:

[login@server ~]$ python -V
Python 3.8.0 [login@server ~]$ pip -V
pip 19.3.1 from /opt/rh/rh-python38/root/usr/lib/python3.8/site-packages/pip (python 3.8)

Полный путь до интерпретатора и пакетного менеджера:

Установка модулей

Чтобы устанавливать модули в рамках аккаунта, настройте виртуальное окружение для Python.

Подключитесь по SSH и выполните команду:

[login@server ~]$ pip install virtualenv —user

Чтобы задействовать внутри окружения модули, установленные на сервере, выполните команду:

[login@server ~]$ virtualenv —system-site-packages python

Активируйте виртуальное окружение:

[login@server ~]$ source ~/python/bin/activate

Виртуальное окружение настроено.

Не забудьте активировать его и в следующий раз, когда войдете в аккаунт.

Источник

Запуск скрипта Python

Python — это один из наиболее популярных современных языков программирования. Он пригоден для решения разнообразных задач и предлагает те же возможности, что и другие языки программирования: динамичность, поддержку ООП и кросс-платформенность.

Версии Python на хостинге Spaceweb

На данный момент на наших серверах виртуального хостинга установлено 4 версии Python. Это Python 2.7, 3.3, 3.4, 3.8. Точные версии можно узнать командами:

$ python2.7 -V
Python 2.7.7
$ python3.3 -V
Python 3.3.5
$ python3.4 -V
Python 3.4.1
$ python3.8 -V
Python 3.8.5*

* Версия Python 3.8.5 работает на версии Apache 2.4 + PHP 8 opcache + mod_wsgi python3.8, должна быть включена в настройках сайта.

Запуск скрипта python через CGI

CGI (от англ. Common Gateway Interface — «общий интерфейс шлюза») — стандарт интерфейса, используемого для связи внешей программы с веб-сервером. Программу, которая работает по такому интерфейсу совместно с веб-сервером, принято называть шлюзом, хотя многие предпочитаю названия «скрипт»(сценарий) или «CGI-программа».

Для запуска скриптов python через CGI необходимо выполнить следующие действия:

AddHandler cgi-script .py

#!/usr/bin/python3.8

для использования Python 3.8, или другую версию.

  1. Указать расширение для файла *.py и выставить на файл права доступа 755.
  2. Если скрипт CGI разрабатывается с нуля, необходимо убедиться, что до вывода основного тела HTTP-ответа в скрипте указывается вывод служебного HTTP-заголовка Content-Type и перенос строки в формате LF:

print(«Content-Type: text/html\n»)

Запуск скрипта python через mod_wsgi

WSGI (англ. Web Server Gateway Interface) — стандарт взаимодействия между Python-программой, выполняющейся на стороне сервера, и самим веб-сервером, например, Apache.
Стандарт интерфейса (на английском): http://www.python.org/dev/peps/pep-0333/

По стандарту, WSGI-приложение должно удовлетворять следующим требованиям:

  • должно быть вызываемым (callable) объектом (обычно это функция или метод);
  • принимать два параметра:
    • словарь переменных окружения (environ);
    • обработчик запроса (start_response);

    Пример простого wsgi-приложения:

    def application(environ, start_response):
    status = ‘200 OK’
    output = b’Hello World!’
    response_headers = [(‘Content-type’, ‘text/plain’),
    (‘Content-Length’, str(len(output)))]
    start_response(status, response_headers)
    return [output]

    Если приложение будет использовать подключение к базе MySQL, то необходимо для неё сделать удаленный доступ для IP-адреса 127.0.0.1

    Используемая версия python для mod_wsgi

    На наших серверах mod_wsgi на Apache 2.2 + mod_passenger + mod_wsgi (Актуальная версия) использует версию python 2.7.5

    На Apache 2.4 + PHP 8 opcache + mod_wsgi python3.8 использует версию python 3.8.5

    Источник

    Хостинг — как работает Python

    В хостинге некоторые решения могут показаться вам нестандартными.
    Поэтому перед началом работы мы бы рекомендовали ознакомиться с вводной статьей.

    1. Запуск Python

    Python запускается через WSGI . Для работы сайта предоставляется 4 процесса (processes), на каждый процесс 2 потока (threads).

    1.1 При создании сайта необходимо выбрать, что сайт работает на Python:

    Настройки

    1.2 Загрузить файлы сайта можно подключившись по SFTP.

    Файлы вашего приложения можно расположить в каталоге sitename/app , а статические файлы (.css, .jpg, .png и другие) — в каталоге sitename/static .

    1.3 Далее нужно указать файл для запуска вашего приложения. Этот файл может называться wsgi.py (если вы используете Django), или любым другим образом ( main.py , projectname.py и т.д.).

    Откройте настройки сайта в панели управления и в параметре APP_PATH укажите путь до файла для запуска, аналогично тому, как это сделано на скриншоте ниже:

    Настройки

    1.4 В параметре APPLICATION укажите объект, с которого вебсервер начнет обрабатывать код вашего сайта. В Django он называется application . В Flask название такого объекта не стандартизировано. В каждом проекте он может называться по разному.

    from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run() 

    В строке app = Flask(__name__) создается экземпляр сервера Flask в переменной app . Именно она нам и нужна.

    А значит в панели управления нужно будет указать APPLICATION=app .

    Установка пакетов и отладка сайта

    После входа на сервер по SSH можно, например, установить необходимые для работы вашего сайта пакеты.

    Для каждого сайта уже создано индивидуальное виртуальное окружение. Свое собственное виртуальное окружение создавать не требуется.

    При установке пакетов через pip install сначала перейдите в каталог с сайтом и виртуальное окружение активируется автоматически:

    c3087@h2:~$ c3087@h2:~$ cd mydomain-py.com/ (mydomain-py.com/env:python3.7)c3087@h2:~/mydomain-py.com$ 

    Далее можно установить нужные расширения:

    (mydomain-py.com/env:python3.7)c3087@h2:~/mydomain-py.com$ pip install Flask 

    Для отладки можно запустить любой скрипт, выполнив его напрямую:

    (mydomain-py.com/env:python3.7)c3087@h2:~/mydomain-py.com$ python app/somescript.py 

    По умолчанию в app/wsgi.py уже загружен файл, который при обращении через браузер выводит “Hello world!”.

    def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello world!\n"]

    2. Смена версий Python

    • откройте раздел “хостинг” в панели управления
    • кликните на нужный контейнер
    • кликните по нужному сайту
    • перейдите на вкладку Python

    Изменение версии Python сбрасывает виртуальное окружение. Установленные через pip install пакеты при смене версии удаляются.

    3. Работа с MySQL

    MySQL доступен только через сокет /run/mysqld/mysqld.sock и недоступен по сети. Но большинство приложений будут обращаться именно к сокету при подключении через localhost.

    Рассмотрим блок подключения к MySQL в Django. Можно в качестве хоста использовать сокет:

    'ENGINE': 'django.db.backends.mysql', 'HOST': '/var/run/mysqld/mysqld.sock', 'NAME': 'cxxx_pythonmysql_ru', 'USER': 'cxxx_pythonmysql_ru', 'PASSWORD': 'WoHtePamnevdjaf63', 
    'ENGINE': 'django.db.backends.mysql', 'HOST': 'localhost', 'NAME': 'cxxx_pythonmysql_ru', 'USER': 'cxxx_pythonmysql_ru', 'PASSWORD': 'WoHtePamnevdjaf63', 

    Будут работать оба варианта.

    Однако некоторые приложения при подключении через localhost обращаются только к сети по 127.0.0.1, а такой способ работать не будет. Поэтому рекомендуется подключение именно через сокет.

    4. Работа с Redis

    На хостинге в redis данные хранятся только в оперативной памяти и на диск не сохраняются. Из оперативной памяти данные очищаются при перезапуске сервиса, либо пока вы специально не удалите данные.

    Перейдем в каталог с сайтом, чтобы устанавить пакет для определенного сайта

    Установим драйвер для работы с redis

    #!/usr/bin/env python import redis r = redis.StrictRedis(host='localhost', port=6379, db=0) r.set('ProtossAirUnits', 'Observer,Shuttle,Scout,Carrier,Carrier\'sInterceptor,Arbiter,Corsair') print(r.get('ProtossAirUnits')) 

    Сохраним этот код в файл app/sc1units2redis.py и разместим в каталоге с сайтом.

    После подключения по SSH можно вручную запустить app/sc1units2redis.py .

    Перейдем в каталог с сайтом, чтобы запускать app/sc1units2redis.py в окружении для определенного сайта

    (mydomain-py.com/env:python3.7)c3087@h2:~/mydomain-py.com$ python app/sc1units2redis.py b"Observer,Shuttle,Scout,Carrier,Carrier'sInterceptor,Arbiter,Corsair" 

    В данном случае мы получили значение ключа ProtossAirUnits .

    5. Работа с Memcached

    Пример подключения к Memcached и сохранения данных на 15 секунд.

    #!/usr/bin/env python import memcache client = memcache.Client([('127.0.0.1', 11211)]) sample_obj = client.set("sample_user", sample_obj, time=15) print("Stored to memcached, will auto-expire after 15 seconds") print(client.get("sample_user")) 

    Сохраним этот код в файл app/mem.py и разместим в каталоге с сайтом.

    После подключения по SSH можно вручную запустить app/mem.py .

    Перейдем в каталог с сайтом, чтобы запускать app/mem.py в окружении для определенного сайта

    (mydomain-py.com/env:python3.7)c3087@h2:~/mydomain-py.com$ python app/mem.py Stored to memcached, will auto-expire after 15 seconds

    В данном случае мы получили значение ключа sample_user .

    6. Перезапуск сервиса после изменения кода сайта

    Нажмите кнопку “Перезапустить Python”.

    Альтернативный вариант — подключитесь по SSH, и далее в папке с сайтом выполните команду

    c3087@h2:~/mydomain-py.com$ touch reload 

    7. Собственные настройки uwsgi

    Создайте файл mydomain-py.com/etc/wsgi.ini ( mydomain-py.com следует изменить на имя вашего сайта).

    В wsgi.ini укажите нужные вам настройками uwsgi. Стоит писать не весь конфиг целиком, а только дополнительные нужные вам опции.

    После этого перезапустите uwsgi. Настройки загрузятся и применятся автоматически.

    8. Работа с ошибками приложения

    Если при обращении к сайту вы видите ошибку 502 Bad Gateway, то:

    • откройте настройки сайта в панели управления
    • кликните на нужный сайт
    • перейдите на вкладку Python

    Нас интересуют параметры APP_PATH и APPLICATION .

    * Проверьте, что в APP_PATH путь до wsgi.py указан аналогично тому, как на скриншоте ниже:

    В параметре APPLICATION укажите объект, с которого вебсервер начнет обрабатывать код вашего сайта. В Django он называется application . В Flask название такого объекта не стандартизировано. В каждом проекте он может называться по разному.

    from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run() 

    В строке @app.route(«/») видно, что нужный нам объект будет называться app.

    А значит в панели управления нужно будет указать APPLICATION=app .

    После этого нажмите кнопку “Перезапустить Python” в верхней части страницы. Попробуйте открыть ваш сайт еще раз.

    По-прежнему 502 Bad Gateway? Тогда стоит обратиться к логам ошибок.

    Подключитесь к серверу по SFTP.

    Посмотрите файл имя_сайта/log/имя_сайта-wsgi.log . Последние ошибки будут в конце файла.

    Источник

    Читайте также:  Позиции всех букв php
Оцените статью