Déploiement via ssh avec la commande rsync.
À lire :
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
Créer un dossier
sudo mkdir /var/www/monsite sudo chown marc:marc /var/www/monsite
Ajouter au projet un script 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.
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
Créer un fichier myapp.wsgi à la racine du projet :
#!/usr/bin/python import os, sys sys.path.insert(0, os.path.dirname(os.path.realpath(__file__))) from app import app as application
Si nécessaire, créer la configuration du site dans un fichier .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
Créer un nouveau VirtualHost :
<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
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