Здравствуйте )
В этой статье я расскажу о том, как реализовать два способа проверки наличия питона на сервере.
Стал для себя потихоньку изучать Python. Очень прикольная штука. Написал несколько скриптов, запускал их у себя на компьютере.
И вот, настала пора — решил попробовать запустить скрипт Python на сервере, где у меня работает блог. Но блог у меня на ВордПрессе, то есть на PHP. И первый вопрос, который меня сильно озадачил — а уживаются ли вместе вообще Python и PHP.
Я написал своему хостеру в поддержку с вопросом, поддерживается ли питон. Поддержка через пару минут написала, что да. Дескать, у меня же сервер с линуксом — что я туда поставлю, то и будет работать.
Кстати, если вы хотите себе дешёвый хостинг с суперклассной поддержкой — очень рекомендую friendhosting.net, которым пользуюсь сам. К ним я переезжал с другого хостинга host96.ru, который вообще копейки стоит. Но настолько отвратное отношение у них было ко мне как к клиенту, что никому никогда не порекомендую ими пользоваться. После них любой хостинг с нормальным отношением уже покажется идеальным, наверно )
Так или иначе — френдхостинг великолепен. И это особенно ощущается, когда что-нибудь сам накосячишь, напишешь в поддержку, а человек из поддержки отвечает через минуту, а вопрос решает ещё через несколько минут.
Ну да ладно. В общем, техподдержка мне сообщила, что питон есть.
Дальше я стал смотреть, как это вообще проверить и понять, где оно работает ))
Нашёл вот такую классную ссылку: http://python.su/forum/topic/5364/, где пользователю на такой же вопрос ответили, как проверить наличие питона на сервере. Но ответы такие, что сразу и не понять, что делать.
Поэтому сейчас, когда я разобрался, поделюсь с вами.
Первый способ, который там написан, — надо просто подключиться к серверу по SSH. Круто, подумал я, как это сделать-то.
А ответ простой: открываем сначала письмо от хостера, где написаны данные для входа. На френдхостинге оно приходит при создании аккаунта. И в нём написано: данные для входа по SSH, дальше указаны адрес, порт, логин и пароль.
Окей, что дальше-то делать.
Дальше качаем маленькую программу PuTTY (https://putty.org.ru/download.html). Она очень маленькая и без нормального интерфейса, но она нам и нужна-то всего для одной команды.
Подробную инструкцию с картинками о том, как подключиться к серверу, можно взять вот тут: https://novall.net/manual/instrukciya-kak-podklyuchitsya-po-ssh-k-serveru-s-pomoshhyu-putty.html. Я ею и пользовался.
Запускаем программу, вбиваем адрес из письма от хостера, указываем порт. Здесь меня ждал сюрприз: в программе указан порт 22, в письме от хостера был 3333. И что забавно — когда я попробовал использовать порт 3333, выскочила ошибка. Поэтому оставил порт по умолчанию.
Дальше программа запускается, просит ввести имя пользователя. Окей. Беру его из письма.
А дальше просит ввести пароль. И вот ведь косяк: пароль не отображается, вводить его очень неудобно. Я его решил вставить просто из письма — и подключиться не получалось.
А оказалось всё просто: я его вставлял с помощью кнопок CTRL + V, а надо было с помощью кнопок Shift + Insert. Вот как, блин, и догадаться.
В общем, вставил пароль, в окне программы замигало место для ввода команды
Набрал команду python — и питон запустился. Итак, теперь понятно, что он там есть и работает.
Уже хорошо.
Дальше я решил попробовать запустить маленький файлик, который по первой же ссылке указан. И тоже начались разные косяки. Начнём с того, что само содержание файла написано с опечатками.
Поэтому ниже я приведу пример, как должно быть.
Создаём в корне сайта (там же, где лежит index.html или index.php) файлик с именем helloworld.py.
Предупреждение: ни в коем случае не проводите эти эксперименты в корне важного для вас сайта! Делайте это для сайта, который не важен! Поскольку он может упасть, причём не сразу: у меня после всех экспериментов сайт вырубился ночью через пару часов после того, как я ушёл. Я утром проснулся, а он не работает. Удалил изменения — всё заработало.
В файл пишем следующий текст:
#!/usr/bin/python
print «Content-type: text/html; charset=utf-8 \n\r»
print «<h1>Hello world!</h1>»
Сохраняем и открываем в браузере.
Ну ок, я это сделал, открыл — и у меня открылся просто код файла. Исполнение не произошло.
Ладно, делаем шаг 2. Открыл в корне сайта файл .htaccess (а если его нет, то нужно создать). В конец файла добавил две строки:
AddHandler cgi-script .py
DirectoryIndex index.py
Сохранил файл, попробовал снова обратиться к скрипту и получил ошибку 500 Internal Server Error. И дальше я часа 2 пытался понять, почему такое происходит. Я размещал скрипт в корне, в разных папках (в папке cgi-bin, которая была создана автоматически при создании сайта (она специально для таких скриптов, как я понял), в папке внутри неё, в папке в корне сайта и т.д.) — и ничего.
Как ни забавно, но причин оказалось 2 и обе крайне примитивные.
- У файла были выставлены неправильные права. Блин. У него по умолчанию права 644, а нужно 755.
- И вторая причина — незаметная. У меня сайты размещены одним пользователем (с ограниченными правами, а зашёл я на сервер под учётной записью root). В итоге у меня у скрипта был владелец и группа root, а у самого сайта — просто пользователь. И вот я поменял владельца и группу на простого пользователя — и, наконец-то, скрипт питона запустился и к нему стало возможно обратиться по адресу site.ru/helloworld.py. Уф.
На этом, собственно, всё.
Надеюсь, вам была полезна эта статья. Мне бы она очень помогла, если бы я её нашёл, до того как начал пытаться понять, как вообще исполнить скрипт питона на сервере в интернете.
Удачи. С уважением, Александр Крылов, aleksandr-krylov.ru