Applications Flask Python sur Plesk

Lecture de 4 minutes

Bien que ce ne soit pas officiellement documenté, il est possible d'héberger des applications Flask Python facilement avec Plesk. L'approche et les technologies sont les mêmes que celles qui sont utilisées pour le support officiel de Node.js.

1. Dépendances

Extensions de Plesk

Dans l'installateur de Plesk, assurez-vous que Phusion Passenger server et Nginx web server sont installés :

Installation des modules Plesk

Accès au serveur

Un accès en SSH au serveur est aussi requis pour faire l'installation initiale des packages Python.

Python PIP

Le package manager de Python (PIP) doit être installé sur le serveur. Pour s'assurer que c'est le cas, exécutez la commande suivante :

python3 -m pip

Si le message /usr/bin/python3: No module named pip s'affiche, alors pip doit être installé. Après vous être connecté sur le serveur avec un utilisateur root, exécutez la commande suivante pour l'installer :

sudo apt-get install python3-pip

2. Adaptez votre code Python

Lorsqu'il est utilisé pour du Python, Phusion Passenger s'attend à recevoir une Whisky App.

La plupart du temps, lorsqu'il s'agit d'une application Flask, l'ajout de ces lignes permettra à l'application d'être exposée en tant que Whisky app :

application = app

Pour une application Dash, utilisez plutôt la commande suivante :

application = app.server

3. Déployez votre code Python

Déployez votre code Python sur le serveur Plesk avec la méthode de votre choix (git, GitHub, SFTP, etc.)

Pour cet exemple, nous allons simplement créer un fichier app.py avec l'éditeur de fichier intégré à Plesk. Le contenu de ce fichier sera le suivant :

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

# The following line is required by Phusion Passenger. It exposes the WSGI App using the application variable.
# Reference : https://community.plotly.com/t/deploying-dash-app-on-a-wsgi-service/57867
application = app.server

Nous allons aussi créer le fichier requirements.txt pour indiquer quels package Python sont nécessaires au projet. Le contenu de ce fichier sera le suivant :

Flask==2.2.2
Werkzeug==2.2.2

4. Installer les dépendances Python

Connectez-vous en SSH au serveur pour télécharger et installer les dépendances du projet. Une fois connecté, exécutez les commandes suivantes :

cd /var/www/vhosts/flaskdemo.jmcouillard.com/httpdocs
python3.8 -m pip install -r requirements.txt

5. Testez l'application

À ce stade-ci, votre application devrait être disponible dans le terminal. Il est normal qu'elle ne soit pas encore disponible dans un navigateur Web.

Pour tester l'application dans le terminal, exécutez cette commande :

python3.8 app.py

Si une erreur s'affiche, alors il faut la régler avant d'aller plus loin.

6. Configurer nginx

Activer le serveur nginx sans Apache

Il est nécessaire d'indiquer à Plesk de faire passer les requêtes directement dans nginx, sans les relayer à Apache. Pour y arriver, décochez l'option Proxy mode dans les paramètres Apache & nginx Settings de votre domaine Plesk.

Plesk nginx Proxy Mode

Paramétrer nginx pour utiliser Phusion Passenger avec votre application Python

Dans la section Additional nginx directives, ajoutez les commandes suivantes en prenant soin de remplacer les valeurs par celles qui s'appliquent dans votre projet :

passenger_enabled on;
passenger_app_type wsgi;
passenger_python /usr/bin/python3.8;
passenger_startup_file app.py;
passenger_app_root /var/www/vhosts/flaskdemo.jmcouillard.com/httpdocs;

7. Tâches de déploiement automatique (facultatif)

Si vous avez choisi à l'étape 2 de déployer votre code à l'aide de git et d'un repository local de Plesk, vous pouvez améliorer votre flux de travail avec ces optimisations CI/CD.

Dans les paramètres du repository, activez l'option Enable additional deployment actions et ajoutez les commandes suivantes :

python3.8 -m pip install -r requirements.txt > pip-install.log 2>&1
passenger-config restart-app /var/www/vhosts/flaskdemo.jmcouillard.com/httpdocs >  restart-passenger.log 2>&1

Cela va permettre aux dépendances qui auraient été ajoutées d'être installés automatiquement. De plus, l'application sera redémarrée à chaque déploiement, vous assurant que la version la plus récente du code est actuellement exécutée.

Autres astuces

Redémarrer une application

Pour redémarrer votre application Flask, exécutez la commande suivante :

passenger-config restart-app /var/www/vhosts/flaskdemo.jmcouillard.com/httpdocs

Accédez aux logs

Phusion Passenger affichera le message suivant en cas de problème :

Message d'erreur de Phusion Passenger

Pour accéder aux logs mentionnés, suivez les indications de cet article et exécutez une requête à l'application via le navigateur web.