---
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)
