Pythoni näidisrakendus (Flask)
Virtualenv on tööriist, mille abil saab luua isoleeritud pythoni keskkondi. Virtualenv loob kataloogi, milles hakatakse hoidma pythoni projekti jaoks vajalike paigaldatud moodulite koodi. See võimaldab kliendil serverisse paigaldada selliseid mooduleid, mida serverisse eelinstalleeritud pole või paigaldada nendest erinevaid versioone.
Virtualenvi tuleb kasutada SSH keskkonnas käsurealt. SSH ligipääsu saab lisada iseteenindusest.
Loome kõikide virtualenvide jaoks kataloogi:
mkdir ~/.virtualenvs
Loome konkreetse projekti virtualenvi python 3.9-ga, nimetame selle "flask-website":
python3.9 -m venv ~/.virtualenvs/flask-website
Aktiveerime projekti virtualenvi:
source ~/.virtualenvs/flask-website/bin/activate
Nüüd on võimalik paigaldada vajalikke mooduleid, kasutades selleks tööriista pip. Piagaldame Flaski (Flask on pisike pythoni koodiraamistik):
pip install Flask
Paigaldame pythoni FastCGI kaudu jooksutamiseks vajaliku flup mooduli:
pip install flup6
Veebiserverites on pythonis kirjutatud koodi jooksutamine vaikimisi lubatud. Seda tuleb teha läbi FastCGI, mille rakendamise saab seadistada .htaccess faili kaudu.
Vaikimisi on FastCGI kasutamine seadistatud veebilehe ~/htdocs/cgi-bin kataloogi sees (loo see ise, kui seda pole). Selleks, et pythoni Flaski rakendus FastCGI kaudu tööle hakkaks, tuleb luua ~/htdocs/cgi-bin kataloogi fail dispatch.fcgi:
#!/usr/bin/env python3.9
import os, sys
DOMAIN = "domeen.ee" # Sinu domeeni nimi (ilma www-ta)
PREFIX = "/www/apache/domains/www.%s" % (DOMAIN,)
# Add a custom Python path.
sys.path.insert(0, os.path.join(PREFIX, ".virtualenvs/flask-website/lib/python3.9/site-packages/"))
from flup.server.fcgi import WSGIServer
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World! <a href=\"test/\">to test</a>"
@app.route("/test/")
def test():
return "Test!"
class ScriptNameStripper(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
environ['SCRIPT_NAME'] = ''
return self.app(environ, start_response)
app = ScriptNameStripper(app)
if __name__ == '__main__':
WSGIServer(app).run()
Failile tuleb anda käivitamise õigus:
chmod +x ~/htdocs/cgi-bin/dispatch.fcgi
Seejärel tuleb ~/htdocs/.htaccess faili lisada reeglid, mis lubavad .fcgi failide tuvastamise FastCGI skriptina ja suunavad veebipäringud dispatch.fcgi faili.
AddHandler fcgid-script .fcgi
Options +ExecCGI
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ cgi-bin/dispatch.fcgi/$1 [QSA,L]
Abistavad tähelepanekud
Koodimuudatuste rakendumine
Kui veebilehte on juba avatud, siis võib django protsess jooksmas olla ja koodi muutmise järel ei kajastu muudatused uuel lehe laadimisel koheselt. Seetõttu tuleks pärast koodimuudatusi jooksev pythoni protsess peatada, et see saaks lehe värskendamisel värske koodiga tööle hakata.
pkill -f dispatch.fcgi
Pythoni veateadete logi
Veebiserveri pealogile pole kahjuks klientidele võimalik ligipääsu tekitada. Seetõttu pythoni koodi veateateid vaadata ei saa, kuid abiks võib olla koodi käsitsi käivitamine käsurealt:
python3.9 ~/htdocs/cgi-bin/dispatch.fcgi