# đ 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.