État au 2026-05-29 — document de référence pour l'infrastructure LORVA (OVH KS-16)
| Serveur / Service | Backup automatique | Fréquence | Destination | État |
|---|---|---|---|---|
| Proxmox host | Aucun | — | — | ❌ Absent |
| GitLab (données + repos) | Manuel uniquement | Ad hoc | Local | ⚠️ Insuffisant |
| MariaDB (taskori-prod) | Manuel uniquement | Ad hoc | Local | ⚠️ Insuffisant |
| Mailcow (mail + config) | Manuel uniquement | Ad hoc | Local | ⚠️ Insuffisant |
| NetBox | Manuel uniquement | Ad hoc | Local | ⚠️ Insuffisant |
| Traefik (certificats TLS) | Aucun | — | — | ❌ Absent |
| Kavita (bibliothèque) | Aucun | — | — | ❌ Absent |
| Chatwoot | Aucun | — | — | ❌ Absent |
MariaDB (taskori-prod — 10.10.20.10)
mysqldump — aucun cron en placeMailcow
docker compose down + copie des volumesGitLab
gitlab-backup create disponible mais non planifiéeNetBox
netbox-manage dumpdata ou pg_dump| Lacune | Impact |
|---|---|
| Pas de backup GitLab automatique | Perte totale du code source, pipelines CI, registry |
| Pas de backup MariaDB automatique | Perte des données Taskori (users, projets, tâches, facturation) |
| Pas de backup Mailcow automatique | Perte des mails, certificats DKIM, configuration DNS-dépendante |
| Pas de snapshots Proxmox | Impossible de restaurer une VM en état stable connu |
| Lacune | Impact |
|---|---|
| Pas de backup NetBox | Perte de la CMDB réseau, devoir recréer manuellement |
| Pas de backup Chatwoot | Perte des tickets support et historique client |
| Aucune destination off-site | Perte totale si le serveur OVH est défaillant |
| Lacune | Impact |
|---|---|
| Pas de test de restauration | Backups potentiellement corrompus/incomplets non détectés |
| Pas de dead man's switch | Impossible de savoir si un backup a échoué silencieusement |
| Pas de rétention définie | Risque de saturation disque OU de rétention insuffisante |
# Dump complet de toutes les bases
mysqldump -u root -p --all-databases --single-transaction \
--routines --triggers \
> /backup/mariadb/all-databases-$(date +%Y%m%d-%H%M).sql
# Dump d'une base spécifique
mysqldump -u root -p taskori --single-transaction \
> /backup/mariadb/taskori-$(date +%Y%m%d-%H%M).sql
# Compression
gzip /backup/mariadb/taskori-$(date +%Y%m%d-%H%M).sql
# Arrêt propre des services
cd /opt/mailcow-dockerized
docker compose down
# Sauvegarde des volumes
tar czf /backup/mailcow/mailcow-$(date +%Y%m%d-%H%M).tar.gz \
/opt/mailcow-dockerized/data/
# Redémarrage
docker compose up -d
# Alternative : backup à chaud (risque de cohérence)
rsync -av /opt/mailcow-dockerized/data/ /backup/mailcow/latest/
# Via pg_dump dans le container PostgreSQL
docker exec netbox-postgres pg_dump -U netbox netbox \
> /backup/netbox/netbox-$(date +%Y%m%d-%H%M).sql
# Ou via django management command
docker exec netbox python manage.py dumpdata \
--natural-foreign --natural-primary \
-o /backup/netbox/netbox-$(date +%Y%m%d-%H%M).json
# Backup natif GitLab (dans le container ou omnibus)
gitlab-backup create SKIP=builds,artifacts
# Le backup est créé dans /var/opt/gitlab/backups/
# Copier aussi les secrets
cp /etc/gitlab/gitlab-secrets.json /backup/gitlab/
cp /etc/gitlab/gitlab.rb /backup/gitlab/
# Compression et transfert
tar czf /backup/gitlab/gitlab-$(date +%Y%m%d).tar.gz \
/var/opt/gitlab/backups/*.tar \
/etc/gitlab/gitlab-secrets.json
| Outil | Rôle | État |
|---|---|---|
| Dockhand | Mise à jour automatique des images Docker | Actif |
| Ofelia | Planificateur de tâches cron pour containers | Actif |
| Besoin | État |
|---|---|
| Monitoring uptime (HTTP/TCP) | ❌ Absent |
| Alertes email/webhook en cas de down | ❌ Absent |
| Métriques système (CPU, RAM, disque) | ❌ Absent |
| Centralisation des logs | ❌ Absent |
| Tableaux de bord Grafana | ❌ Absent |
| Surveillance des certificats TLS | ❌ Absent |
| Alertes backup échoué | ❌ Absent |
Constat honnête : l'infrastructure tourne sans filet de surveillance. Les pannes ne sont détectées que par les utilisateurs ou lors d'une connexion manuelle.
Ofelia étant déjà présent, l'ajouter comme planificateur de backups est la voie la plus simple.
Exemple de configuration Ofelia pour MariaDB :
[job-exec "backup-mariadb"]
schedule = @daily
container = mariadb
command = /bin/bash -c "mysqldump -u root -p${MYSQL_ROOT_PASSWORD} --all-databases --single-transaction | gzip > /backup/all-$(date +%Y%m%d).sql.gz"
| Service | Rétention locale | Rétention off-site |
|---|---|---|
| MariaDB | 7 jours daily + 4 weekly | 30 jours |
| GitLab | 7 jours | 14 jours |
| Mailcow | 7 jours | 30 jours |
| NetBox | 7 jours | 14 jours |
Après chaque backup réussi, envoyer un ping HTTP vers un service de surveillance :
# Exemple avec healthchecks.io ou similar
curl -fsS --retry 3 https://hc-ping.com/VOTRE-UUID
Si le ping n'arrive pas dans les délais définis, une alerte est envoyée.
Options à considérer :
Pour : déploiement en 5 minutes, interface web simple, alertes email/Telegram/webhook, zéro dépendance externe.
# docker-compose.yml
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
volumes:
- uptime-kuma-data:/app/data
ports:
- 3001:3001
restart: unless-stopped
Couvre : HTTP/HTTPS, TCP, ping, expiration certificats TLS, mot-clé dans la page.
Pour : métriques système détaillées, dashboards avancés, centralisation des logs.
Composants :
Contre : plus lourde à configurer et maintenir, consommation RAM significative.
Mailcow inclut un exporter Prometheus natif. Il suffit de l'activer :
# Dans mailcow.conf
METRICS_ENABLED=y
METRICS_API_KEY=votre-clé-secrète
# Endpoint disponible sur :
# https://mail.lorva.dev/metrics?api_key=votre-clé-secrète
Ajouter le scrape dans prometheus.yml :
scrape_configs:
- job_name: mailcow
static_configs:
- targets: ['mail.lorva.dev']
params:
api_key: ['votre-clé-secrète']
metrics_path: /metrics
scheme: https
Aucun snapshot ni backup Proxmox automatique configuré. Les VMs tournent sans point de restauration connu.
PBS est la solution officielle Proxmox pour les backups de VMs/containers :
Déploiement possible sur une VM dédiée légère (2 vCPU, 4 GB RAM, disque de stockage séparé).
Alternative immédiate sans PBS : activer les backups Proxmox natifs vers un répertoire local :
Datacenter > Backup > Add
- Storage : local
- Schedule : daily 02:00
- Mode : Snapshot (ou Suspend si Snapshot non supporté)
- Selection : All VMs
- Retention : keep-last 3, keep-weekly 2
| Priorité | Action | Effort estimé | Impact |
|---|---|---|---|
| P1 | Activer backups Proxmox natifs (GUI) | 15 min | Restauration VM complète possible |
| P1 | Cron backup MariaDB via Ofelia | 30 min | Protection données Taskori |
| P1 | Cron backup GitLab | 30 min | Protection code source |
| P1 | Déployer Uptime Kuma | 20 min | Alertes down immédiat |
| P2 | Cron backup Mailcow | 45 min | Protection mails et config |
| P2 | Cron backup NetBox | 20 min | Protection CMDB |
| P2 | Activer exporter Prometheus Mailcow | 15 min | Métriques mail sans coût |
| P2 | Configurer destination off-site (Restic/Rclone) | 2h | Résilience perte serveur |
| P3 | Dead man's switch sur tous les crons backup | 1h | Détection silencieuse des échecs |
| P3 | Déployer PBS sur VM dédiée | 4h | Backups VMs optimisés |
| P3 | Stack Prometheus + Grafana + Loki | 1 jour | Observabilité complète |