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 » : différence entre les versions

De EC_Wiki
Aucun résumé des modifications
Ligne 190 : Ligne 190 :
|sudo systemctl daemon-reload      || # Recharger les fichiers systemd après modification
|sudo systemctl daemon-reload      || # Recharger les fichiers systemd après modification
|-
|-
|sudo systemctl enable homepharma || # Activer le démarrage automatique|
|sudo systemctl enable homepharma   || # Activer le démarrage automatique
|-
|-
|sudo systemctl start homepharma    || # Démarrer le service
|sudo systemctl start homepharma    || # Démarrer le service

Version du 11 septembre 2025 à 16:54

🚀 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

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