====== Déploiement en production ====== Déploiement via **ssh** avec la commande **rsync**. À lire : * [[https://www.bogotobogo.com/python/Flask/Python_Flask_HelloWorld_App_with_Apache_WSGI_Ubuntu14.php]] * [[https://www.bortzmeyer.org/wsgi.html]] ===== 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** : #!/bin/sh rsync -rlpv \ ./ \ USER@SERVEUR:/var/www/monsite/ \ --exclude-from=.gitignore \ --exclude=".*" \ --exclude="run.py" ^ Voir la [[https://ss64.com/bash/rsync.html|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 : #!/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** : FLASK_ENV=production SECRET_KEY='...(chaîne aléatoire)...' DBPATH=... ... Pour générer la clé secrète, voir la page [[python:generer_secret_key]] ===== Configuration d'Apache ===== Créer un nouveau **VirtualHost** : 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 AllowOverride all Require all granted Allow from all ErrorLog ${APACHE_LOG_DIR}/monsite.com/error.log CustomLog ${APACHE_LOG_DIR}/monsite.com/access.log combined ^ 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