Giter Club home page Giter Club logo

flask-reverse-proxy's Introduction

Scalling horizontal

Nous allons ici mettre en place un reverse proxy tres simpel a l'aide de Nginx Proxy Manager pour deployer des container de type Flask(python).

Introduction

Scalling horizontal :
Le "Scaling horizontal" (mise à l'échelle horizontale) est une technique de gestion de la charge dans laquelle de nouvelles instances ou serveurs sont ajoutés à un système ou une application existante afin de répartir la charge de manière équilibrée. Cette approche vise à améliorer les performances et la disponibilité en permettant au système de gérer un plus grand nombre de requêtes ou d'utilisateurs tout en maintenant une qualité de service élevée. Elle est souvent utilisée dans les environnements informatiques cloud et les applications Web pour garantir une extensibilité efficace.

Scalling vertical :
Le "Scaling vertical" (mise à l'échelle verticale) est une technique de gestion de la charge dans laquelle les ressources d'un serveur ou d'une instance existante sont augmentées, généralement en ajoutant plus de puissance de calcul, de mémoire ou d'autres ressources matérielles. Contrairement au "Scaling horizontal" qui consiste à ajouter davantage de serveurs ou d'instances, le scaling vertical implique d'optimiser les ressources d'une seule machine pour améliorer ses performances. Cela peut être utile pour des charges de travail spécifiques qui nécessitent plus de ressources, mais il peut atteindre une limite en termes de capacité matérielle disponible sur une seule machine.

Il est important de placer le .env de le gitignore pour pas publier nos informations personnel, ! Par contre il est important de ne pas le placer dans le dockerignore car docker en a besoin etant donné qu'on utilise ldes variabel d'env dans le docker-compose.

Mise en place de l'app

L'application en place se limite à renvoyer une chaîne de caractères sur l'URL de base de l'application web.

from flask import Flask
import socket

app = Flask(__name__)

@app.route('/')
def hello_world():
    host_name = socket.gethostname()
    return f'Hello, World from Flask! Running on container: {host_name}'

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

Docker File

# Utilise une image de base Python officielle
FROM python:3.9-slim

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

# Copie les fichiers requis dans le conteneur
COPY . /app

# Installe Flask
RUN pip install flask

# Expose le port sur lequel l'application s'exécutera
EXPOSE 5000

# Commande pour exécuter l'application
CMD ["python", "./app.py"]

Docker Compose

Ici nous allons desactiver les parametre en rapport avec le ssl et le https pour ne pas rallonger ce tutoriel.

version: '3.8'

services:
  flask-app:
    build: . # Chemin vers le répertoire contenant le Dockerfile de Flask

  nginx-proxy-manager:
    image: 'jc21/nginx-proxy-manager'
    restart: unless-stopped
    depends_on:
      - db-proxy
    ports:
      - '80:80' # Port HTTP
      - '81:81' # Interface d'administration NPM
    environment:
      DB_MYSQL_HOST: db-proxy
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: ${MYSQL_USER}
      DB_MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      DB_MYSQL_NAME: ${MYSQL_DATABASE}
      DISABLE_HTTPS: 'true' # A desactiver en production
      #DISABLE_IPV6: 'true' # A activer pour certains conteneurs
    volumes:
      - proxy-data:/data
      #- proxy-letsencrypt:/etc/letsencrypt

  db-proxy:
    image: 'jc21/mariadb-aria'
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - db-proxy-data:/var/lib/mysql

volumes:
  proxy-data:
  proxy-letsencrypt:
  db-proxy-data:

.env

Ici nous allons placer nos variable d'environement necessaire et inscrite dans notre fichier docker-compose.yaml

MYSQL_ROOT_PASSWORD=proxy
MYSQL_DATABASE=proxy
MYSQL_USER=proxy
MYSQL_PASSWORD=proxy

.gitignore

Penser a placer ce fichier dans le point .gitignore pour de na reveller les données sensible

.env

Lancer l'app

Une fois l'app en place, lancer le container en local :

docker-compose up

Puis consulter l'url :

http://localhost:81/login

Connectez vous :

Email: [email protected]
Password: changeme

Proxy Setup

CLiquer sur 'Proxy host' puis sur 'Add Proxy Host'.

Dans cet input saisissez l'adresse ip de l'host de la machine. Attention a ne pas mettre localhost car nginx vas l'interpretter comme "lui meme". ipconfig ou ifconfig pour recuperer son adresse ip

ipconfig (Windows : Recuperer adresse ip Eth0)
ifconfig (Linux : Recuperer adresse ip en0)

Ensuite je vais preciser dans forward hostname ip le nom de domaine interne de l'ap flask-app precisé dans le fichier docker-compose.yaml.

services:
  flask-app:
    build: . # Chemin vers le répertoire contenant le Dockerfile de Flask

Puis precisr le port que l'on a inscrit precedement dans le Dockerfile.

# Expose le port sur lequel l'application s'exécutera
EXPOSE 5000

img.png

Cliquer sur Valider.

Puis aller dans un navigateur puis consulter l'adresse ip inscrit preceddement.

img_1.png

Créations multiple de containers

Maintenant nous allons ouvrir un nouveau terminal puis executer la commande suivante :

docker-compose up -d --scale flask-app=3

Trois nouvelles instance vont etre crée, vous pouvez ocnstater le resultat en regardant l'interface de docker ou en utilisant le terminal.

Flask-Reverse-Proxy

flask-reverse-proxy's People

Contributors

cansefr avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.