# 🏃 DĂ©marrage rapide Cette page mĂšne d'un hĂŽte installĂ© Ă  un serveur que vous contrĂŽlez : une configuration sur disque, une compilation validĂ©e, un serveur que vous dĂ©marrez, arrĂȘtez et surveillez, et une vĂ©rification qui prouve que le serveur de fichiers a rĂ©pondu. Elle suppose l'[installation](/fr/start/install/) dĂ©jĂ  faite. ## đŸ§Ÿ Avant de commencer L'installateur a laissĂ© un service en Ă©coute sur le port 80, et ce service garde la configuration de `/etc/Pingclair/Pingclairfile`. ArrĂȘtez-le le temps de vos essais, pour libĂ©rer les ports : ```bash sudo pc service stop ``` ```bash mkdir -p ~/demo/public cd ~/demo echo '

hello from ~/demo/public

' > public/index.html ``` ## 1. ✍ Écrire une configuration CrĂ©ez `~/demo/Pingclairfile` : ```caddyfile { admin 127.0.0.1:2019 } http://localhost:8080 { file_server ./public } ``` Trois choses mĂ©ritent d'ĂȘtre nommĂ©es. Le bloc sans nom en tĂȘte contient les options globales, et `admin` est ce qui permet Ă  `pingclair start`, `stop` et `reload` de parler au serveur en cours d'exĂ©cution. L'adresse du site porte le schĂ©ma, et `http://` force le texte en clair ; sans lui, Pingclair traite `localhost` comme un nom et sert HTTPS depuis sa propre autoritĂ© de certification, ce qu'un client HTTP simple voit comme une rĂ©ponse vide ([HTTPS](/fr/start/https/)). La racine de `file_server` est relative au rĂ©pertoire courant. ## 2. ✅ Valider avant d'exĂ©cuter ```bash pingclair validate ``` ```text ✅ Configuration 'Pingclairfile' is valid! ``` `validate` lit `./Pingclairfile` par dĂ©faut et dĂ©tecte aussi `./Caddyfile`. Il compile la configuration et applique des contrĂŽles sĂ©mantiques, comme l'existence des chemins de certificats. La validation n'est pas consultative : une configuration en Ă©chec ne s'exĂ©cute pas, et la derniĂšre ligne en donne la raison. ## 3. 🧭 Voir ce que la configuration devient ```bash pingclair adapt --pretty ``` ```text { "debug": false, "servers": [ { "name": "localhost", "names": [ "localhost" ], "listen": [ "[::]:8080" ], ``` Le JSON compilĂ© est la forme que le serveur exĂ©cute rĂ©ellement. Quand une directive ne se comporte pas comme la documentation l'annonce, c'est le premier endroit oĂč regarder. Pour voir plutĂŽt ce que `pingclair fmt` changerait dans le fichier : ```bash pingclair fmt --diff ``` ```text - file_server ./public + file_server ./public ``` `fmt` imprime la forme canonique, qui indente de deux espaces. ## 4. 🚀 L'exĂ©cuter Au premier plan, oĂč le journal reste attachĂ© Ă  votre terminal : ```bash pingclair run Pingclairfile ``` ```text 🚀 Starting Pingclair with config: Pingclairfile 🚀 Starting Pingclair v0.2.0-rc.3 📄 Loaded configuration from: Pingclairfile 🔧 Configured 1 server(s) 🔐 Auto HTTPS: enabled ``` Ajoutez `--watch` pour recharger la configuration Ă  chaque enregistrement, ce qui donne la boucle de dĂ©veloppement : ```bash pingclair run --watch Pingclairfile ``` ```text ♻ Configuration reloaded successfully ✅ Configuration reloaded completed successfully in 2.478622ms ``` Ou exĂ©cutez-le en arriĂšre-plan, oĂč il survit Ă  votre shell : ```bash pingclair start -c Pingclairfile ``` ```text ✅ Pingclair started in the background (pid 4432) ``` `pingclair start`, `stop` et `reload` joignent le serveur en cours d'exĂ©cution par l'Admin API, ce qui explique l'option `admin` ci-dessus. `pingclair run` n'en a pas besoin. ## 5. 🔍 VĂ©rifier ```bash curl -i http://localhost:8080/ ``` ```text HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 Content-Length: 34 Last-Modified: Tue, 22 Sep 2026 03:26:39 GMT ETag: "22-6ab1f56f" Vary: Accept-Encoding Accept-Ranges: bytes server: Pingclair ``` `ETag` et `Last-Modified` signifient que le serveur de fichiers a lu le fichier sur le disque. Le corps est `public/index.html`. Pour arrĂȘter un serveur en arriĂšre-plan : ```bash pingclair stop ``` ```text ✅ Pingclair stopped ``` ## ⚡ Des serveurs en une commande Trois sous-commandes servent sans fichier de configuration, ce qui est pratique pour un essai ou un hĂŽte jetable : ```bash pingclair file-server --listen :8081 --root ./public pingclair reverse-proxy --from :8082 --to 127.0.0.1:8081 pingclair respond --listen :8083 -s 200 -b "hello from respond" ``` Chacune annonce son Ă©couteur au dĂ©marrage : ```text 🚀 Starting file server on :8081 serving ./public (browse: false) 🚀 Starting reverse proxy: :8082 -> ["127.0.0.1:8081"] Server address: [::]:8083 ``` Chaque requĂȘte vers `:8082` est transmise au serveur de fichiers sur `:8081`, et `:8083` rĂ©pond avec le corps que vous avez fourni. `respond` est rĂ©servĂ© au dĂ©veloppement. ## 🔁 Le confier au service Le service exĂ©cute `/etc/Pingclair/Pingclairfile` : c'est donc y placer votre configuration qui la fait survivre Ă  un redĂ©marrage : ```bash sudo cp Pingclairfile /etc/Pingclair/Pingclairfile sudo pingclair validate /etc/Pingclair/Pingclairfile sudo pc service reload curl -i http://localhost/ ``` `pc service reload` demande au serveur en cours de relire le fichier, ce que l'unitĂ© fait en envoyant `SIGUSR1`. `pingclair reload` atteint le mĂȘme code par l'Admin API et rapporte en plus ce que le serveur a pensĂ© du fichier, ce qui exige l'option `admin` du bloc des options globales ; et `sudo kill -USR1 "$(systemctl show -p MainPID --value pingclair)"` y arrive sans l'un ni l'autre. Validez d'abord dans tous les cas, puis lisez la rĂ©ponse : `systemctl reload` signale seulement que le signal a Ă©tĂ© dĂ©livrĂ©, donc le verdict du serveur — appliquĂ©, ou refusĂ© avec une raison — se trouve sur la ligne d'Ă©tat de l'unitĂ© et dans le journal. Un rechargement refusĂ© laisse la configuration prĂ©cĂ©dente en service, ce qui est prĂ©cisĂ©ment le but du refus. [ExĂ©cution comme service](/fr/start/service/#-ce-que-signifie-un-rechargement) est la version longue. ## ⚠ Quand cela ne marche pas - **`Address already in use`.** Le service de l'installateur occupe encore `:80`, ou un autre processus occupe votre port. `sudo ss -ltnp | grep :80` nomme le propriĂ©taire, et `sudo pc service stop` libĂšre celui par dĂ©faut. - **`Empty reply from server` sur `http://localhost:8080`.** Vous parlez en clair Ă  un Ă©couteur TLS. Ajoutez le schĂ©ma `http://` Ă  l'adresse du site, ou adressez-vous Ă  lui en `https://` en faisant confiance au certificat interne. - **`Cannot reach admin API at 127.0.0.1:2019`.** La configuration n'a pas d'option `admin` : rien n'Ă©coute pour `pingclair stop` et `pingclair reload`. Ajoutez-la au bloc des options globales, ou arrĂȘtez le processus au premier plan avec Ctrl-C. - **`curl` se bloque sur une adresse de boucle locale.** Un proxy systĂšme intercepte la requĂȘte. Rejouez-la avec `curl --noproxy '*'`. - **La validation Ă©choue avec `Unsupported feature`.** La directive est reconnue mais non implĂ©mentĂ©e, et le message nomme l'alternative, comme pour `encode br` : Brotli n'est pas implĂ©mentĂ© pour les rĂ©ponses proxifiĂ©es, le message renvoie donc vers `encode zstd gzip`. ## 🧭 Étapes suivantes - [HTTPS](/fr/start/https/) : des certificats pour un nom public, depuis Let's Encrypt ou depuis l'autoritĂ© interne. - [ExĂ©cution comme service](/fr/start/service/) : l'unitĂ©, sa sĂ©mantique de rechargement et ses journaux. - [Pingclairfile](/fr/reference/pingclairfile/) : le langage lui-mĂȘme, avec les matchers, les fragments et les imports.