« HomePharma » : différence entre les versions
Autres actions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| Ligne 89 : | Ligne 89 : | ||
== 🖥️ Commandes Fréquentes == | == 🖥️ Commandes Fréquentes == | ||
{| class="wikitable" style="text-align: | {| class="wikitable" style="text-align:left;" | ||
! Action !! Commande | ! Action !! Commande | ||
|- | |- | ||
| Ligne 185 : | Ligne 185 : | ||
== Commandes associées == | == Commandes associées == | ||
{| class="wikitable" style="text-align: | {| class="wikitable" style="text-align:left;" | ||
! Action !! Commande | ! Action !! Commande | ||
|- | |- | ||
| Ligne 191 : | Ligne 191 : | ||
|- | |- | ||
|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 | ||
| | |- | ||
|sudo systemctl restart homepharma || # Redémarrer après mise à jour | |sudo systemctl restart homepharma || # Redémarrer après mise à jour | ||
| | |- | ||
|sudo systemctl status homepharma || # Vérifier l'état | |sudo systemctl status homepharma || # Vérifier l'état | ||
| | |- | ||
|journalctl -u homepharma -f || # Voir les logs en temps réel | |journalctl -u homepharma -f || # Voir les logs en temps réel | ||
|- | |- | ||
| Ligne 238 : | Ligne 238 : | ||
== Commandes génériques == | == Commandes génériques == | ||
{| class="wikitable" style="text-align: | {| class="wikitable" style="text-align:left;" | ||
! Commande | ! Commande | ||
|- | |- | ||
Version du 11 septembre 2025 à 16:53
🚀 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
🔗 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
- **Aller dans le dossier du projet**
cd /var/www/HomePharma
- **Activer l'environnement virtuel**
source venv/bin/activate
- **Mettre à jour le code (exemple avec Git)**
git pull origin main
- **Mettre à jour les dépendances si besoin**
pip install -r requirements.txt
- **Vérifier les permissions**
sudo chown -R www-data:www-data /var/www/HomePharma
- **Redémarrer le service pour appliquer les changements**
sudo systemctl restart homepharma
- **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
- /etc/systemd/system/homepharma.service
[Unit] Description=Gunicorn instance to serve HomePharma Flask app After=network.target
- 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
- Chemin vers le venv + bin de Gunicorn
Environment="PATH=/var/www/HomePharma/venv/bin"
- 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
- Redémarrage automatique en cas de plantage
Restart=always RestartSec=3 # attendre 3 secondes avant de relancer
- 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 | |
| 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
- /etc/systemd/system/PROJECT_NAME.service
[Unit] Description=Gunicorn instance to serve PROJECT_NAME Flask app After=network.target
- 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
- Chemin vers le venv + bin de Gunicorn
Environment="PATH=/path/to/project/venv/bin"
- Commande pour lancer Gunicorn
- --workers : nombre de workers (adaptable selon ressources)
- --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
- Redémarrage automatique en cas de plantage
Restart=always RestartSec=3
- 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 |