Installation
De zéro à un nœud opérationnel en une commande
Docker Compose est la méthode recommandée : une commande démarre le plan de contrôle, l'agent intégré et PostgreSQL. L'installation par script reste disponible pour les hôtes gérés par systemd.
curl -fsSL https://raw.githubusercontent.com/shuaiZend/PingWAF/main/deploy/compose/install.sh | bash Générateur de commande
Composez votre commande d'installation
Docker Compose est présélectionné — une commande, base de données incluse. Les champs sont préremplis ; ne modifiez que le nécessaire. Le script reste disponible dans le second onglet.
Docker Compose
Déployez avec Docker Compose
Docker Compose est la méthode recommandée : une commande démarre le plan de contrôle, son agent intégré et PostgreSQL, avec données et certificats dans des volumes nommés. Une mise à jour ne change que le tag de l'image.
- Docker Engine 24+ avec le plugin Compose v2 (docker compose, pas l'ancien binaire docker-compose).
- Ports 80, 443, 9080 et 9090 libres sur l'hôte — ou remplacez-les dans les champs ci-dessous.
- Aucune base de données externe requise : le fichier compose embarque son propre conteneur PostgreSQL 16 avec des volumes nommés.
- Le tableau de bord sert HTTPS avec un certificat auto-signé au premier démarrage. Téléversez-en un vrai sous Paramètres → Control plane HTTPS, ou mettez TLS_ENABLED=false pour du HTTP simple.
curl -fsSL https://raw.githubusercontent.com/shuaiZend/PingWAF/main/deploy/compose/install.sh | bash
Lancez-la dans un répertoire vide : l'installateur télécharge docker-compose.yml, écrit un .env privé, récupère l'image et démarre la stack. Un .env existant n'est jamais écrasé — relancez la même commande pour mettre à jour.
- 1
Lancez la commande
Exécutez la commande ci-dessus dans un répertoire vide. L'installateur crée ./pingwaf, télécharge le compose et écrit un .env privé.
- 2
Attendez la stack
Compose récupère l'image, démarre PostgreSQL, attend son health check puis lance PingWAF. Le premier démarrage prend une à deux minutes.
- 3
Connectez-vous
Ouvrez https://<hôte>:9080 et utilisez ADMIN_EMAIL / ADMIN_PASSWORD (le mot de passe par défaut doit être changé à la première connexion), puis ajoutez un site.
Besoin de personnaliser ? Générez une commande avec options
Ne modifiez que le nécessaire ; la commande n'ajoute que les options différentes des valeurs par défaut. Le mot de passe administrateur n'est jamais écrit dans la commande.
curl -fsSL https://raw.githubusercontent.com/shuaiZend/PingWAF/main/deploy/compose/install.sh | bash
Première connexion : https://<votre-hôte>:9080 avec le ADMIN_EMAIL / ADMIN_PASSWORD ci-dessus (acceptez l'avertissement du certificat auto-signé jusqu'à en téléverser un vrai). Les agents joignent le plan de contrôle sur :9090.
Mise à niveau
Télécharge l'image du tag de votre .env et recrée le conteneur avec les mêmes volumes — configuration, données et certificats survivent au redémarrage. Épinglez le tag pour des mises à niveau maîtrisées.
docker compose pull && docker compose up -d
Prérempli avec les valeurs par défaut de l'installateur — seules les valeurs que vous modifiez sont ajoutées à la commande.
curl -fsSL https://raw.githubusercontent.com/shuaiZend/PingWAF/main/deploy/compose/install.sh | bash
La clé API apparaît en clair dans la commande et peut finir dans l'historique du shell. Préférez exporter PINGWAF_API_KEY, ou exécutez l'installateur en mode interactif et collez la clé lorsqu'elle est demandée.
Seules les valeurs différentes des valeurs par défaut sont ajoutées comme flags : le générateur intact produit donc la ligne la plus courte. Les arguments atteignent le script canalisé via bash -s --.
Installation interactive
Ou laissez l'installateur poser les questions
Lancez le script dans un terminal sans flags : il passe en revue le mode, les identifiants, la base de données et les noms de certificat, puis affiche le plan résolu pour confirmation.
-
Choisissez le mode de déploiement
1 all-in-one, 2 server ou 3 agent — appuyez sur Entrée pour accepter la valeur par défaut entre crochets.
-
Renseignez les paramètres
Les agents demandent l'URL du plan de contrôle et la clé d'enrôlement ; les modes server demandent le compte administrateur, l'URL PostgreSQL et les noms de certificat. Les secrets restent masqués pendant la saisie.
-
Confirmez le résumé
Avant d'écrire quoi que ce soit, l'installateur affiche le plan résolu — mode, version, plateforme, chemins, état systemd et URL de base de données masquée.
-
Terminez et vérifiez
Les modes server affichent la commande de démarrage ; les agents sont activés et démarrés automatiquement. Vérifiez le nœud sous Nodes dans le tableau de bord.
Référence des flags
Les flags de l'installateur en un coup d'œil
Tous les flags acceptés par install.sh. Chacun possède un équivalent sous forme de variable d'environnement PINGWAF_*.
--mode Mode de fonctionnement : all-in-one, server ou agent. Par défaut all-in-one.
--version Installe une version précise (le v initial est retiré). Vide ou 'latest' résout la dernière publication GitHub.
--db-url Chaîne de connexion PostgreSQL pour server/all-in-one. Par défaut postgres://pingwaf:pingwaf@localhost:5432/pingwaf.
--server-url URL gRPC du plan de contrôle pour le mode agent. Utilisez https:// — gRPC est servi en TLS par défaut.
--api-key Jeton d'enrôlement de l'agent. Peut aussi être fourni via PINGWAF_API_KEY pour ne pas figurer sur la ligne de commande.
--admin-email E-mail de l'administrateur initialisé (server/all-in-one). Par défaut admin@pingwaf.local.
--admin-password Mot de passe de l'administrateur initialisé (server/all-in-one). Vide conserve pingwaf123, que la console impose de changer à la première connexion.
--tls-sans Noms d'hôtes séparés par des virgules que le certificat généré du tableau de bord doit couvrir.
--no-systemd Ne pas créer l'unité systemd — pour les conteneurs, les mises à niveau ou vos propres superviseurs de processus.
--interactive / --non-interactive Force les questions même lorsque des flags sont fournis, ou ne pose jamais de question et utilise les valeurs fournies plus les défauts. Canalisé sans flags, le script reste non interactif.
--dry-run Affiche le plan résolu — mode, version, plateforme, chemins — puis quitte sans installer.
Dépannage
Quand l'installation ne se termine pas proprement
Les cinq échecs les plus fréquents au support, et la commande qui permet de cibler chacun.
L'installateur ne peut pas joindre PostgreSQL
Les modes all-in-one et server exigent PostgreSQL 14+ avant le premier démarrage. Le script avertit lorsque psql ne peut pas se connecter — installez le serveur, créez l'utilisateur et la base pingwaf (createuser / createdb), relancez l'installateur ou modifiez /etc/pingwaf/pingwaf.toml puis exécutez systemctl restart pingwaf.
bind() failed sur 0.0.0.0:80 ou :443
Le plan de données lie 80/443 sous l'utilisateur non privilégié pingwaf, ce qui ne fonctionne que parce que l'unité accorde CAP_NET_BIND_SERVICE. Si la liaison échoue encore, vérifiez systemctl show pingwaf -p AmbientCapabilities et ajoutez la capacité via un drop-in : sudo systemctl edit pingwaf → [Service] AmbientCapabilities=CAP_NET_BIND_SERVICE. Les unités écrites avant l'octroi de la capacité continuent d'échouer tant que le drop-in n'est pas ajouté.
Le binaire échoue avec une erreur de symbole glibc versionné
Les artefacts de publication sont compilés sur Ubuntu 24.04 et exigent glibc 2.39 ou plus récent. Sur des distributions plus anciennes (Debian 11, Ubuntu 20.04, CentOS/RHEL, Alpine, …), le test de fumée de l'installateur s'arrête avec un message clair — compilez depuis les sources à la place.
Le service systemd ne démarre pas
Inspectez le journal de l'unité avec journalctl -u pingwaf -e et vérifiez /etc/pingwaf/pingwaf.toml. Il n'y a pas de rechargement : appliquez toute modification avec systemctl restart pingwaf puis contrôlez avec systemctl status pingwaf.
Le conteneur ne démarre pas avec "bind() failed on 0.0.0.0:443" / Permission denied
L'image accorde déjà CAP_NET_BIND_SERVICE au binaire au moment de la compilation, donc l'utilisateur non privilégié pingwaf peut lier 80/443 en mode bridge avec un simple docker run ou docker compose up -d. Si cela échoue encore, le runtime a supprimé les capacités de fichier — ajoutez --cap-add=NET_BIND_SERVICE (le fichier compose fourni définit déjà cap_add) ou passez en réseau host network_mode: host (commentez alors ports: et networks: ; 9080/9090 écoutent directement sur l'hôte). Vérifiez avec docker exec pingwaf getcap /usr/local/bin/pingwaf (attendu : cap_net_bind_service=ep) et docker exec pingwaf id -u (non nul). Détails complets : https://github.com/shuaiZend/PingWAF/blob/main/docs/deployment.md#binding-ports-80443-in-containers
Installé ? Ajoutez maintenant votre premier site.
La documentation couvre le modèle de site, les topologies distribuées, la priorité de configuration et la référence complète des variables d'environnement.