Flask
Kolf op Apache met mod_wsgi
Zoeken…
WSGI Application wrapper
Veel Flask-applicaties zijn ontwikkeld in een virtualenv om afhankelijkheden voor elke applicatie gescheiden te houden van de systeembrede Python-installatie. Zorg ervoor dat mod-wsgi is geïnstalleerd in uw virtualenv :
pip install mod-wsgi
Maak vervolgens een wsgi-wrapper voor uw Flask-toepassing. Gewoonlijk wordt het bewaard in de hoofdmap van uw toepassing.
mijn-application.wsgi
activate_this = '/path/to/my-application/venv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))
import sys
sys.path.insert(0, '/path/to/my-application')
from app import app as application
Deze wrapper activeert de virtuele omgeving en alle geïnstalleerde modules en afhankelijkheden wanneer deze wordt uitgevoerd vanuit Apache, en zorgt ervoor dat het toepassingspad eerst in de zoekpaden staat. Volgens afspraak worden WSGI toepassingsobjecten genoemd application
.
Met Apache-sites ingeschakelde configuratie voor WSGI
Het voordeel van het gebruik van Apache ten opzichte van de ingebouwde werkzeug-server is dat Apache multi-threaded is, wat betekent dat meerdere verbindingen met de applicatie tegelijkertijd kunnen worden gemaakt. Dit is met name handig in toepassingen die gebruikmaken van XmlHttpRequest (AJAX) aan de voorkant.
/etc/apache2/sites-available/050-my-application.conf (of standaard apache-configuratie indien niet gehost op een gedeelde webserver)
<VirtualHost *:80>
ServerName my-application.org
ServerAdmin [email protected]
# Must be set, but can be anything unless you want to serve static files
DocumentRoot /var/www/html
# Logs for your application will go to the directory as specified:
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# WSGI applications run as a daemon process, and need a specified user, group
# and an allocated number of thread workers. This will determine the number
# of simultaneous connections available.
WSGIDaemonProcess my-application user=username group=username threads=12
# The WSGIScriptAlias should redirect / to your application wrapper:
WSGIScriptAlias / /path/to/my-application/my-application.wsgi
# and set up Directory access permissions for the application:
<Directory /path/to/my-application>
WSGIProcessGroup my-application
WSGIApplicationGroup %{GLOBAL}
AllowOverride none
Require all granted
</Directory>
</VirtualHost>