Files
vps-docs/hestiacp/chapitres/14-maintenance.md
Zana 2e18724685 Ajout du guide PDF HestiaCP réutilisable (HestiaCP 1.10.4)
- 14 chapitres + annexe en Markdown (chapitres/), 99 étapes
- Générateur WeasyPrint (build/build.py) : PDF générique ou
  personnalisé via --vars fichier.conf
- PDF générique + PDF personnalisé srv1.skglobalinstitute.com
- Commandes v-* vérifiées contre le code source HestiaCP 1.10.4
- 03-bis-hestiacp.md pointe vers le nouveau guide

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018J2PsVQ28oW4xEkWJpcU9G
2026-09-10 20:01:59 +02:00

116 lines
4.6 KiB
Markdown

# Maintenance et dépannage
## Faire les mises à jour mensuelles
HestiaCP et les correctifs de sécurité d'Ubuntu s'installent seuls. Une fois par mois, mettez aussi à jour le reste (PHP, Nginx, MariaDB, Docker) :
```bash
sudo apt update && sudo apt upgrade
[ -f /var/run/reboot-required ] && echo "Redémarrage nécessaire"
sudo v-list-sys-hestia-updates
```
> [!WARNING]
> Si apt demande quoi faire d'un fichier de configuration modifié, répondez **N** (garder la version actuelle). HestiaCP gère lui-même ces fichiers.
Mettez à jour les conteneurs de la même façon : `docker compose pull && docker compose up -d` dans chaque dossier `/opt/<appli>`, ou le bouton de mise à jour de Portainer.
## Mémo des commandes utiles
| Besoin | Commande |
|---|---|
| État des services | `sudo v-list-sys-services` |
| Redémarrer un service | `sudo v-restart-service nginx` (ou `apache2`, `php-fpm`, `exim4`, `dovecot`, `mariadb`, `bind9`) |
| Lister les utilisateurs / sites | `sudo v-list-users` · `sudo v-list-web-domains {{CLIENT}}` |
| Reconstruire la config des sites | `sudo v-rebuild-web-domains {{CLIENT}}` |
| Reconstruire tout un utilisateur | `sudo v-rebuild-user {{CLIENT}}` |
| Pare-feu, IP bannies | `sudo v-list-firewall` · `sudo v-list-firewall-ban` |
| Débannir une IP | `sudo v-delete-firewall-ban <IP> ALL` |
| Renouveler un certificat | `sudo v-add-letsencrypt-domain {{CLIENT}} <domaine> www.<domaine>` |
| Aide d'une commande | ouvrir le script, ex. `head -12 /usr/local/hestia/bin/v-add-web-domain` |
## Où trouver les journaux
| Journal | Emplacement |
|---|---|
| Actions HestiaCP | `/var/log/hestia/system.log`, `/var/log/hestia/error.log` |
| Connexions au panel | `/var/log/hestia/auth.log` |
| Let's Encrypt | `/var/log/hestia/LE-<utilisateur>-<domaine>.log` |
| Sites (Nginx / Apache) | `/var/log/nginx/domains/`, `/var/log/apache2/domains/` |
| Mail envoyé et reçu | `/var/log/exim4/mainlog` |
| IMAP / POP3 | `/var/log/dovecot.log` |
| Fail2ban | `/var/log/fail2ban.log` |
| SSH | `/var/log/auth.log` |
| Installation | `/root/hst_install_backups/` |
## Résoudre les problèmes fréquents
### Le certificat Let's Encrypt échoue
1. `dig +short <domaine>` doit répondre {{IP}}, et `dig +short AAAA <domaine>` ne doit **rien** répondre (chapitre 1).
2. Le port 80 doit être ouvert (`sudo v-list-firewall | grep WEB`).
3. Lisez le journal `/var/log/hestia/LE-{{CLIENT}}-<domaine>.log`.
4. Après trop d'échecs, Let's Encrypt bloque le domaine pendant une heure : attendez avant de réessayer.
### Erreur 502 ou 503 sur un site
PHP-FPM est arrêté ou saturé :
```bash
sudo v-restart-service php-fpm
sudo tail -n 50 /var/log/apache2/domains/{{SITE}}.error.log
```
### Erreur 500 sur une application Symfony
Connecté en {{CLIENT}} :
```bash
tail -n 50 ~/web/{{SITE}}/public_html/var/log/prod.log
cd ~/web/{{SITE}}/public_html && php bin/console cache:clear
```
### Les mails arrivent en spam
1. Testez sur <https://www.mail-tester.com> et suivez ses indications.
2. Vérifiez le PTR : `dig +short -x {{IP}}` doit répondre `{{FQDN}}.`.
3. Vérifiez que l'IP n'est pas sur liste noire : <https://check.spamhaus.org>.
4. Vérifiez SPF, DKIM et DMARC : `sudo v-list-dns-records {{CLIENT}} {{DOMAINE}}`.
### Vous êtes bloqué dehors (SSH refusé)
Votre IP a sans doute été bannie par Fail2ban. Connectez-vous par la **console VNC** du panel Contabo, puis :
```bash
sudo v-list-firewall-ban
sudo v-delete-firewall-ban VOTRE_IP ALL
```
### Le disque se remplit
```bash
df -h /
sudo du -sh /backup /home/* /var/lib/docker /var/log 2>/dev/null | sort -h
docker system prune
```
Réduisez si besoin le nombre de sauvegardes locales dans le forfait (`BACKUPS`), puisqu'une copie existe sur le serveur distant.
## Vérifier que tout est en place
| ✓ | Vérification |
|---|---|
| ☐ | Panel accessible en HTTPS avec certificat valide et double authentification |
| ☐ | SSH uniquement par clé, sur le port {{SSH_PORT}}, root interdit |
| ☐ | IPv6 entrante bloquée (`sudo ip6tables -S INPUT`) |
| ☐ | UFW absent, pare-feu HestiaCP et Fail2ban actifs |
| ☐ | `dig NS {{DOMAINE}}` renvoie `ns1` et `ns2.{{DOMAINE}}` |
| ☐ | PTR de {{IP}} = {{FQDN}} |
| ☐ | Sites en HTTPS forcé, sans enregistrement AAAA |
| ☐ | mail-tester.com : 10/10 ; Gmail : SPF, DKIM et DMARC en PASS |
| ☐ | Conteneurs Docker publiés uniquement sur 127.0.0.1 (`ss -tlnp`) |
| ☐ | Sauvegarde HestiaCP présente sur {{BACKUP_HOST}} |
| ☐ | Sauvegarde système (`/var/log/backup-systeme.log` sans erreur) |
| ☐ | Uptime Kuma et une surveillance externe actifs |
| ☐ | Une restauration de test réussie |