« HomePharma » : différence entre les versions
Autres actions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| Ligne 3 : | Ligne 3 : | ||
== 📝 Mémo Déploiement == | == 📝 Mémo Déploiement == | ||
**Cloner ou mettre à jour** le code dans `/var/www/HomePharma` | |||
**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) | |||
<pre> | <pre> | ||
from app import app | from app import app | ||
| Ligne 18 : | Ligne 18 : | ||
app.run() | app.run() | ||
</pre> | </pre> | ||
**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** | |||
<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)** | |||
<pre> | <pre> | ||
cd /var/www/HomePharma | cd /var/www/HomePharma | ||
| Ligne 35 : | Ligne 35 : | ||
</pre> | </pre> | ||
**Créer un fichier de configuration Apache | |||
sudo nano /etc/apache2/sites-available/homepharma.conf | sudo nano /etc/apache2/sites-available/homepharma.conf | ||
| Ligne 50 : | Ligne 50 : | ||
</VirtualHost> | </VirtualHost> | ||
Créer le lien symbolique vers sites-enabled | **Créer le lien symbolique vers sites-enabled | ||
ln -s /etc/apache2/sites-available/homepharma.conf /etc/apache2/sites-enabled/homepharma.conf | ln -s /etc/apache2/sites-available/homepharma.conf /etc/apache2/sites-enabled/homepharma.conf | ||
Version du 9 février 2026 à 11:14
🚀 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
- **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 | # 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
- /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 |
🖥️ 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