Monitoring HTTPS, alertes Telegram, import massif des sites et sauvegarde Swiss Backup.
Objectif
Mettre en place une plateforme de monitoring centralisée permettant :
- surveillance de la disponibilité des sites,
- détection des erreurs PHP,
- détection des pages blanches,
- surveillance des certificats SSL,
- alertes Telegram,
- accès HTTPS sécurisé,
- sauvegarde automatique hors site,
- import massif de dizaines de sites,
- maintenance simple et durable.
Architecture finale
| Élément | Technologie |
|---|---|
| VPS | Infomaniak VPS Lite |
| OS | Ubuntu Server 24.04 LTS |
| Containers | Docker |
| Monitoring | Uptime Kuma |
| Reverse proxy | Nginx |
| HTTPS | Let’s Encrypt |
| Notifications | Telegram |
| Backups | Restic + Swiss Backup |
| Import massif | API Python Uptime Kuma |
URL finale : https://monitor.votredomaine.ch
Configuration VPS recommandée
| Ressource | Valeur |
|---|---|
| CPU | 1 vCPU |
| RAM | 2 Go |
| SSD | 20 Go |
| OS | Ubuntu 24.04 LTS |
Partie 1 — Création et accès au VPS
Étape 1 — Création du VPS
Dans la console Infomaniak, créer :
- un VPS Lite,
- avec Ubuntu 24.04 LTS.
Lors de la création, générer une nouvelle clé SSH.
Nom conseillé : vps-admin
Télécharger la clé privée, par exemple vers :
~/cles-ssh/vps-admin.pem
Étape 2 — Préparer la clé SSH sur Mac
chmod 600 "~/cles-ssh/vps-admin.pem"
Étape 3 — Connexion SSH
ssh -i "~/cles-ssh/vps-admin.pem" ubuntu@203.0.113.10
Au premier accès, répondre yes à la question de confiance de la clé hôte.
Étape 4 — Mise à jour du système
sudo apt update && sudo apt upgrade -y
Partie 2 — Installation de Docker et d’Uptime Kuma
Étape 5 — Installation de Docker
curl -fsSL https://get.docker.com | sh
Vérifier l’installation :
docker --version
Étape 6 — Vérification de Docker Compose
docker compose version
Si absent :
sudo apt install docker-compose-plugin -y
Étape 7 — Autoriser Docker sans sudo
sudo usermod -aG docker $USER
exit
Reconnecter ensuite la session SSH pour que le changement de groupe prenne effet.
Étape 8 — Création du dossier Uptime Kuma
mkdir -p ~/uptime-kuma
cd ~/uptime-kuma
Étape 9 — Création du fichier compose.yaml
nano compose.yaml
Contenu à coller :
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- ./data:/app/data
Sauvegarde nano : CTRL + O, ENTER, CTRL + X.
Étape 10 — Lancement d’Uptime Kuma
docker compose up -d
docker ps
Résultat attendu : uptime-kuma Up (healthy)
Partie 3 — Firewall et premier accès
Étape 11 — Ouverture des ports Infomaniak
Règles de firewall du VPS :
| Type | Port | Source | Usage |
|---|---|---|---|
| TCP | 22 | Toutes | SSH |
| TCP | 80 | Toutes | HTTP |
| TCP | 443 | Toutes | HTTPS |
| TCP | 3001 | Toutes | Uptime Kuma (temporaire) |
| ICMP | — | Toutes | Ping |
Étape 12 — Premier accès à Uptime Kuma
Dans un navigateur :
http://203.0.113.10:3001
Créer un utilisateur admin avec un mot de passe fort.
Partie 4 — Notifications Telegram
Étape 13 — Création du bot Telegram
Dans Telegram, ouvrir BotFather et envoyer :
/newbot
- Nom du bot :
Mon Monitoring - Username :
mon_monitoring_bot
BotFather fournit un Bot Token à conserver.
Étape 14 — Récupération du chat_id Telegram
Ouvrir une conversation avec le bot et envoyer un message (ex. hello).
Ouvrir ensuite dans un navigateur :
https://api.telegram.org/botTOKEN/getUpdates
Repérer dans la réponse JSON :
"chat":{"id":123456789
Le chat_id est ici 123456789.
Étape 15 — Configuration Telegram dans Kuma
Dans Uptime Kuma : Settings → Notifications → Add Notification → Telegram
Renseigner le Bot Token et le Chat ID, puis cliquer sur Test. Le message doit arriver immédiatement sur Telegram.
Partie 5 — Nom de domaine et HTTPS
Étape 16 — Création du DNS du sous-domaine
Dans la zone DNS du domaine :
| Type | Nom | Valeur |
|---|---|---|
| A | monitor | 203.0.113.10 |
Vérifier la propagation :
dig monitor.votredomaine.ch
Étape 17 — Installation de Nginx
sudo apt install nginx -y
Étape 18 — Création du reverse proxy Nginx
sudo nano /etc/nginx/sites-available/uptime-kuma
Contenu à coller :
server {
server_name monitor.votredomaine.ch;
location / {
proxy_pass http://127.0.0.1:3001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Sauvegarde nano : CTRL + O, ENTER, CTRL + X.
Étape 19 — Activation du site Nginx
sudo ln -s /etc/nginx/sites-available/uptime-kuma /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
Étape 20 — Vérification et redémarrage de Nginx
sudo nginx -t
sudo systemctl restart nginx
Étape 21 — Test HTTP
Tester dans un navigateur :
http://monitor.votredomaine.ch
Étape 22 — Installation HTTPS avec Let’s Encrypt
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d monitor.votredomaine.ch
Répondre aux invites : email de contact, acceptation des conditions, redirection HTTPS → Yes.
Résultat attendu : Congratulations!
URL finale : https://monitor.votredomaine.ch
Étape 23 — Fermeture du port 3001
Une fois le HTTPS opérationnel, supprimer la règle firewall ouvrant le port 3001 en public. Conserver uniquement :
| Port | Usage |
|---|---|
| 22 | SSH |
| 80 | HTTP |
| 443 | HTTPS |
Partie 6 — Réglages recommandés des sondes
Étape 24 — Paramètres des monitors
Pour des sites WordPress vitrines classiques :
| Paramètre | Valeur |
|---|---|
| Type | HTTP(s) – Mot-clé |
| Intervalle | 3600 s |
| Essais (retries) | 2 |
| Retry interval | 300 s |
| Timeout | 20 s |
| Notification repeat | 2 |
| Codes HTTP acceptés | 200-299 |
Pourquoi le mode « HTTP(s) – Mot-clé »
Le mode simple HTTP(s) ne détecte pas :
- les erreurs fatales PHP,
- les pages blanches,
- les erreurs de plugin,
- les erreurs de thème.
En effet, WordPress peut renvoyer un code HTTP 200 OK même en cas d’erreur applicative visible. Le mode HTTP(s) – Mot-clé est donc requis pour ce cas d’usage : il vérifie qu’un texte précis est bien présent dans la page.
Choix du mot-clé
Le mot-clé doit être :
- toujours présent sur la page,
- stable dans le temps,
- simple (pas de HTML, pas de balises, pas de texte variable).
Exemple : votredomaine.ch
Partie 7 — Maintenance et mises à jour d’Uptime Kuma
Étape 25 — Mise à jour future d’Uptime Kuma
cd ~/uptime-kuma
docker compose pull
docker compose up -d
docker image prune -f
docker ps
Résultat attendu : healthy
Emplacement des données importantes
~/uptime-kuma/data
Ce dossier contient les utilisateurs, l’historique, les monitors, les notifications et la configuration de Kuma. C’est l’élément prioritaire à sauvegarder (voir Partie 9).
Partie 8 — Import massif des sites (API Python)
Étape 26 — Installation de l’environnement Python
Ubuntu 24.04 bloque l’installation pip au niveau système : un environnement virtuel est nécessaire.
sudo apt install python3-venv -y
cd ~/uptime-kuma
python3 -m venv venv
source venv/bin/activate
Le prompt doit afficher (venv).
Étape 27 — Installation de l’API Uptime Kuma
pip install uptime-kuma-api
Étape 28 — Fichiers d’import massif
Préparer deux fichiers :
uptime-kuma-sites-inforweb.json(liste des sites à surveiller)import-uptime-kuma-sites.py(script d’import)
Étape 29 — Envoi des fichiers vers le VPS
Depuis le Mac :
scp -i "~/cles-ssh/vps-admin.pem" ~/Downloads/import-uptime-kuma-sites.py ubuntu@203.0.113.10:~/uptime-kuma/
scp -i "~/cles-ssh/vps-admin.pem" ~/Downloads/uptime-kuma-sites-inforweb.json ubuntu@203.0.113.10:~/uptime-kuma/
Étape 30 — Vérification des fichiers
cd ~/uptime-kuma
ls
Résultat attendu :
compose.yaml
data
import-uptime-kuma-sites.py
uptime-kuma-sites-inforweb.json
venv
Étape 31 — Import automatique des monitors
source venv/bin/activate
python import-uptime-kuma-sites.py uptime-kuma-sites-inforweb.json
Le script crée automatiquement les monitors et ignore les doublons.
Étape 32 — Attacher Telegram à tous les monitors
nano attach-telegram.py
Contenu :
from uptime_kuma_api import UptimeKumaApi
URL = "https://monitor.votredomaine.ch"
username = input("Utilisateur Uptime Kuma : ")
password = input("Mot de passe Uptime Kuma : ")
with UptimeKumaApi(URL) as api:
api.login(username, password)
notifications = api.get_notifications()
telegram_id = None
for n in notifications:
if "Telegram" in n["name"]:
telegram_id = n["id"]
monitors = api.get_monitors()
for monitor in monitors:
monitor_id = monitor["id"]
existing = monitor.get("notificationIDList", [])
if telegram_id not in existing:
existing.append(telegram_id)
api.edit_monitor(
id_=monitor_id,
notificationIDList=existing
)
print(f"Telegram ajouté : {monitor['name']}")
print("Terminé.")
Sauvegarde nano : CTRL + O, ENTER, CTRL + X.
Lancer le script :
python attach-telegram.py
Partie 9 — Sauvegarde automatique (Restic + Swiss Backup)
Étape 33 — Installation de Restic
sudo apt install restic -y
Étape 34 — Configuration de Swiss Backup
nano ~/.restic-env
Contenu :
export AWS_ACCESS_KEY_ID="ACCESS_KEY"
export AWS_SECRET_ACCESS_KEY="SECRET_KEY"
export AWS_DEFAULT_REGION="us-east-1"
export RESTIC_REPOSITORY="s3:https://s3.swiss-backup04.infomaniak.com/uptime-kuma-vps"
export RESTIC_PASSWORD="MOT-DE-PASSE-TRES-LONG"
Sécuriser le fichier (accès propriétaire uniquement) :
chmod 600 ~/.restic-env
source ~/.restic-env
Ce fichier contient des identifiants sensibles. Ne jamais le versionner ni le partager. Utiliser un mot de passe Restic long et unique — c’est la seule clé permettant de déchiffrer les sauvegardes.
Étape 35 — Initialisation du dépôt Restic
restic init
Résultat attendu : created restic repository
Étape 36 — Script de sauvegarde automatique
nano ~/backup-kuma.sh
Contenu :
#!/bin/bash
source /home/ubuntu/.restic-env
sudo -E restic backup \
/home/ubuntu/uptime-kuma \
/etc/nginx \
/etc/letsencrypt
sudo -E restic forget \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 6 \
--prune
Rendre le script exécutable :
chmod +x ~/backup-kuma.sh
Étape 37 — Premier backup manuel
~/backup-kuma.sh
sudo -E restic snapshots
Étape 38 — Automatisation quotidienne (cron)
crontab -e
Choisir l’éditeur (option 1 pour nano) et ajouter la ligne :
0 3 * * * /home/ubuntu/backup-kuma.sh >> /home/ubuntu/backup-kuma.log 2>&1
Sauvegarde nano : CTRL + O, ENTER, CTRL + X.
Vérifier la planification :
crontab -l
Vérification des logs de backup
cat /home/ubuntu/backup-kuma.log
tail -f /home/ubuntu/backup-kuma.log
Partie 10 — Utilisation de la fonction Maintenance
La fonction Maintenance d’Uptime Kuma permet de :
- suspendre temporairement les alertes,
- éviter les faux positifs pendant une intervention,
- planifier des fenêtres de maintenance à l’avance.
Elle est particulièrement utile lors de :
- mises à jour WordPress,
- migrations de sites,
- maintenance du serveur,
- redémarrages du VPS.
À activer systématiquement avant toute intervention planifiée sur un site surveillé.
Récapitulatif de l’architecture finale
- Accès :
https://monitor.votredomaine.ch(HTTPS uniquement, port 3001 fermé) - Monitoring : sondes HTTP(s) – Mot-clé, intervalle 1h, mot-clé stable par site
- Alertes : Telegram, attachées à tous les monitors
- Sauvegarde : Restic vers Swiss Backup, quotidienne à 3h du matin, rétention 7j/4sem/6mois
- Mise à jour :
docker compose pull && docker compose up -d, à faire manuellement et ponctuellement - Import de sites : via API Python, réutilisable pour tout ajout massif futur