[{"data":1,"prerenderedAt":185},["ShallowReactive",2],{"seo-verification":3,"blog-self-host-healthchecks-vps-fr":6},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-self-host-healthchecks-vps-fr",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":119,"ctaBody":120,"ctaButton":121,"ctaUrl":122,"relatedPosts":123},504,"self-host-healthchecks-vps",{"fr":10,"en":12,"ar":13,"es":14},"self-host-healthchecks-cron-monitoring-vps","استضافة-healthchecks-على-vps-مراقبة-مهام-cron","autoalojar-healthchecks-monitorizar-cron-vps","Healthchecks sur VPS : surveiller ses tâches cron, self-hosted","Installez Healthchecks sur un VPS : chaque tâche cron, sauvegarde ou job planifié envoie un ping, et vous êtes alerté dès qu'il manque, échoue ou dure trop.",6,0,false,"2026-10-24T00:00:00+00:00","2026-10-24T23:28:56+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-healthchecks-vps-poster.svg",{"categorySlug":34,"appSlug":35},"monitoring","healthchecks","Une tâche cron qui ne tourne plus ne fait aucun bruit. La sauvegarde nocturne échoue, la purge des journaux s'arrête, la synchronisation avec un fournisseur casse — et rien ne vous prévient, puisque rien ne s'exécute. Healthchecks est un outil open source (licence BSD-3) qui renverse le problème : chaque tâche envoie un ping à la fin de son exécution, et Healthchecks vous alerte quand ce ping n'arrive pas. Ce guide l'installe en un conteneur Docker sur un VPS, le place derrière un reverse proxy HTTPS et branche une première tâche cron.",[38,42,52,84,87,103,107,110,113,116],{"type":39,"title":40,"body":41},"h2","Pourquoi surveiller ce qui doit s'exécuter, pas seulement ce qui répond","Un moniteur d'uptime vérifie qu'un service répond. Il ne voit pas ce qui se passe entre deux requêtes : la sauvegarde de 3 h, l'envoi des factures, le renouvellement d'un certificat, l'export vers le comptable. Ces tâches échouent en silence — un disque plein, un mot de passe expiré, un serveur redémarré sans son timer — et l'on s'en aperçoit le jour où l'on en a besoin.\n\nLa variable `MAILTO` de cron n'aide guère : elle n'envoie un message que si la tâche s'exécute et écrit sur sa sortie, et elle ne dit rien quand la tâche ne démarre pas du tout. Healthchecks part de l'absence : chaque tâche a une planification attendue, et le silence au-delà du délai de grâce déclenche l'alerte.",{"type":43,"title":44,"items":45},"ul","Ce que Healthchecks apporte",[46,47,48,49,50,51],"**Surveillance par ping** — chaque tâche appelle une URL unique ; l'absence de ping déclenche l'alerte.","**Planification cron ou par période** — expression cron avec fuseau horaire, ou intervalle simple, plus un délai de grâce.","**Durée d'exécution** — les pings `\u002Fstart` et `\u002Ffail` mesurent la durée et signalent les échecs explicites.","**Codes de sortie et journaux** — le code de sortie et la fin de la sortie de la commande, consultables dans le tableau de bord.","**Plus de vingt intégrations** — e-mail, webhook, Slack, Discord, Matrix, ntfy, Telegram, Gotify, PagerDuty, Opsgenie…","**Équipe et API** — projets séparés, membres invités, badges de statut et API REST pour créer les contrôles depuis vos scripts.",{"type":53,"title":54,"headers":55,"rows":59},"comparison","Healthchecks face aux méthodes courantes",[5,56,57,58],"Healthchecks","MAILTO de cron","Moniteur d'uptime",[60,64,68,71,75,80],[61,62,63,63],"Alerte si la tâche ne démarre pas","Oui","Non",[65,66,67,63],"Alerte si la tâche échoue","Oui, code de sortie ou \u002Ffail","Seulement si elle écrit sur sa sortie",[69,70,63,63],"Durée d'exécution","Mesurée",[72,73,62,74],"Machines sans port ouvert","Oui, simple appel HTTPS sortant","Non, il faut joindre la cible",[76,77,78,79],"Canaux d'alerte","Plus de vingt intégrations","E-mail local","Selon l'outil",[81,82,63,83],"Historique centralisé","Oui, par contrôle","Oui, pour les services",{"type":39,"title":85,"body":86},"Prérequis","Un VPS Ubuntu 24.04 avec **1 Go de RAM** suffit : Healthchecks tourne en un seul conteneur et stocke ses données dans une base SQLite. Il vous faut Docker avec le plugin Compose, et un **nom de domaine** pointant vers le VPS, avec nginx et un certificat HTTPS : les URL de ping et les liens des alertes sont construits sur cette adresse, et l'application refuse les requêtes adressées à un autre nom.\n\nIdéalement, installez Healthchecks sur une machine **distincte** des serveurs qu'il surveille : s'il tombe avec eux, personne ne vous préviendra.",{"type":88,"title":89,"steps":90},"steps","Installer Healthchecks avec Docker Compose",[91,94,97,100],{"title":92,"body":93},"Préparer le fichier .env","Créez le répertoire de l'application et un fichier `.env` qui portera la clé secrète et l'adresse publique. Remplacez `hc.example.com` par votre domaine.\n```bash\nmkdir -p \u002Fopt\u002Fhealthchecks && cd \u002Fopt\u002Fhealthchecks\ncat > .env \u003C\u003CEOF\nSECRET_KEY=$(openssl rand -hex 24)\nSITE_ROOT=https:\u002F\u002Fhc.example.com\nEOF\n```",{"title":95,"body":96},"Créer le fichier Compose","Placez ce `docker-compose.yml` dans le même répertoire. Le port n'est publié que sur la boucle locale, les inscriptions publiques sont fermées et la base SQLite vit dans un volume.\n```yaml\nservices:\n  healthchecks:\n    image: healthchecks\u002Fhealthchecks:v5.0.1\n    restart: unless-stopped\n    ports:\n      - \"127.0.0.1:8102:8000\"\n    env_file: .env\n    environment:\n      DEBUG: \"False\"\n      DB_NAME: \u002Fdata\u002Fhc.sqlite\n      REGISTRATION_OPEN: \"False\"\n      GUNICORN_WORKERS: \"2\"\n    volumes:\n      - healthchecks-data:\u002Fdata\nvolumes:\n  healthchecks-data: {}\n```",{"title":98,"body":99},"Démarrer et créer le compte administrateur","Au démarrage, le conteneur applique les migrations puis lance le serveur web et les processus d'envoi d'alertes. Créez ensuite votre compte : la commande demande une adresse e-mail et un mot de passe.\n```bash\ndocker compose up -d\ndocker compose exec healthchecks .\u002Fmanage.py createsuperuser\n```",{"title":101,"body":102},"Publier en HTTPS derrière nginx","Ajoutez un bloc `server` pour votre domaine, avec un certificat Let's Encrypt, et transmettez les en-têtes d'origine : sans `X-Forwarded-Proto`, la connexion échoue sur une erreur CSRF.\n```nginx\nlocation \u002F {\n    proxy_pass http:\u002F\u002F127.0.0.1:8102;\n    proxy_set_header Host $host;\n    proxy_set_header X-Forwarded-Proto $scheme;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n}\n```",{"type":104,"title":105,"body":106},"tip","Gardez les inscriptions fermées","Par défaut, Healthchecks accepte les inscriptions publiques. `REGISTRATION_OPEN: \"False\"` les ferme : seuls les comptes que vous créez ou que vous invitez dans un projet peuvent se connecter. Sur un serveur exposé à Internet, c'est le réglage à poser dès le premier démarrage.",{"type":39,"title":108,"body":109},"Brancher vos tâches cron","Dans le tableau de bord, créez un contrôle, indiquez la planification — l'expression cron de la tâche et son fuseau horaire — puis un délai de grâce qui couvre sa durée normale. Copiez l'URL de ping et ajoutez-la à la tâche.\n```bash\n# crontab : sauvegarde à 3 h, ping seulement en cas de succès\n0 3 * * * \u002Fusr\u002Flocal\u002Fbin\u002Fbackup.sh && curl -fsS -m 10 --retry 5 -o \u002Fdev\u002Fnull https:\u002F\u002Fhc.example.com\u002Fping\u002F\u003Cuuid>\n\n# variante : signaler le début, puis transmettre le code de sortie\nURL=https:\u002F\u002Fhc.example.com\u002Fping\u002F\u003Cuuid>\ncurl -fsS -m 10 --retry 5 -o \u002Fdev\u002Fnull \"$URL\u002Fstart\"\n\u002Fusr\u002Flocal\u002Fbin\u002Fbackup.sh > \u002Ftmp\u002Fbackup.log 2>&1\ncurl -fsS -m 10 --retry 5 -o \u002Fdev\u002Fnull --data-binary @\u002Ftmp\u002Fbackup.log \"$URL\u002F$?\"\n```\n\nLa première forme ne pinge qu'en cas de succès : un échec se traduit par un ping manquant, donc une alerte au bout du délai de grâce. La seconde est plus parlante : `\u002Fstart` mesure la durée, le code de sortie transmis à la place du ping signale l'échec immédiatement, et la sortie envoyée dans le corps de la requête s'affiche dans l'historique du contrôle. Les options `-m 10 --retry 5` évitent qu'un réseau capricieux bloque la tâche ou fasse croire à une panne.",{"type":39,"title":111,"body":112},"Recevoir les alertes","Dans **Intégrations**, ajoutez au moins un canal que vous lisez vraiment, puis associez-le à vos contrôles. Webhook, Slack (webhook entrant), Mattermost, ntfy et Gotify fonctionnent sans configuration côté serveur. D'autres intégrations demandent des identifiants déclarés dans le `.env` : un jeton de bot pour Telegram, un compte et un jeton pour Matrix, une application OAuth pour Discord.\n\nLes alertes par **e-mail** passent par un serveur SMTP : ajoutez `EMAIL_HOST`, `EMAIL_PORT`, `EMAIL_HOST_USER`, `EMAIL_HOST_PASSWORD` et `DEFAULT_FROM_EMAIL` au fichier `.env`, puis relancez avec `docker compose up -d`. Les mêmes réglages servent aux invitations d'équipe et aux rapports périodiques.",{"type":39,"title":114,"body":115},"Dépannage","**La page renvoie une erreur 400.** La requête n'arrive pas avec le bon nom d'hôte : vérifiez que `SITE_ROOT` correspond exactement au domaine servi par nginx, et que le bloc `location` transmet l'en-tête `Host`.\n\n**La connexion échoue avec une erreur CSRF.** nginx ne transmet pas `X-Forwarded-Proto` : l'application croit recevoir du HTTP alors que le navigateur parle HTTPS. Ajoutez l'en-tête et rechargez nginx.\n\n**Un contrôle passe en alerte alors que la tâche a tourné.** Le ping n'est pas parti : testez la commande `curl` à la main depuis la machine concernée, vérifiez l'accès sortant en HTTPS, et allongez le délai de grâce si la tâche dure plus longtemps que prévu.\n\n**Aucun e-mail n'arrive.** Sans `EMAIL_HOST`, Healthchecks n'envoie rien et l'indique dans ses journaux au démarrage : consultez `docker compose logs healthchecks`.",{"type":39,"title":117,"body":118},"Installation en un clic depuis le Marketplace ServOrbit","Le Marketplace ServOrbit installe Healthchecks sur votre VPS sans ligne de commande : il déploie le conteneur avec les inscriptions fermées, crée le compte administrateur avec un mot de passe généré, et publie l'application en HTTPS sur un sous-domaine de votre domaine ou sur le sous-domaine gratuit du VPS. L'identifiant et le mot de passe s'affichent dans votre espace client ; il ne reste qu'à créer vos contrôles.","Vos tâches planifiées sous surveillance, sur votre VPS","Un VPS ServOrbit Ubuntu 24.04 avec 1 Go de RAM suffit pour Healthchecks. Installation en un clic depuis le Marketplace, HTTPS sur votre domaine ou sur le sous-domaine gratuit du VPS, compte administrateur créé pour vous.","Installer Healthchecks","\u002Fmarketplace\u002Fmonitoring\u002Fhealthchecks",[124,145,168],{"id":125,"slug":126,"slugs":127,"title":131,"excerpt":132,"readTime":133,"views":134,"isPinned":19,"publishedAt":135,"updatedAt":136,"category":137,"categories":142,"featuredImage":30,"bgImage":31,"posterImage":144,"relatedSolution":30},230,"cron-systemd-timers-automatisation-vps",{"fr":126,"en":128,"ar":129,"es":130},"cron-vs-systemd-timers-automate-your-linux-vps","cron-مقابل-systemd-timers-أتمتة-vps-linux","cron-vs-systemd-timers-automatizar-vps-linux","cron vs systemd timers : automatiser son VPS Linux","Comparatif pratique cron et systemd timers : syntaxe, logs, migration et dépannage pour vos tâches récurrentes sur VPS Linux.",12,1,"2026-08-06T00:00:00+00:00","2026-09-20T21:13:53+00:00",{"id":138,"name":139,"slug":140,"color":141,"icon":140},2,"Automatisation","automatisation","bg-brand-action\u002F10 text-brand-action",[143],{"id":138,"name":139,"slug":140,"color":141,"icon":140},"\u002Fblog\u002Fcovers\u002Fcron-systemd-timers-automatisation-vps-poster.svg",{"id":146,"slug":147,"slugs":148,"title":152,"excerpt":153,"readTime":154,"views":138,"isPinned":19,"publishedAt":155,"updatedAt":156,"category":157,"categories":163,"featuredImage":30,"bgImage":31,"posterImage":165,"relatedSolution":166},194,"self-host-ntfy-vps",{"fr":147,"en":149,"ar":150,"es":151},"self-host-ntfy-on-a-vps-push-notifications-for-scripts-and-cicd","استضافة-ntfy-على-vps-إشعارات-فورية-من-سكريبتاتك-وcicd","autoalojar-ntfy-en-un-vps","Héberger ntfy sur un VPS : notifications push pour vos scripts","Déployez ntfy sur votre VPS et envoyez des notifications push depuis n'importe quel script, cron ou pipeline CI\u002FCD avec un simple curl — sans SaaS ni clé d'API.",11,"2026-07-28T00:00:00+00:00","2026-10-13T14:10:29+00:00",{"id":158,"name":159,"slug":160,"color":161,"icon":162},8,"Sécurité & Monitoring","securite-monitoring","bg-rose-500\u002F10 text-rose-400","security",[164],{"id":158,"name":159,"slug":160,"color":161,"icon":162},"\u002Fblog\u002Fcovers\u002Fself-host-ntfy-vps-poster.svg",{"categorySlug":34,"appSlug":167},"ntfy",{"id":169,"slug":170,"slugs":171,"title":175,"excerpt":176,"readTime":158,"views":18,"isPinned":19,"publishedAt":177,"updatedAt":178,"category":179,"categories":180,"featuredImage":30,"bgImage":31,"posterImage":182,"relatedSolution":183},105,"superviser-vps-uptime-kuma",{"fr":170,"en":172,"ar":173,"es":174},"monitoring-your-vps-with-uptime-kuma","مراقبة-خادمك-الافتراضي-vps-باستخدام-uptime-kuma","supervisar-vps-con-uptime-kuma","Superviser votre VPS avec Uptime Kuma","Déployez Uptime Kuma sur votre VPS pour surveiller vos sites et services en self-hosted, avec alertes et page de statut publique.","2026-03-07T00:00:00+00:00","2026-10-23T23:43:01+00:00",{"id":158,"name":159,"slug":160,"color":161,"icon":162},[181],{"id":158,"name":159,"slug":160,"color":161,"icon":162},"\u002Fblog\u002Fcovers\u002Fsuperviser-vps-uptime-kuma-poster.svg",{"categorySlug":34,"appSlug":184},"uptime-kuma",1792884942172]