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
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... »
 
Aucun résumé des modifications
 
(7 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 3 : Ligne 3 :


== 📝 Mémo Déploiement ==
== 📝 Mémo Déploiement ==
# **Cloner ou mettre à jour** le code dans `/var/www/HomePharma`
**Cloner ou mettre à jour** le code dans `/var/www/HomePharma`
# **Créer / activer l'environnement virtuel**
**Créer / activer l'environnement virtuel
   <pre>
   <pre>
cd /var/www/HomePharma
cd /var/www/HomePharma
Ligne 11 : Ligne 11 :
pip install -r requirements.txt
pip install -r requirements.txt
   </pre>
   </pre>
# **Créer le fichier wsgi.py** (si absent)
**Créer le fichier wsgi.py (si absent)
   <pre>
   <pre>
from app import app
from app import app
Ligne 18 : Ligne 18 :
     app.run()
     app.run()
   </pre>
   </pre>
# **Vérifier les permissions**
**Vérifier les permissions
   <pre>
   <pre>
sudo chown -R www-data:www-data /var/www/HomePharma
sudo chown -R www-data:www-data /var/www/HomePharma
   </pre>
   </pre>
# **Recharger et démarrer le service**
**Recharger et démarrer le service
   <pre>
   <pre>
sudo systemctl daemon-reload
sudo systemctl daemon-reload
Ligne 28 : Ligne 28 :
sudo systemctl status homepharma
sudo systemctl status homepharma
   </pre>
   </pre>
# **Tester avec Gunicorn (optionnel)**
**Tester avec Gunicorn (optionnel)
   <pre>
   <pre>
cd /var/www/HomePharma
cd /var/www/HomePharma
Ligne 34 : Ligne 34 :
venv/bin/gunicorn --bind 0.0.0.0:5000 wsgi:app
venv/bin/gunicorn --bind 0.0.0.0:5000 wsgi:app
   </pre>
   </pre>
**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




Ligne 89 : Ligne 110 :


== 🖥️ Commandes Fréquentes ==
== 🖥️ Commandes Fréquentes ==
{| class="wikitable" style="text-align:center;"
{| class="wikitable" style="text-align:left;"
! Action !! Commande
! Action !! Commande
|-
|-
Ligne 108 : Ligne 129 :
| 🔧 Logs Apache || <code>sudo tail -f /var/log/apache2/error.log</code>
| 🔧 Logs Apache || <code>sudo tail -f /var/log/apache2/error.log</code>
|}
|}


== 🔄 Procédure de Mise à Jour ==
== 🔄 Procédure de Mise à Jour ==
Ligne 185 : Ligne 205 :
== Commandes associées ==
== Commandes associées ==


sudo systemctl daemon-reload      # Recharger les fichiers systemd après modification
{| class="wikitable" style="text-align:left;"
sudo systemctl enable homepharma  # Activer le démarrage automatique
! Action !! Commande
sudo systemctl start homepharma    # Démarrer le service
|-
sudo systemctl restart homepharma  # Redémarrer après mise à jour
|sudo systemctl daemon-reload      || # Recharger les fichiers systemd après modification
sudo systemctl status homepharma  # Vérifier l'état
|-
journalctl -u homepharma -f        # Voir les logs en temps réel
|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 ==
== Template Générique ==
Ligne 229 : Ligne 258 :
== Commandes génériques ==
== Commandes génériques ==


sudo systemctl daemon-reload
{| class="wikitable" style="text-align:left;"
sudo systemctl enable PROJECT_NAME
! Commande
sudo systemctl start PROJECT_NAME
|-
sudo systemctl status PROJECT_NAME
|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
<pre>
[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
</pre>


journalctl -u PROJECT_NAME -f
== 💡 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 : 
  <code>venv/bin/gunicorn --bind 0.0.0.0:5000 wsgi:app</code>

Dernière version du 9 février 2026 à 11:15

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

📝 Mémo Déploiement modifier

    • 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 modifier

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


🌐 Schéma des Ports & Sockets modifier

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 modifier

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 modifier

  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 modifier

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 modifier

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 modifier

  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 modifier

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 modifier

/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 modifier

  • 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