Flask
Flask na Apache z mod_wsgi
Szukaj…
Opakowanie aplikacji WSGI
Wiele aplikacji Flask zostało opracowanych w trybie virtualenv, aby zachować zależności dla każdej aplikacji osobno od ogólnosystemowej instalacji Pythona. Upewnij się, że mod-wsgi jest zainstalowany na twoim virtualenv :
pip install mod-wsgi
Następnie utwórz opakowanie wsgi dla aplikacji Flask. Zwykle jest przechowywany w katalogu głównym aplikacji.
my-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
To opakowanie aktywuje środowisko wirtualne oraz wszystkie zainstalowane moduły i zależności po uruchomieniu z Apache i upewnia się, że ścieżka aplikacji jest pierwsza na ścieżkach wyszukiwania. Zgodnie z konwencją obiekty aplikacji WSGI są nazywane application
.
Konfiguracja obsługiwana przez strony Apache dla WSGI
Zaletą używania Apache nad wbudowanym serwerem werkzeug jest to, że Apache jest wielowątkowy, co oznacza, że można jednocześnie nawiązywać wiele połączeń z aplikacją. Jest to szczególnie przydatne w aplikacjach korzystających z XmlHttpRequest (AJAX) na interfejsie.
/etc/apache2/sites-available/050-my-application.conf (lub domyślna konfiguracja apache, jeśli nie jest hostowana na udostępnionym serwerze internetowym)
<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>