├── .gitignore ├── README.md └── app.py /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__/ 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # **Déployer une Application Flask sur Apache avec WSGI** 2 | 3 | ### 1. **Table des Matières** 4 | - [Description](#2-description) 5 | - [Prérequis](#3-prérequis) 6 | - [Installation](#4-installation) 7 | - [Configuration de l'application Flask](#5-configuration-de-lenvironnement-python-et-de-lapplication-flask) 8 | - [Configuration d'Apache](#2-configuration-dapache) 9 | - [Tester l'Application](#7-tester-lapplication) 10 | - [Ressources Utiles](#8-ressources-utiles) 11 | - [Licence](#9-licence) 12 | 13 | ### 2. **Description** 14 | Ce guide vous montre comment déployer une application Flask sur un serveur Apache grâce à WSGI. 15 | 16 | * **Flask** : un micro-framework Python facilitant la création d'applications web. 17 | * **Apache** : un serveur web qui gère les différentes requêtes en production et les redirige vers les applications appropriées. Cependant, Apache ne peut pas traiter les requêtes Python seul ; une passerelle est nécessaire. 18 | * **WSGI** : une norme qui permet de connecter des applications web développées avec des frameworks comme Flask ou Django à des serveurs web tels qu'Apache ou Nginx. 19 | 20 | Nous allons construire pas à pas une application Flask, puis la déployer sur un serveur Apache en utilisant une passerelle WSGI. 21 | 22 | ### 3. **Prérequis** 23 | - Python, Flask 24 | - Ubuntu 22.04 25 | 26 | ### 4. **Installation** 27 | Commençons par installer Python, Apache et la passerelle WSGI sur notre machine via le terminal : 28 | 29 | - Mettez à jour les paquets : 30 | ```bash 31 | sudo apt update -y 32 | ``` 33 | 34 | #### 1. Installation de Python 35 | Installez Python avec les commandes suivantes : 36 | ```bash 37 | sudo apt install python3 python3-pip python3-venv 38 | ``` 39 | 40 | #### 2. Installation d'Apache 41 | - Installez Apache : 42 | ```bash 43 | sudo apt install apache2 44 | ``` 45 | - Lancez Apache : 46 | ```bash 47 | sudo systemctl enable apache2 && sudo systemctl start apache2 48 | ``` 49 | - Vérifiez le statut d'Apache : 50 | ```bash 51 | sudo systemctl status apache2 52 | ``` 53 | 54 | #### 3. Installation de WSGI 55 | Installez le module WSGI pour Apache : 56 | ```bash 57 | sudo apt install libapache2-mod-wsgi-py3 58 | ``` 59 | 60 | ### 5. **Configuration de l'Environnement Python et de l’Application Flask** 61 | À cette étape, nous allons créer un environnement Python et cloner le projet sur notre machine. 62 | 63 | #### 1. Clonage du projet 64 | - Accédez au dossier www : 65 | ```bash 66 | cd /var/www 67 | ``` 68 | - Clonez le projet : 69 | ```bash 70 | git clone 71 | ``` 72 | 73 | #### 2. Création de l'Environnement Virtuel Python 74 | - Accédez au répertoire du projet : 75 | ```bash 76 | cd /var/www/flask-wsgi-apache-setup 77 | ``` 78 | - Créez l'environnement virtuel dans le projet : 79 | ```bash 80 | python3 -m venv flask-venv 81 | ``` 82 | - Activez l'environnement : 83 | ```bash 84 | source flask-venv/bin/activate 85 | ``` 86 | 87 | #### 3. Installation des dépendances 88 | Installez Flask : 89 | ```bash 90 | pip3 install flask 91 | ``` 92 | 93 | Définissez la variable d'environnement `FLASK_APP` : 94 | ```bash 95 | export FLASK_APP=app.py 96 | ``` 97 | 98 | Testez si tout fonctionne correctement : 99 | ```bash 100 | flask run --host=0.0.0.0 101 | ``` 102 | 103 | Une fois le test terminé, désactivez l'environnement : 104 | ```bash 105 | deactivate 106 | ``` 107 | 108 | ### 6. **Configuration d'Apache** 109 | Maintenant que notre application Flask est prête, nous devons la déployer sur un serveur Apache. Apache ne comprend pas directement le code Python, nous utiliserons donc WSGI pour servir notre application. 110 | 111 | #### 1. **Configuration de WSGI** 112 | Créez un fichier `.wsgi` dans le répertoire de l’application : 113 | ```bash 114 | nano flask-app.wsgi 115 | ``` 116 | Ajoutez le contenu suivant : 117 | ```python 118 | import sys 119 | sys.path.insert(0, "/var/www/flask-wsgi-apache-setup") 120 | from app import app as application 121 | ``` 122 | 123 | #### 2. **Configuration d'Apache** 124 | Accédez au dossier de configuration d'Apache : 125 | ```bash 126 | cd /etc/apache2/sites-available 127 | ``` 128 | Créez un fichier de configuration : 129 | ```bash 130 | nano flask-wsgi-apache-setup.conf 131 | ``` 132 | Ajoutez-y le contenu suivant, en remplaçant `yourdomain.com` par votre adresse IP : 133 | ```apache 134 | 135 | ServerName yourdomain.com 136 | DocumentRoot /var/www/flask-wsgi-apache-setup 137 | 138 | WSGIDaemonProcess app user=www-data group=www-data threads=5 python-home=/var/www/flask-wsgi-apache-setup/flask-venv 139 | WSGIScriptAlias / /var/www/flask-wsgi-apache-setup/flask-app.wsgi 140 | 141 | ErrorLog ${APACHE_LOG_DIR}/flask-error.log 142 | CustomLog ${APACHE_LOG_DIR}/flask-access.log combined 143 | 144 | 145 | WSGIProcessGroup app 146 | WSGIApplicationGroup %{GLOBAL} 147 | Require all granted 148 | 149 | 150 | ``` 151 | 152 | Redémarrez Apache pour appliquer les modifications : 153 | ```bash 154 | sudo a2dissite 000-default.conf 155 | sudo a2ensite flask-wsgi-apache-setup.conf 156 | sudo systemctl restart apache2 157 | ``` 158 | 159 | ### 7. **Tester l'Application** 160 | Pour vérifier que tout fonctionne, entrez l'adresse IP dans votre navigateur. 161 | 162 | ### 8. **Ressources Utiles** 163 | - [Documentation Flask](https://flask.palletsprojects.com/) 164 | - [Documentation Apache](https://httpd.apache.org/docs/) 165 | - [Documentation WSGI](https://wsgi.readthedocs.io/) 166 | 167 | ### 9. **Licence** 168 | MIT License -------------------------------------------------------------------------------- /app.py: -------------------------------------------------------------------------------- 1 | from flask import Flask 2 | 3 | app = Flask(__name__) 4 | 5 | @app.route("/") 6 | def index(): 7 | return "Hello World !!!" 8 | 9 | if __name__ == "__main__": 10 | app.run() --------------------------------------------------------------------------------