Basculer le menu
Changer de menu des préférences
Basculer le menu personnel
Non connecté(e)
Votre adresse IP sera visible au public si vous faites des modifications.

HomePharma

De EC_Wiki
Version datée du 9 février 2026 à 11:15 par Eugene (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

🚀 Déploiement & Maintenance – HomePharma (Flask + Apache)

📝 Mémo Déploiement

    • Cloner ou mettre à jour** le code dans `/var/www/HomePharma`
    • Créer / activer l'environnement virtuel
cd /var/www/HomePharma
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
   
    • Créer le fichier wsgi.py (si absent)
from app import app

if __name__ == "__main__":
    app.run()
   
    • Vérifier les permissions
sudo chown -R www-data:www-data /var/www/HomePharma
   
    • Recharger et démarrer le service
sudo systemctl daemon-reload
sudo systemctl restart homepharma
sudo systemctl status homepharma
   
    • Tester avec Gunicorn (optionnel)
cd /var/www/HomePharma
source venv/bin/activate
venv/bin/gunicorn --bind 0.0.0.0:5000 wsgi:app
   
    • Créer un fichier de configuration Apache
sudo nano /etc/apache2/sites-available/homepharma.conf
 # ?? Redirection HTTP ? HTTPS
 <VirtualHost *:80>
       ServerAdmin webmaster@localhost
       DocumentRoot /var/www/homepharma
       ServerAlias homepharma *.homepharma
       <Directory /var/www/homepharma>
                Options FollowSymLinks
                AllowOverride None
       </Directory>
 </VirtualHost>
    • Créer le lien symbolique vers sites-enabled
ln -s /etc/apache2/sites-available/homepharma.conf /etc/apache2/sites-enabled/homepharma.conf



🔗 Schéma Architecture

   [ Navigateur ] 
         │ (HTTPS)
         ▼
 ┌───────────────────┐
 │      Apache       │
 │  (mod_proxy + SSL)│
 └────────┬──────────┘
          │ (Proxy via UNIX socket)
          ▼
 ┌───────────────────┐
 │     Gunicorn      │
 │  (WSGI serveur)   │
 └────────┬──────────┘
          │ (appel WSGI)
          ▼
 ┌───────────────────┐
 │      Flask        │
 │ (ton application) │
 └───────────────────┘


🌐 Schéma des Ports & Sockets

Navigateur (client)
      │
      │  HTTPS :443
      ▼
┌───────────────┐
│    Apache     │  <-- écoute sur :443 (HTTPS)
└──────┬────────┘
       │
       │ ProxyPass (pas de port TCP, utilise un SOCKET UNIX)
       ▼
/var/www/HomePharma/homepharma.sock
       │
       │ (Socket Unix = communication locale, pas ouvert sur réseau)
       ▼
┌───────────────┐
│   Gunicorn    │  <-- ne publie rien sur un port TCP en prod
└──────┬────────┘
       │
       │ WSGI call
       ▼
┌───────────────┐
│    Flask      │
└───────────────┘


🖥️ Commandes Fréquentes

Action Commande
▶️ Démarrer le service sudo systemctl start homepharma
🔄 Redémarrer après mise à jour sudo systemctl restart homepharma
♻️ Recharger sans coupure sudo systemctl reload homepharma
⏹️ Arrêter le service sudo systemctl stop homepharma
📊 Voir l'état sudo systemctl status homepharma
📜 Logs en direct journalctl -u homepharma -f
🧪 Test manuel sur port 5000 cd /var/www/HomePharma && source venv/bin/activate && venv/bin/gunicorn --bind 0.0.0.0:5000 wsgi:app
🔧 Logs Apache sudo tail -f /var/log/apache2/error.log

🔄 Procédure de Mise à Jour

  1. **Aller dans le dossier du projet**
cd /var/www/HomePharma
   
  1. **Activer l'environnement virtuel**
source venv/bin/activate
   
  1. **Mettre à jour le code (exemple avec Git)**
git pull origin main
   
  1. **Mettre à jour les dépendances si besoin**
pip install -r requirements.txt
   
  1. **Vérifier les permissions**
sudo chown -R www-data:www-data /var/www/HomePharma
   
  1. **Redémarrer le service pour appliquer les changements**
sudo systemctl restart homepharma
   
  1. **Vérifier l'état et les logs**
sudo systemctl status homepharma
journalctl -u homepharma -n 20 --no-pager
   


Service

sudo nano /etc/systemd/system/PROJECT_NAME.service

  1. /etc/systemd/system/homepharma.service

[Unit] Description=Gunicorn instance to serve HomePharma Flask app After=network.target

  1. network.target : attendre que le réseau soit prêt avant de lancer le service

[Service] User=www-data # Utilisateur qui exécutera Gunicorn Group=www-data # Groupe associé WorkingDirectory=/var/www/HomePharma # Dossier du projet

  1. Chemin vers le venv + bin de Gunicorn

Environment="PATH=/var/www/HomePharma/venv/bin"

  1. Commande pour lancer Gunicorn avec 3 workers et le socket Unix

ExecStart=/var/www/HomePharma/venv/bin/gunicorn \

         --workers 3 \
         --bind unix:/var/www/HomePharma/homepharma.sock \
         wsgi:app
  1. Redémarrage automatique en cas de plantage

Restart=always RestartSec=3 # attendre 3 secondes avant de relancer

  1. Limites facultatives (éviter qu’un crash flood le serveur)

LimitNOFILE=65535

[Install] WantedBy=multi-user.target # Le service démarre automatiquement au boot


Commandes associées

Action Commande
sudo systemctl daemon-reload # Recharger les fichiers systemd après modification
sudo systemctl enable homepharma # Activer le démarrage automatique
sudo systemctl start homepharma # Démarrer le service
sudo systemctl restart homepharma # Redémarrer après mise à jour
sudo systemctl status homepharma # Vérifier l'état
journalctl -u homepharma -f # Voir les logs en temps réel

Template Générique

  1. /etc/systemd/system/PROJECT_NAME.service

[Unit] Description=Gunicorn instance to serve PROJECT_NAME Flask app After=network.target

  1. network.target : attendre que le réseau soit prêt avant de lancer le service

[Service] User=www-data # Utilisateur non-root pour exécuter Gunicorn Group=www-data # Groupe associé WorkingDirectory=/path/to/project # Dossier racine du projet

  1. Chemin vers le venv + bin de Gunicorn

Environment="PATH=/path/to/project/venv/bin"

  1. Commande pour lancer Gunicorn
  2. --workers : nombre de workers (adaptable selon ressources)
  3. --bind : socket Unix ou port TCP

ExecStart=/path/to/project/venv/bin/gunicorn \

         --workers 3 \
         --bind unix:/path/to/project/PROJECT_NAME.sock \
         wsgi:app
  1. Redémarrage automatique en cas de plantage

Restart=always RestartSec=3

  1. Limites facultatives

LimitNOFILE=65535

[Install] WantedBy=multi-user.target

Commandes génériques

Commande
sudo systemctl daemon-reload
sudo systemctl enable PROJECT_NAME
sudo systemctl start PROJECT_NAME
sudo systemctl status PROJECT_NAME
journalctl -u PROJECT_NAME -f

🖥️ Mémo Visuel : Remplir le Template systemd

/etc/systemd/system/PROJECT_NAME.service

[Unit]
Description=Gunicorn instance to serve PROJECT_NAME Flask app
           ↑
           │ Nom du projet affiché dans systemctl status
After=network.target
           ↑
           │ Ne pas toucher, attend que le réseau soit prêt

[Service]
User=www-data
       ↑
       │ Utilisateur qui exécutera Gunicorn (non-root)
Group=www-data
       ↑
       │ Groupe associé à l'utilisateur
WorkingDirectory=/path/to/project
       ↑
       │ Chemin absolu vers le dossier racine du projet

Environment="PATH=/path/to/project/venv/bin"
           ↑
           │ Chemin vers le venv du projet

ExecStart=/path/to/project/venv/bin/gunicorn \
          --workers 3 \
          --bind unix:/path/to/project/PROJECT_NAME.sock \
          wsgi:app
           ↑              ↑                     ↑
           │              │                     │
           │              │                     └─ Nom du fichier WSGI + variable Flask
           │              └─ Socket Unix (ou TCP) pour Gunicorn
           └─ Chemin complet vers gunicorn dans le venv

Restart=always
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
           ↑
           │ Permet au service de démarrer automatiquement au boot

💡 Astuces

  • Remplacer systématiquement `PROJECT_NAME` et `/path/to/project`.
  • `wsgi:app` doit pointer vers ton fichier WSGI et la variable Flask (ex: `wsgi:app` ou `main:app`).
  • Ajuster `--workers` selon la charge et la mémoire disponible.
  • Tester manuellement Gunicorn avant de lancer le service systemd :
 venv/bin/gunicorn --bind 0.0.0.0:5000 wsgi:app