Flask auf deinem Uberspace

21. April 2012. Tagged uberspace, python, apache.

Ich hatte letzt mal wieder eine Anfrage wie genau ich Flask (und damit auch werkzeug, da Flask ja darauf basiert) auf meinem Uberspace zum laufen bekommen habe.

Letzendlich geht es darum, wie man Apache mit fcgi und python (bzw. im Speziellen werkzeug) zum Laufen bringt. Dazu habe ich im wesentlichen zwei Scripts.

Ich habe auf meinem Uberspace dafür eine .htaccess und eine uberspace.fcgi angelegt. In der .htaccess steht folgendes:

1
2
3
4
5
6
7
8
9
10
AddHandler fcgid-script .fcgi
Options +ExecCGI
Options +FollowSymLinks

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !uberspace.fcgi
RewriteRule (.*) uberspace.fcgi/$1 [QSA,L]

Die letzen Endes nichts anderes macht, als einfach alle Anfragen auf die uberspace.fcgi umschreibt. Diese wiederum enthält folgendes:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/env python2.7
import sys, os

sys.path.insert(0, '<der ordner in dem euer flask liegt>')

from flup.server.fcgi import WSGIServer
from www import www

class ApacheUberspaceRewriteFix(object):
    def __init__(self, app):
        self.app = app
    def __call__(self, environ, start_response):
        environ['SCRIPT_NAME'] = ''
        return self.app(environ,	start_response)

if __name__ == '__main__':
    WSGIServer(ApacheUberspaceRewriteFix(www)).run()

In dieser Datei steckt jetzt die wahre Magie. Am wichtigsten ist, dass ihr den Pfad oben bearbeitet. Desweiteren sorgt das Skript einfach dafür, dass alle Links passen und ihr keine Probleme mit eurem Rewrite usw. bekommt. Mein Flask wollte nämlich nicht so recht mit dem Apache kooperieren. ;)

Wie immer bin ich den beteiligten Helfern wie z.B. dem uberspace-Support und den Flask-Entwicklern zu tiefstem Dank verpflichtet! :)