2024 11 25 092500

Déploiement d’une application Flask avec Docker et Nginx#

Introduction#

Ce tutoriel vous guidera à travers le processus de déploiement d’une application Flask sur un serveur Ubuntu 20.04 en utilisant Docker et Nginx. Nous allons créer une application Flask simple, la containeriser avec Docker, puis la faire fonctionner derrière un serveur Nginx en tant que proxy inverse.

Technologies utilisées#

  • Python 3.8
  • Flask
  • Docker
  • Nginx
  • Ubuntu 20.04

Étape 1 : Création de l’application Flask#

Créez un nouveau répertoire pour votre projet :

mkdir flask-docker-nginx
cd flask-docker-nginx

Créez un fichier app.py avec le contenu suivant :

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return "<h1>Bienvenue sur mon application Flask !</h1>"

@app.route('/hello/<name>')
def hello(name):
    return f"<h1>Bonjour, {name} !</h1>"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Étape 2 : Création du fichier Dockerfile#

Créez un fichier Dockerfile dans le même répertoire :

# Utilisez l'image officielle Python 3.8
FROM python:3.8-slim

# Définir le répertoire de travail
WORKDIR /app

# Copier les fichiers requis
COPY requirements.txt .
RUN pip install -r requirements.txt

# Copier l'application Flask
COPY app.py .

# Exposer le port 5000
EXPOSE 5000

# Lancer l'application Flask
CMD ["gunicorn", "-b", "0.0.0.0:5000", "app:app"]

Remarque : Nous utilisons gunicorn au lieu de flask run pour plus de performance et de stabilité en production.

Étape 3 : Création du fichier requirements.txt#

Créez un fichier requirements.txt :

Flask==2.3.3
gunicorn==21.2.0

Étape 4 : Configuration de Nginx#

Créez un répertoire nginx dans le projet :

mkdir nginx

Créez un fichier nginx.conf dans le répertoire nginx :

events {
    worker_connections 1024;
}

http {
    upstream flask_app {
        server 127.0.0.1:5000;
    }

    server {
        listen 80;
        server_name localhost;

        location / {
            proxy_pass http://flask_app;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

Étape 5 : Déploiement avec Docker Compose#

Créez un fichier docker-compose.yml à la racine du projet :

version: '3.8'

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "5000:5000"
    restart: unless-stopped

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - web
    restart: unless-stopped

Étape 6 : Lancement du déploiement#

Exécutez la commande suivante pour démarrer les services :

docker-compose up -d

Étape 7 : Test de l’application#

Ouvrez votre navigateur et accédez à http://localhost. Vous devriez voir :

Bienvenue sur mon application Flask !

Accédez également à http://localhost/hello/John pour tester la route dynamique.

Conclusion#

Vous avez maintenant déployé une application Flask avec Docker et Nginx sur Ubuntu 20.04. Cette configuration vous permet de séparer les couches applicative et de proxy, améliorant ainsi la sécurité, la performance et la maintenance.

Pour des environnements de production, envisagez d’ajouter :

  • HTTPS avec Let’s Encrypt
  • Un système de journalisation centralisé
  • Des métriques et surveillance (ex. : Prometheus + Grafana)
  • Des stratégies de sauvegarde et de récupération après sinistre

Publié le 15 avril 2024
Par Votre nom