« HomePharma » : différence entre les versions
Autres actions
Aucun résumé des modifications |
|||
| (4 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` | |||
**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 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 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 251 : | Ligne 271 : | ||
| journalctl -u PROJECT_NAME -f | | 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> | |||
== 💡 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
- **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 modifier
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 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
- /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 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