Outils pour utilisateurs

Outils du site


Panneau latéral

Plan du Site:

python:flask:deploiement_production

Déploiement en production

Préparation du serveur

Serveur Ubuntu 20.04 avec Apache 2.4.

Installer mod_wsgi

sudo apt install libapache2-mod-wsgi-py3

Installer python3-pip si nécessaire

sudo apt install python3-pip

Installer python3-venv

sudo apt install python3-venv

Dossier de destination

Créer un dossier

sudo mkdir /var/www/monsite
sudo chown marc:marc /var/www/monsite

Script de déploiement

Ajouter au projet un script deploy.sh :

deploy.sh
#!/bin/sh
rsync -rlpv \
    ./ \
    USER@SERVEUR:/var/www/monsite/ \
    --exclude-from=.gitignore \
    --exclude=".*" \
    --exclude="run.py"
Voir la Man Page de rsync
Ne pas oublier de terminer les chemins par des “/”

Rendre le script exécutable :

chmod +x deploy.sh

Exécuter une première fois le script, ce qui va copier l'ensemble du projet sur le serveur.

Installer les dépendances du projet

Créer un environnement virtuel

cd /var/www/monsite
python3 -m venv venv

Activer l'environnement virtuel et y installer les dépendances du projet

source venv/bin/activate
pip install -r requirements.txt

Désactiver l'environnement virtuel

deactivate

Fichier wsgi

Créer un fichier myapp.wsgi à la racine du projet :

/var/www/monsite/myapp.wsgi
#!/usr/bin/python
import os, sys
sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)))
from app import app as application

Créer un fichier .env

Si nécessaire, créer la configuration du site dans un fichier .env :

.env
FLASK_ENV=production
 
SECRET_KEY='...(chaîne aléatoire)...'
 
DBPATH=...
 
...

Pour générer la clé secrète, voir la page Générer une Secret Key

Configuration d'Apache

Créer un nouveau VirtualHost :

/etc/apache2/sites-available/monsite.conf
<VirtualHost *:80>
        ServerName monsite.com
        ServerAdmin admin@monsite.com
 
        WSGIDaemonProcess myapp user=www-data group=www-data python-home=/var/www/monsite/venv threads=5
        WSGIProcessGroup myapp
        WSGIScriptAlias / /var/www/monsite/myapp.wsgi
 
        <Directory /var/www/monsite/static>
                AllowOverride all
                Require all granted
                Allow from all
        </Directory>
 
        ErrorLog ${APACHE_LOG_DIR}/monsite.com/error.log
        CustomLog ${APACHE_LOG_DIR}/monsite.com/access.log combined
</VirtualHost>
Le nom “myapp” indiqué dans WSGIDaemonProcess et WSGIProcessGroup ne doit pas être utilisé par un autre VirtualHost !

Le dossier /var/log/apache2/monsite.com pour les logs doit exister.

Activer le site et recharger Apache :

sudo a2ensite monsite.conf
sudo systemctl reload apache2

Déploiements ultérieurs

En local, exécuter le script de déploiement

./deploy.sh

Sur le serveur, installer les nouvelles dépendances éventuelles

. venv/bin/activate
pip install -r requirements.txt
deactivate

Sur le serveur, redémarrer Apache

sudo systemctl reload apache2
python/flask/deploiement_production.txt · Dernière modification: 2023/11/09 05:33 par marclebrun