Publier un site Flask sur Apache
Comment faire un site web en Python et le déployer sur son serveur Apache.
Prérequis
- Apache2
- mod_wsgi
- flask
Installation
Installation d’Apache :
sudo apt update
sudo apt install apache2
Installation des modules :
sudo apt-get install libapache2-mod-wsgi-py3 python-dev
Installation de Flask :
pip install flask
Créer une application Flask
mkdir /home/user/www/flask
On ajoute 3 fichiers :
__init__.py
: un fichier vide.
my_flask_app.py
:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def test():
return "Coucou !"
if __name__ == "__main__":
app.run()
my_flask_app.wsgi
: ce fichier nécessite d’avoir le même nom que l’application.
#! /usr/bin/python3
import logging
import sys
logging.basicConfig(stream=sys.stderr)
sys.path.insert(0, '/home/user/www/flask/')
from my_flask_app import app as application
application.secret_key = 'change moi'
Configurer le serveur web
vim /etc/apache2/sites-available/ExampleFlask.conf
<VirtualHost *:80>
# Add machine's IP address (use ifconfig command)
ServerName mondomaine.com
# Give an alias to to start your website url with
WSGIScriptAlias /flask /home/user/www/flask/my_flask_app.wsgi
<Directory /home/user/www/flask/>
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
On active le site :
sudo a2ensite /etc/apache2/sites-available/ExampleFlask.conf
On redémarre le serveur :
sudo service apache2 restart
On peu désormais se connecter au site www.mondomaine.com/flask/
!
Problèmes potentiels
Il se peut que certains modules aient besoin d’accéder aux fichiers (par exemple OpenCV
). Par défaut, cela ne fonctionnera pas.
Pour résoudre ce problème, il faut rajouter cette ligne dans le VirtualHost :
WSGIScriptAlias /flask /home/user/www/flask/my_flask_app.wsgi application-group=%{GLOBAL}
Pour éviter d’autres problèmes de droits, on peut ajouter :
WSGIDaemonProcess app user=www-data group=www-data threads=2 python-home=/home/user/www/flask/venv python-path=/home/user/www/flask