# Работа веб-приложений

Услуга Поддержка веб-приложений позволяет запускать на Джино.Хостинге приложения, написанные на Python, Ruby и Node.js через модуль Apache mod_passenger.

# Python

Python — высокоуровневый, объектно-ориентированный язык программирования. Используется в веб-разработке, анализе данных, машинном обучении, DevOps.

Для запуска Python-приложения на хостинге понадобится доменное имя, привязанное к нему. К Хостингу можно привязать уже имеющийся домен или воспользоваться техническим адресом хостинг-контейнера.

Технический адрес указан в разделе УправлениеНастройки SSH в строке Имя сервера и в общем виде выглядит так: j12345678.myjino.ru. Мы рекомендуем пользоваться техническим адресом только для разработки и тестирования сайтов — размещать готовые проекты лучше на отдельном доменном имени.

Проверить текущую версию Python и, при необходимости изменить её можно в разделе УправлениеНастройки веб-сервера. Для каждого подключенного к хостингу домена можно использовать свою версию Python.

# Запуск приложения на Python

Приложения и сайты, написанные на Python, на Джино запускаются через модуль Apache mod_passenger: для запуска Python-приложения нужно использовать файл passenger_wsgi.py. Этот файл описывает взаимодействие веб-сервера с вашим приложением (указывает, какой файл должен обрабатывать запросы веб-сервера). passenger_wsgi.py должен находиться в папке с именем домена, на котором будет работать сайт, например ~/domains/example.com.

Чтобы запустить простой сайт на техническом адресе сервера нужно создать файл passenger_wsgi.py в папке ~/domains/j12345678.myjino.ru и поместить в него следующий код:

import sys
def application(environ, start_response):
    start_response('200 OK', [('Content-type', 'text/plain')])
    return [b"Hello, World!"]

Этот код выводит на страницу стандартное приветствие «Hello, World!». После сохранения файла, нужно перезагрузить веб-сервер (УправлениеНастройки веб-сервераПерезагрузить) и в браузере в адресной строке ввести адрес вашего хостинга (в нашем случае это технический адрес). На открывшейся странице можно будет увидеть Hello, World!

Обратите внимание, что статическое содержимое вашего сайта нужно размещать в подпапке public_html.

Запуск Python-кода на Хостинге, созданном до 28.04.2022

На Хостинг-аккаунтах Джино, созданных до 28.04.2022 запуск Python-кода отличается от описанного выше.

Чтобы запустить Python-код с помощью модуля Apache mod_wsgi нужно создать в папке с доменным именем файл .htaccess следующего содержания:

AddHandler wsgi-script .wsgi

После этого рядом нужно создать файл simple.wsgi, описывающий стандартное приветствие:

def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello Old World"]

После сохранения файлов можно проверить работу кода, зайдя в браузере по адресу http://domain_name/simple.wsgi. Мы должны будем увидеть приветствие Hello Old World, указанное в нашем файле simple.wsgi.

# Создание виртуального окружения Python

Для запуска более сложных сайтов, например написанных с помощью фрэймворков Django или Flask, на хостинге нужно создать виртуальное окружение для работы Python.

Создать виртуальное окружение venv310 для Python 3.10 можно командой:

/opt/alt/python37/bin/virtualenv --python /opt/alt/python310/bin/python3 venv310

Список доступных версий Python и путь к их интерпретаторам приведены в разделе УправлениеТехническая информация.

Для запуска на Джино.Хостинге проекта, написанного на Python, размещать проект следует в папке с доменным именем, на котором он будет работать (например ~/domains/j12345678.myjino.ru). Файл passenger_wsgi.py также должен находиться в папке с доменным именем и должен иметь вид:

import sys, os
INTERP = os.path.expanduser("~/venv310/bin/python3")
if sys.executable != INTERP: os.execl(INTERP, INTERP, *sys.argv)

from MyPythonProject.wsgi import application

Здесь в строке INTERP указан путь к виртуальному окружению, в котором должен запускаться Python-код; в строке from MyPythonProject.wsgi — файл wsgi, отвечающий за взаимодействие приложения с веб-сервером.

Описание основных принципов работы с Django- и Flask-приложениями на хостинге Джино представлено в отдельных статьях:

# CGI

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

Чаще всего используется язык Perl — на нём написано множество скриптов для CMS или движков форумов.

Примечание

Путь к интерпретатору perl: /usr/bin/perl.

На хостинге Джино CGI-скрипты могут находиться внутри папки domains/имя_домена, где хранятся и все остальные файлы, доступные через веб. Обратите внимание, что скрипты не находятся в папке cgi-bin, как это бывает на других хостингах.

Для запуска скрипта необходимо сделать его исполняемым, для этого на него нужно установить права 0755 (rwxr-xr-x).

Директория, в которой расположены скрипты, должна быть доступна для записи только владельцу (права 0755). Если вы установили возможность записи в директорию, где находятся скрипты, группе или всем пользователям, CGI-скрипты выполняться в ней не будут.

CGi-скрипты необходимо закачивать на сервер, включив в настройках FTP-клиента опцию передачи данных в режиме ASCII.

С помощью CGI на Джино можно запускать программы на языках Python, Tcl, Ruby и даже bash.

# SSI

SSI (Server Side Includes, включения на стороне сервера) — технология для динамической сборки веб-страниц на сервере из HTML-файлов и результатов работы CGI-скриптов.

На Джино по умолчанию SSI-директивы обрабатываются только в файлах с расширением .shtml или .shtm. Чтобы они обрабатывались и внутри файлов с расширениями .html и .htm в папке с сайтом создайте файл .htaccess и поместите в него такую строку:

AddHandler server-parsed .htm .html

Если вы используете расширение .shtml (или .shtm), то добавьте в .htaccess такую директиву:

DirectoryIndex index.shtml index.shtm

Если этого не сделать, файлы index.shtml и index.shtm не будут распознаваться как главные (индексные) страницы.

# Вопросы и ответы

Обязательно ли подключать SSH для работы с Django?

SSH нужен только для работы с утилитами django-admin и manage.py, если вы разрабатываете свой проект прямо на нашем сервере. Вы можете вести разработку на своем локальном хосте, и копировать обновленные файлы и содержимое БД на свой хостинг, в этом случае поддержка SSH-подключения будет не нужна.

У меня не работает команда *syncdb*. Почему?

Если вы ведете разработку прямо на сервере, используете MySQL в качестве БД и пытаетесь синхронизировать базу данных командой

python manage.py syncdb

то в качестве значения поля HOST словаря DATABASES[default] в файле settings.py обязательно нужно указать IP 127.0.0.1. Это снизит скорость соединения с БД, поэтому после окончания работы с утилитой manage.py верните данное значение в исходное положение (пустая строка).

Почему у меня не работает SSI?

Если у вас подключена услуга Поддержка скриптовых языков, но SSI-директивы не работают, то, возможно, проблема в том, что вы вставляете их в файлы с расширением .html, но по умолчанию они работают только в файлах с расширением .shtml.

Чтобы устранить эту проблему, измените обработчик файлов .html, чтобы SSI-директивы в них обрабатывались. Для этого создайте файл .htaccess в папке домена и добавьте в него такую строчку:

AddHandler server-parsed .html