LINUX.ORG.RU

Запуск python-скриптов на nginx

 ,


2

3

Подскажите как. Прочитал про uwsgi - сошел сума, что мне надо зачемто создавать юзера, зачемто держать в хомяке этого юзера .py файлы... Хочу простого, чтоб также как php - файл положил в вебрут, открыл браузером получил вывод. Есть способ простой?

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

21 век, веб-сервер на питоне поднимается за полчаса (с гуглением и чтением доки), nginx как реверс-прокси настраивается за 5 минут.

Откуда, откуда возникают вопросы про uwsgi?

vvn_black ★★★★ ()
Последнее исправление: vvn_black (всего исправлений: 1)
Ответ на: комментарий от AUX

хочу скрипты не из консоли запускать, по ссылке. я не неосилятор. я просто посмотрел на то что предлагается (django+uwsgi) увидел там бред типа

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

и не увидел здесь обычного питона. даже ставить это гавнецо нет желания, не то что пробовать.

shashilx ()
Ответ на: комментарий от hippi90

А исполнять твои .py кто будет? Пушкин? Вот «веб-сервер на питоне» и будет этим заниматься.

python пусть их и исполняет. на стороне сервера. и делает вывод. кароч, как в php, только python.

shashilx ()
Ответ на: комментарий от shashilx

Если тебе не нужен FastCGI, а хватит CGI, то юзай Apache,
поделка nginx сама ничего не умеет - даже CGI запускать.

Более того, если тебе веб-сервер нужен под Windows (как тут мне недавно захотели), то nginx в винде работает только через TCP-сокеты, и даже FastCGI под виндой даже получается медленнее CGI под юниксами.

Novator ★★★★ ()
Последнее исправление: Novator (всего исправлений: 1)
Ответ на: комментарий от Novator

мне нужно сделать по простому. у меня нет приложений использующих web-фреймворки. приложения работают в консоли прекрасно. но мне надоело ходить в консоль при работающем браузере.

нужен под Windows

вы меня за когото нетого принимаете.

shashilx ()
Ответ на: комментарий от shashilx

Ты не понимаешь во что ввязался, мальчик:

Nginx не имеет встроенной поддержки CGI (вместо этого он поддерживает fastCGI). Типичным решением для этого является запуск Perl script в качестве процесса fastCGI и редактирование файла конфигурации nginx для перенаправления запросов на процесс fastCGI. Это довольно сложное решение, если все, что вы хотите сделать, это запустить CGI script.

Вам нужно использовать nginx для этого решения? Если все, что вы хотите сделать, это выполнить некоторые скрипты Perl CGI, подумайте об использовании Apache или Lighttpd, поскольку они поставляются с модулями CGI, которые будут обрабатывать ваши сценарии CGI изначально и не требуют, чтобы script выполнялся как отдельный процесс. Для этого вам необходимо установить веб-сервер и отредактировать файл конфигурации веб-сервера для загрузки модуля CGI. Для Lighttpd вам нужно будет добавить строку в файл конфигурации, чтобы разрешить обработку файлов CGI. Затем поместите файлы CGI в папку cgi-bin.

http://qaru.site/questions/306097/how-to-run-cgi-scripts-on-nginx

Novator ★★★★ ()
Ответ на: комментарий от Novator

cgi... cgi.... cgi.... я честно, даже не знаю, что это (сталкивался с нуждой эти самые cgi настроить чтоб работали, но делал просто по мануалу, не вникая что за нахрен и почему оно всё как-то сделано через задницу, а не так как пхп. вообще, я не понимаю этой всей задницы с чем-то отличным от пхп. только пхп и умеет вот так по простому - сделал файло, положил в вебрут и оно работает. за каким фигом мне нужно эти самые cgi ложить в cgi-bin и запускать оттуда мне тоже непонятно и нет желания понимать. почему не сделают простое - расширение .xyz запускать интерпретатором xyz и всё) ))))) и впринципе мне пофиг, какой будет вебсервер, т.к. это домашний сервачок. пусть это будет апач, ещё что, не важно. главная цель - просто ложить .py в вебрут и иметь вывод.

shashilx ()
Ответ на: комментарий от bdfy

из вики - Flask является микрофреймворком для создания вебсайтов на языке Python. В основу статьи положен перевод из официальной документации Flask. Поэтому в ней имеется обращение от первого лица, то есть от создателя фреймворка Армина Ронахера.

нет, я не собираюсь создавать вебсайты или вебприложения и соотвественно не хочу ставить это.

shashilx ()
Ответ на: комментарий от shashilx

только пхп и умеет вот так по простому - сделал файло, положил в вебрут и оно работает

П-zдишь, PHP так не умеет, и пукалка Nginx так не умеет - это «просто» делает Apache или Lighttpd.

Novator ★★★★ ()

да uwsgi проще паренной репы. С php все хуже. uwsgi умеет не только python

uwsgi-plugin-gccgo - GNU Go plugin for uWSGI uwsgi-plugin-geoip - GeoIP plugin for uWSGI uwsgi-plugin-gevent-python - gevent plugin for uWSGI (Python 2) uwsgi-plugin-glusterfs - GlusterFS storage plugin for uWSGI uwsgi-plugin-graylog2 - graylog2 plugin for uWSGI uwsgi-plugin-greenlet-python - greenlet plugin for uWSGI (Python 2) uwsgi-plugin-jvm-openjdk-8 - Java plugin for uWSGI (OpenJDK 7) uwsgi-plugin-jwsgi-openjdk-8 - JWSGI plugin for uWSGI (OpenJDK 7) uwsgi-plugin-ldap - LDAP plugin for uWSGI uwsgi-plugin-lua5.1 - Lua WSAPI plugin for uWSGI (Lua 5.1) uwsgi-plugin-lua5.2 - Lua WSAPI plugin for uWSGI (Lua 5.2) uwsgi-plugin-luajit - Lua WSAPI plugin for uWSGI (LuaJIT) uwsgi-plugin-mono - Mono/ASP.NET plugin for uWSGI uwsgi-plugin-php - PHP plugin for uWSGI uwsgi-plugin-psgi - Perl PSGI plugin for uWSGI uwsgi-plugin-python - WSGI plugin for uWSGI (Python 2) uwsgi-plugin-python3 - WSGI plugin for uWSGI (Python 3) uwsgi-plugin-rack-ruby2.3 - Rack plugin for uWSGI (ruby2.3) uwsgi-plugin-rados - Ceph/RADOS storage plugin for uWSGI uwsgi-plugin-rbthreads - Ruby native threads plugin for uWSGI (ruby2.3) uwsgi-plugin-ring-openjdk-8 - Closure/Ring plugin for uWSGI (OpenJDK 7) uwsgi-plugin-router-access - Access router plugin for uWSGI uwsgi-plugin-servlet-openjdk-8 - JWSGI plugin for uWSGI (OpenJDK 7) uwsgi-plugin-sqlite3 - SQLite 3 configurations plugin for uWSGI uwsgi-plugin-tornado-python - tornado plugin for uWSGI (Python 2) uwsgi-plugin-v8 - JavaScript V8 plugin for uWSGI uwsgi-plugin-xslt - XSLT request plugin for uWSGI

dem ()
Ответ на: комментарий от shashilx

Дык php-fpm и есть FastCGI-пыхпых-сервер-приложений.

Есть ещё php-fastcgi.

Пойми одну простую вещь: пукалка Nginx сама ничего не умеет, она может только перенаправлять веб-запросы на сервера приложений. Причем может это только через хитровы-банные протоколы типа FastCGI.

Сырой веб-трафик (CGI) со скриптов она брать не умеет, ибо тупа как пробка.

Novator ★★★★ ()
Ответ на: комментарий от shashilx

нет, я не собираюсь создавать вебсайты или вебприложения и соотвественно не хочу ставить это.

Вот сейчас совсем не понятно. Зачем тебе NGINX если ты «я не собираюсь создавать вебсайты или вебприложения»

Ты еще PostgreSQL поставь если тебе БД не нужно

dem ()
Ответ на: комментарий от Novator

ок. что мне поставить (какой сервер приложений) чтоб всё было по простому. без установки любых фреймворков (по крайней мере до поры, пока я не захочу использовать этот фреймвор). без cgi-bin, без добавления юзеров, просто ложа файлы в вебрут и открывая их в браузере хочу видеть результат выполнения.

shashilx ()
Ответ на: комментарий от dem

Зачем тебе NGINX если ты «я не собираюсь создавать вебсайты или вебприложения»

есть python скрипт, который я запуска в консоли. надоело открывать консоль, при открытом браузере. хочу видеть результат выполенния скрипта открыв http://example.org/python.py и конечно же, скрипт должен запуститься и показать результат выполнения тогда, когда я обращусь к нему. и от этой хотелки - оно не становится вебприложением.

shashilx ()
Последнее исправление: shashilx (всего исправлений: 1)
Ответ на: комментарий от shashilx

что мне поставить (какой сервер приложений) чтоб всё было по простому

по-простому с Nginx не получится, если ты ещё не врубился - ибо это недоделанная пускалка.

А по хитрому - через uwsgi

Но этого мало. Насколько я понял, сам python-движок тоже должен поддерживать FastCGI и уметь разговаривать с uwsgi по этому протоколу.

У тебя какой пистон-движок?

Если движка нет и ты используешь сырой пистон, то гугли по словам «direct cgi uwsgi», uwsgi умеет вызывать скрипты, но нужно задавать его вызов (в конфигах) как-то так:

uwsgi --socket mysite.sock --wsgi-file test.py

либо так:

uwsgi --http :8000 --wsgi-file test.py

А потом натравливать nginx на UNIX-socket в слюниксе (mysite.sock) или на TCP-сокет (:8000) в вантузе.

Novator ★★★★ ()
Последнее исправление: Novator (всего исправлений: 3)
Ответ на: комментарий от shashilx

Вот тебе больше параметров из моих черновиков:

#!/bin/sh

uwsgi --http :8000 --wsgi-file test.py
uwsgi --http :8000 --module mysite.wsgi
uwsgi --socket mysite.sock --wsgi-file test.py
uwsgi --socket mysite.sock --wsgi-file test.py --chmod-socket=666 #много полномочий
uwsgi --socket mysite.sock --wsgi-file test.py --chmod-socket=664 #более разумно

uwsgi --socket mysite.sock --module mysite.wsgi --chmod-socket=664

uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2

uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

uwsgi --socket 127.0.0.1:3031 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

uwsgi --http-socket 127.0.0.1:3031 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

uwsgi --socket 127.0.0.1:3031 --chdir /home/foobar/myproject/ --wsgi-file myproject/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

uwsgi yourfile.ini
uwsgi --socket 127.0.0.1:3031 --chdir /home/foobar/myproject/ --pythonpath .. --env DJANGO_SETTINGS_MODULE=myproject.settings --module "django.core.handlers.wsgi:WSGIHandler()" --processes 4 --threads 2 --stats 127.0.0.1:9191

uwsgi --socket 127.0.0.1:3031 --wsgi-file myflaskapp.py --callable app --processes 4 --threads 2 --stats 127.0.0.1:9191
Novator ★★★★ ()
Ответ на: комментарий от shashilx
import http.server
import subprocess


class RequestHandler(http.server.BaseHTTPRequestHandler):
    def do_GET(self):
        proc = subprocess.run(['python3', f'./scripts/{self.path}'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
        self.send_response(200 if proc.returncode == 0 else 500)
        self.end_headers()
        self.wfile.write(proc.stdout)


address = ('127.0.0.1', 8080)
server = http.server.ThreadingHTTPServer(address, RequestHandler)
server.serve_forever()

Вот тебе простейшая запускалка скриптов из http. Только в веб не выставляй, а то поломают :)

deadNightTiger ★★★★ ()
Ответ на: комментарий от Novator

Насколько я понял, сам python-движок тоже должен поддерживать FastCGI и уметь разговаривать с uwsgi по этому протоколу.

Какой нахрен FastCGI.... Як дите...http://qaru.site/questions/95399/differences-and-uses-between-wsgi-cgi-fastcgi-and-modpython-in-regards-to-python

dem ()

А банально поставить опач и AddHandler cgi-script .py + Options ExecCGI в твоём вебруте уже не модно, что-ли? Обязательно надо пердолится с нжинксом который этого by design не умеет? Смузи в голову ударило?

Stanson ★★★★★ ()
Ответ на: комментарий от shashilx

мне нужно сделать по простому

пошел .....

вы меня за когото нетого принимаете.

держим за ...... ......

почитай что такое nginx, после прочитай что такое python, после подумай головой и не задавай глупых вопросов.

ggrn ★★★★★ ()
Ответ на: комментарий от dem

А если скрипт будет час работать?

поскольку вопрос из разряда «а если...», то и я пофантазирую:

- А если скрипт будет час работать?
- Слетаю на марс, прогуляюсь по марианской впадине, погляжу ютуб как там на Тау Кита

shashilx ()