Sida 1 av 1

Köra .py filer från nginx

Postat: 13 augusti 2016, 13:54:58
av sodjan
Har fått igång det mesta på Synologicen.
Webb server (nginx), Web Admin, MariaDB, phpMyAdmin.
Har Python 2.7 installerat.

Nu skulle jag vilja köra ett .py skript via en URL typ /server/dir/file.py.
Just nu får jag bara en "open/save" dialog. Servern hittar alltså filen
men den påbörjar en nerladdning istället för att skicka den till Python.

Jag har sett att för PHP så finns det en del i en .conf fil som ser ut som:

Kod: Markera allt

    location ~* \.php$ {
        fastcgi_pass unix:/run/php-fpm/php56-fpm.sock;
        include fastcgi.conf;
    } 
Om jag skapar en enkel test.php så fungerar det OK och jag får
en sida med enbart "Hello World".

Kod: Markera allt

<html>
 <head>
  <title>PHP Test</title>
 </head>
 <body>
 <?php echo '<p>Hello World</p>'; ?> 
 </body>
</html>
Har googlat som faan men inte hittat något motsvarande för att köra
ett Python skript. Alltså som "plain old" CGI. Jag vet att det finns modernare
och snabbare metoder som FCGI o.s.v., men vanlig CGI borde också fungera (?).

Jag har ett enkelt Python/CGI skript:

Kod: Markera allt

#!C:\Python27\python.exe -u
#!/usr/bin/env python

import cgi
import cgitb; cgitb.enable()  # for troubleshooting

print "Content-type: text/html"
print

print """
<html>
<head><title>Sample CGI Script</title></head>
<body>
 <h3> Sample CGI Script </h3>"""

form = cgi.FieldStorage()
message = form.getvalue("message", "(no message)")

print """
  <p>Previous message: %s</p>
  <p>form
  <form method="post" action="index.cgi">
    <p>message: <input type="text" name="message"/></p>
  </form>
</body>
</html>""" % cgi.escape(message)

Re: Köra .py filer från nginx

Postat: 13 augusti 2016, 14:39:01
av tgr
Jag brukar köra python genom uwsgi i nginx.
Då pekar du en uri i nginx till en "app" som uwsgi sedan är ansvarig för att hålla vid liv.
http://uwsgi-docs.readthedocs.io/en/lat ... start.html

Sen kan jag rekomendera att använda ett framework om du skall bygga webtjänster i python.
http://bottlepy.org/docs/dev/index.html
http://flask.pocoo.org

Dessa går såklart att köra direkt på en port under utveckling och via proxy i nginx om det bara en enkel liten tjänst.

//Erik

Re: Köra .py filer från nginx

Postat: 13 augusti 2016, 16:09:56
av sodjan
Jo, jag har sett UWSGI och liknande och jag vet att det finns olika
"frameworks", men det ska väl för 17 även fungera med vanlig CGI (?).

Re: Köra .py filer från nginx

Postat: 14 augusti 2016, 14:18:23
av thebolt
Nej, nginx stödjer inte "vanlig CGI" då det bedöms som ett utdött, långsamt och oeffektivt sätt att göra det. Du kan använda fastCGI, men det finns inte direkt nån anledning att då inte direkt gå på uwsgi.

Behövs inget stort framework för det, men ett mindre kan hjälpa att snabba upp utvecklingsprocessen.

-M

Re: Köra .py filer från nginx

Postat: 14 augusti 2016, 15:01:19
av sodjan
OK. Jag går på uWSGI. Behöver läsa på lite. Jag har så här långt
inte hittat något om uWSGI som är specifikt för Synology.

Framework är väl mer för att utveckla Python programmen
som sådana, det får vi se hur vi gör. Det handlar till att börja
med om ganska enkla prylar så det går nog att "handjaga".
Det brukar även ge en bättre förståelse för grundtekniken.