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.
Version datée du 11 septembre 2025 à 16:39 par 192.168.30.15 (discussion) (Page créée avec « = 🚀 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** <pre> cd /var/www/HomePharma python3 -m venv venv source venv/bin/activate pip install -r requirements.txt </pre> # **Créer le fichier wsgi.py** (si absent) <pre> from app import app if __name__ == "__main__": app.run() </pre> # **Véri... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

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

📝 Mémo Déploiement

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

if __name__ == "__main__":
    app.run()
   
  1. **Vérifier les permissions**
sudo chown -R www-data:www-data /var/www/HomePharma
   
  1. **Recharger et démarrer le service**
sudo systemctl daemon-reload
sudo systemctl restart homepharma
sudo systemctl status homepharma
   
  1. **Tester avec Gunicorn (optionnel)**
cd /var/www/HomePharma
source venv/bin/activate
venv/bin/gunicorn --bind 0.0.0.0:5000 wsgi:app
   


🔗 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

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

sudo systemctl daemon-reload sudo systemctl enable PROJECT_NAME sudo systemctl start PROJECT_NAME sudo systemctl status PROJECT_NAME


journalctl -u PROJECT_NAME -f