From d45fdae4081f8630b3dcdb6b406abc01bbc9d864 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phan?= Date: Thu, 15 May 2025 07:45:13 +0200 Subject: [PATCH] =?UTF-8?q?Modification=20de=20la=20d=C3=A9tection=20de=20?= =?UTF-8?q?l'environnement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 1 - README.md | 24 +++++++++++++++++++----- config.py | 22 +++++++++++++++++++++- fabnum.py | 22 +++++++++++++++------- 4 files changed, 55 insertions(+), 14 deletions(-) diff --git a/.env b/.env index b30a332..906f656 100644 --- a/.env +++ b/.env @@ -1,4 +1,3 @@ -ENV = "public" ENV_CODE = "dev" PORT=8501 DOT_FILE = "schema.txt" diff --git a/README.md b/README.md index 444d995..9c9f140 100644 --- a/README.md +++ b/README.md @@ -34,17 +34,33 @@ Le fichier **.env.local** qui contient GITEA_TOKEN n'est pas dans le dépôt car Pour l'environnement de pré-production, (https://fabnum-dev.peccini.fr)[https://fabnum-dev.peccini.fr] : - ENV=dev + ENV_CODE = "dev" PORT=8502 + DOT_FILE = "schema.txt" GITEA_URL = "https://fabnum-git.peccini.fr/api/v1" ORGANISATION = "fabnum" DEPOT_FICHES = "fiches" + DEPOT_CODE = "code" + ID_PROJET = "3" + INSTRUCTIONS = "Instructions.md" + FICHE_IHH = "Fiches/Criticités/Fiche technique IHH.md" + FICHE_ICS = "Fiches/Criticités/Fiche technique ICS.md" + FICHE_ISG = "Fiches/Criticités/Fiche technique ISG.md" + FICHE_IVC = "Fiches/Criticités/Fiche technique IVC.md" Pour l'environnement de production, (https://fabnum.peccini.fr)[https://fabnum.peccini.fr], le fichier est identique sauf pour : - ENV=public PORT=8501 +La différence entre les deux environnements se fait au travers de la configuration du proxy Nginx (ici celle de dev ; il suffit de changer dev en public pour l'environnement de production) : + + # Ajout d'un en-tête personnalisé pour indiquer l'environnement + add_header X-Environment "dev" always; + # Transmettre l'en-tête d'environnement au backend + proxy_set_header X-Environment "dev"; + +Cette configuration est utilisée par config.py. + dev et public sont les deux branches officielles du dépôt. L'application se lance simplement sous la forme : @@ -66,12 +82,10 @@ Pour automatiser le lancement, il est intégré dans systemd : [Service] User=fabnum WorkingDirectory=/home/fabnum/fabnum-dev - ExecStart=/home/fabnum/fabnum-dev/venv/bin/streamlit run /home/fabnum/fabnum-dev/fa - bnum.py + ExecStart=/home/fabnum/fabnum-dev/venv/bin/streamlit run /home/fabnum/fabnum-dev/fabnum.py --server.port 8502 Restart=always RestartSec=5 Environment=PYTHONUNBUFFERED=1 - SELinuxContext=system_u:system_r:httpd_t:s0 [Install] WantedBy=multi-user.target diff --git a/config.py b/config.py index 9128a24..14eb895 100644 --- a/config.py +++ b/config.py @@ -1,15 +1,35 @@ import os +import streamlit as st from dotenv import load_dotenv load_dotenv(".env") load_dotenv(".env.local", override=True) +# Fonction pour déterminer l'environnement à partir de l'en-tête X-Environment +def determine_environment(): + # Valeur par défaut (si aucun en-tête n'est détecté) + environment = "dev" + + # Si nous sommes dans une session Streamlit + if hasattr(st, 'context') and hasattr(st.context, 'headers'): + try: + # Lire directement l'en-tête X-Environment défini par Nginx : dev/public + nginx_env = st.context.headers.get("x-environment") + + if nginx_env: + environment = nginx_env.lower() + except Exception as e: + st.error(f"Erreur lors de la lecture de l'en-tête X-Environment: {e}\nEnvironnement dev par défaut") + + return environment + +ENV = determine_environment() + GITEA_URL = os.getenv("GITEA_URL", "https://fabnum-git.peccini.fr/api/v1") GITEA_TOKEN = os.getenv("GITEA_TOKEN", "") ORGANISATION = os.getenv("ORGANISATION", "fabnum") DEPOT_FICHES = os.getenv("DEPOT_FICHES", "fiches") DEPOT_CODE = os.getenv("DEPOT_CODE", "code") -ENV = os.getenv("ENV") ENV_CODE = os.getenv("ENV_CODE") DOT_FILE = os.getenv("DOT_FILE") INSTRUCTIONS = os.getenv("INSTRUCTIONS", "Instructions.md") diff --git a/fabnum.py b/fabnum.py index 7e5a137..cb1d0b3 100644 --- a/fabnum.py +++ b/fabnum.py @@ -1,4 +1,12 @@ import streamlit as st + +st.set_page_config( + page_title="Fabnum – Analyse de chaîne", + page_icon="assets/weakness.png", # ajout + layout="centered", + initial_sidebar_state="expanded" +) + import re # Configuration Gitea @@ -69,13 +77,6 @@ from app.visualisations import interface_visualisations from app.personnalisation import interface_personnalisation from app.analyse import interface_analyse -st.set_page_config( - page_title="Fabnum – Analyse de chaîne", - page_icon="assets/weakness.png", # ajout - layout="centered", - initial_sidebar_state="expanded" -) - # Initialisation des traductions (langue française par défaut) init_translations() @@ -84,6 +85,13 @@ set_language("fr") session_id = st.context.headers.get("x-session-id") +# +# Important +# Avec Selinux, il faut mettre les bons droits : +# +# sudo semanage fcontext -a -t var_log_t '/var/log/nginx/fabnum-public\.access\.log' +# sudo restorecon -v /var/log/nginx/fabnum-public.access.log +# def get_total_bytes_for_session(session_id): total_bytes = 0 try: