--- title: PortChecker created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, networking, monitoring, ports, go, low-resource] confidence: medium contested: false sources: [https://selfh.st/apps/?tag=networking, https://github.com/portsails/portchecker] --- # PortChecker 🔌 > Microservice Go ultra-léger pour vérifier en continu la disponibilité de ports TCP/UDP distants et alerter en cas d'indisponibilité. | Métadonnée | Valeur | | :--- | :--- | | **Site web** | https://github.com/portsails/portchecker | | **GitHub** | https://github.com/portsails/portchecker | | **License** | MIT | | **Langage** | Go | | **Étoiles** | 9 ⭐ | | **Dernière MAJ** | 2023 | | **Catégorie** | [[cat-networking]] | ## Description **PortChecker** est un service minimaliste écrit en Go dont l'unique mission est de **pinger régulièrement des ports réseau** (TCP ou UDP) sur des hôtes distants et de notifier quand un port devient inaccessible. C'est l'équivalent ultra-simplifié d'[[app-uptime-kuma]] focalisé exclusivement sur la **couche transport** plutôt que sur des URLs HTTP. L'app se configure via un fichier YAML listant les couples `hôte:port` à surveiller, avec un intervalle de sondage et un timeout par cible. Elle expose une petite interface web (HTML/JS vanille, pas de framework lourd) qui affiche l'état de chaque cible sous forme de tableau avec historique récent. Les alertes partent par webhook (Ntfy, Gotify, Discord, Slack) ou email. Le binaire Go est **statique**, sans dépendance C, et consomme très peu de RAM (≈10 Mo) — parfait pour tourner sur un petit VPS, un routeur OpenWrt, ou un container sidecar qui supervise d'autres services du même hôte. Le projet est jeune et peu étoilé, à considérer comme expérimental mais fonctionnel. ## Installation ### Docker Compose (recommandé) ```yaml services: portchecker: image: ghcr.io/portsails/portchecker:latest container_name: portchecker restart: unless-stopped environment: - TZ=Europe/Paris - CONFIG=/data/config.yml volumes: - ./config.yml:/data/config.yml:ro - portchecker-data:/data ports: - "8088:8080" volumes: portchecker-data: ``` ### Manuelle (binaire Go) ```bash git clone https://github.com/portsails/portchecker.git cd portchecker go build -o portchecker . ./portchecker --config ./config.yml ``` ## Configuration Exemple de `config.yml` : ```yaml interval: 60s timeout: 5s targets: - name: "Web principal" host: "example.com" port: 443 protocol: tcp - name: "Base PostgreSQL" host: "db.internal" port: 5432 protocol: tcp - name: "VPN WireGuard" host: "vpn.example.com" port: 51820 protocol: udp notifications: webhook: "https://ntfy.example.com/portchecker" ``` ## Alternatives - **Open Source** : [[app-uptime-kuma]] (plus complet, HTTP/TCP/PING/DNS), [Uptime](https://github.com/ybizeul/uptime) (alternative), [checkmk](https://github.com/Checkmk/checkmk) (enterprise, lourd) - **CLI only** : `tcpping`, `ncat -z`, `netcat` dans un cron (script bash minimal) - **Propriétaire** : Pingdom TCP checks, UptimeRobot (limité à quelques ports en gratuit) - **Nmap** : pour des scans ponctuels, pas du monitoring continu ## Sécurité - **Cibles surveillées** : l'app ne fait que des **handshakes TCP/SYN** ou **probes UDP** sortants — pas d'intrusion, comportement passif. - **Exécution privilégiée** : pas besoin de root, l'app n'écoute que sur le port web configuré. - **Webhook** : utiliser HTTPS pour les destinations Ntfy/Discord (le secret peut fuiter dans les logs). - **Binaire Go** : signer ou reconstruire depuis les sources pour vérifier l'intégrité (projet jeune). ## Ressources - [selfh.st — Networking](https://selfh.st/apps/?tag=networking) - [GitHub portsails/portchecker](https://github.com/portsails/portchecker) ## Pages Liées - [[cat-networking]] - [[recettes-docker-compose]] - [[app-uptime-kuma]] — monitoring plus large (HTTP, ping, DNS)