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

Обновлено: 03.07.2024

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

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

На данный момент на наших серверах виртуального хостинга установлено 3 версии 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

  1. Указать первой строкой в скрипте путь к используемому интерпретатору. Так называемый shebang.

для использования python 2.7.5 или другую версию

  1. Указать расширение для файла *.py и выставить на файл права доступа 755.

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

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

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

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

    def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return 'Hello World'

    Используемая версия 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. Поскольку у меня нет словарного запаса, чтобы задать точный вопрос, вот краткое изложение того, что нужно сделать:

    Мне нужна ссылка, которую я могу ввести в строке URL, которая приведет к выполнению сценария и отображению содержимого в браузере.

    Может кто-нибудь сказать мне, если мне нужно создать HTML-файл, и если да, как заставить его указывать на скрипт Python. В доменной папке установлен WordPress. Мой хостинг - хостинг Dreamhost

    Сценарий там ниже:

    3 ответа

    Обычно вам нужно поместить скрипт на языке Python в папку / home / username / bin / . Я не уверен, позволяет ли ваш конкретный веб-хост запускать скрипт Python вне папки / bin (обычно это не так), но если да, то вы можете заменить папку / pyscripts.

    Вам не нужно создавать HTML-файл, поскольку первая строка содержимого, которую вы печатаете в своем скрипте Python, указывает браузеру пользователя отображать выходные данные скрипта в виде HTML-файла. Вы просто вводите URL-адрес вашего скрипта Python в браузер, а затем сервер запускает скрипт и выводит его в виде текстового / HTML-файла, который ваш браузер затем читает и отображает.

    Кроме того, не забывайте - вам нужно предоставить разрешение на выполнение / чтение / запись для вашего файла скрипта Python после того, как вы загрузите его в нужную папку на сервере веб-хостинга, иначе он не запустится вообще. Обычно это делается с помощью вашей утилиты загрузки, например Filezilla, или с помощью команды оболочки, например chmod.

    Ну и мечта хозяина поддержки Python. Проверьте, предоставляют ли они развертывание доступа оболочки. Все, что вам нужно, это создать .py файл и запустить его.

    Тогда подумайте об использовании Django или Jinja2 как фреймворк. Это легко для создания веб-приложения

    Heroku - хорошее место для размещения и написания скриптов на Python.

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

    Больше, если вы хотите запускать эти скрипты по расписанию. Затем Heroku предоставляет множество дополнений. просто поищи на геройку

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

    1. Запуск Python

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

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

    Настройки

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

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

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

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

    Настройки

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

    К примеру, в приложении

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

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

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

    Управлять проектом можно подключившись по SSH.

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

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

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

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

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

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

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

    • откройте раздел "хостинг" в панели управления
    • кликните на нужный контейнер
    • кликните по нужному сайту
    • перейдите на вкладку 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 и разместим в каталоге с сайтом.

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

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

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

    5. Работа с Memcached

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

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

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

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

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

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

    Откройте настройки сайта в панели управления.


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

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

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

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

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

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

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

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

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


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

    К примеру, в приложении

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

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

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

    Для начала рассмотрим установку модулей для Python. Как правило, модуль можно установить пакетным менеджером pip, для этого необходимо перейти в окружение Docker, подробнее с работой в нём можно ознакомиться в этой статье. В качестве примера установим библиотеку Pillow:

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

    Дожидаемся окончания операции. Готово, модуль установлен в каталог:

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

    Вместо /u/user необходимо указать первую букву Вашего логина и сам логин. Например, для логина pythontest путь будет /home/p/pythontest/.local/lib/python3.6/site-packages/PIL.

    Если требуется установить дополнительные пакеты определенных версий, необходимо указать их в файле requirements.txt. Это удобно тем, что из одного файла можно установить большой список пакетов для Python.

    В качестве примера из файла requirements.txt установим следующие пакеты:

    Затем запустим команду для установки всех модулей и их зависимостей из данного файла следующей командой:

    Использование нескольких версий Python

    Для некоторых web-приложений могут потребоваться разные версии Python. На большинстве серверов в Docker-контейнере установлено несколько вариантов:

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

    где X.X - нужная версия Python. Чтобы установить Pillow для python 3.7, команда будет выглядеть так:

    Локальная установка 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, то содержимое должно быть следующим:

    Для Django версии 1.4 - 1.6 отличается синтаксис последних двух строк.

    В этом случае файл passenger_wsgi.py будет выглядеть следующим образом:

    Для последних версий Django также требуется явно задать домен, на котором работает сайт. Для этого нужно отредактировать список ALLOWED_HOSTS в файле <название_проекта>/<название_проекта>/settings.py. Вместо указания определенного домена можно использовать символ подстановки *, тогда проект будет работать на любом домене.

    В нашем примере он будет выглядеть так:

    Для корректной отдачи статического контента средствами Nginx необходимо создать символьную ссылку public, указывающую на public_html:

    Затем нужно создать файл .htaccess и указать в нем путь до Python:

    Если используется virtualenv, то содержимое будет следующим:

    При использовании локально собранного Python содержимое может быть и таким:

    Путь может отличаться в зависимости от используемой версии Python.

    После завершения настройки окружения необходимо создать каталог tmp, где будет хранится файл restart.txt:

    В целях безопасности на сервере установлена система разграничения прав доступа между сайтами, основанная на POSIX ACL. Сделано это для того, чтобы файлы одного сайта не могли обращаться к файлам других сайтов. Приложения, которые будут устанавливаться в каталоги .local, по умолчанию недоступны при попытке их запуска через сайт. Необходимо настроить общий доступ к этим каталогам через Файловый менеджер (подробная справка по разделу).

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


    Установка микрофреймворка Flask

    Сначала необходимо перейти в виртуальное окружение сервера (Docker), подробнее о том, как это сделать, можно ознакомиться по ссылке Общие сведения по установке приложений (виртуальное окружение Docker):

    В рассматриваемом примере каталог сайта - flask, нужно перейти в этот каталог:

    Установка 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.

    Обращаем Ваше внимание, что в данной статье используется Python 3.6. При необходимости, можете установить на другую версию, соответственно поправив все пути и директивы:

    Затем нужно создать каталог с новым проектом HelloBottle и временный каталог tmp:

    Для корректной отдачи статического контента средствами Nginx создается симлинк на public_html:

    Далее нужно создать файл .htaccess, общий вид которого:

    Вторая директива PassengerPython указывает путь до интерпретатора Python, третья директива SetEnv - путь к установленным модулям. Поскольку по умолчанию модули устанавливаются в каталог /usr/lib/python3.6 и /usr/local/lib/python3.6, необходимо переопределить этот параметр.

    В рассматриваемом примере .htaccess получился следующим:

    Общий вид файла passenger_wsgi.py:

    В рассматриваемом примере passenger_wsgi.py получился следующим:

    Затем необходимо создать файл app.py в каталоге проекта HelloBottle:

    Для того чтобы Passenger переприменил конфиг, необходимо создать файл tmp/restart.txt:

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


    Установка web2py

    Web2py — фреймворк с открытым исходным кодом для разработки веб-приложений, написанный на языке программирования Python. Web2py призван сократить рутинные процессы веб-разработки, такие как написание веб-форм с нуля, хотя разработчик может сам разработать её с нуля, если в этом возникнет необходимость.

    В этой статье будет рассмотрена установка этого фреймворка на хостинг Beget. В качестве версии Python мы будем использовать установленную глобально 3.6.

    Первое, что нужно сделать - подключиться в виртуальное окружение сервера (Docker) через протокол SSH. Подробнее о подключении описывается в статье Общие сведения по установке приложений (виртуальное окружение Docker).

    Теперь мы в виртуальном окружении переместимся в директорию сайта, заранее созданного в разделе Сайты, в нашем случае - это web2py:

    После склонируем сам фреймворк:

    Переместим все файлы в текущую директорию командой:

    Скопируем в текущую директорию файл handlers/wsgihandler.py:

    Сделаем симлинк passenger_wsgi.py на файл wsgihandler.py:

    Добавим несколько директив в файл .htaccess:

    Для работы web2py нужно поставить библиотеки pyDAL и yatl:

    Для корректной отдачи статического контента средствами Nginx создается симлинк на public_html:

    Для того чтобы Passenger переприменил конфиг, необходимо создать файл tmp/restart.txt:

    Теперь проверим в браузере. Вводим URL нашего сайта и видим стандартную страницу с установленным фреймворком:


    В документации web2py указано, что доступ к административной панели заблокирован. Чтобы разблокировать доступ, необходимо выполнить следующую команду:

    После чего ввести пароль:

    Проверка работоспособности сайта средствами браузера:


    При необходимости сменить пароль для доступа к административной панели можно, нажав на кнопку "Изменить пароль администратора" в правой части:


    Удачной работы! Если возникнут вопросы - напишите нам, пожалуйста, тикет из Панели управления аккаунта, раздел "Помощь и поддержка".

    Читайте также: