By Walid ETTAYEB

Caddy est un serveur web extrêmement facile à configurer et à utiliser. Il prend en charge HTTP/2, la configuration automatique de SSL avec Let's Encrypt et une syntaxe de configuration intuitive. Il est multiplateforme et peut fonctionner sur tous les principaux systèmes d'exploitation, tels que Linux, macOS et Windows.

Dans cet article, nous allons installer Caddy sur un système Linux et le configurer pour servir un site Web. Ces instructions devraient fonctionner sur la plupart des distributions.

Prérequis:

Avant de suivre cet article pour installer Caddy, il y a quelques paquets que vous devez installer - nss-tools, setcap, wget et tar.

Sur Debian/Ubuntu, utilisez la commande suivante pour installer ces paquets :

sudo apt update
sudo apt install libcap2-bin libnss3-tools wget tar

Sous CentOS, utilisez la commande suivante pour installer ces paquets :

sudo dnf install libcap nss-tools wget tar

Installation du binaire Caddy

Rendez-vous sur la page des releases Caddy, qui propose des binaires pour une variété d'architectures de processeurs. Pour déterminer l'architecture du processeur de votre système, exécutez la commande suivante :

uname -m

Le plupart du temps, les serveurs et les systèmes de bureau fonctionnent avec des processeurs Intel 64 bits. La sortie de la commande ci-dessus sur de tels systèmes serait x86_64, qui est également connu sous le nom de "amd64". Vous devez donc télécharger le fichier .tar.gz pour Linux amd64 :

wget https://github.com/caddyserver/caddy/releases/download/v2.4.6/caddy_2.4.6_linux_amd64.tar.gz

Une fois que vous avez téléchargé le fichier, décompressez le binaire caddy dans le répertoire /usr/local/bin en exécutant :

sudo tar -C /usr/local/bin/ -xf caddy_2.4.6_linux_amd64.tar.gz caddy

Pour confirmer que le binaire a été installé, exécutez la commande suivante :

caddy

Vous devriez voir sur votre terminal la page d'aide de Caddy, comme le montre la capture d'écran ci-dessous. Si vous voyez ce texte, cela indique que le binaire a été installé avec succès.

Configuration des comptes d'utilisateurs et des répertoires

Les serveurs Web tels que Caddy sont généralement exposés sur l'Internet. C'est une bonne pratique que de lancer tout logiciel qui est exposé sur Internet en tant qu'utilisateur restreint.

Par conséquent, nous allons configurer un utilisateur restreint nommé caddy avec le répertoire personnel de /etc/caddy en exécutant la commande suivante :

sudo useradd --shell /bin/false --home-dir /etc/caddy --system caddy

Dans le dossier d'accueil, Caddy stocke la configuration dans le répertoire .config, et les certificats dans le répertoire .local. Donc, exécutez la commande suivante pour créer ces deux répertoires :

sudo mkdir -p /etc/caddy/.config /etc/caddy/.local

Nous aurons également besoin d'un répertoire dans lequel nous pourrons dire à Caddy de stocker les logs. Dans ce sens, nous allons créer un répertoire /var/log/caddy avec la commande suivante :

sudo mkdir -p /var/log/caddy

Ensuite, changez la propriété de ces répertoires au profit de l'utilisateur caddy :

sudo chown -R caddy: /etc/caddy /var/log/caddy

En général, lorsque vous exécutez un logiciel en tant qu'utilisateur non root, Linux interdit à ces processus d'écouter des numéros de port inférieurs à 1024. Pour contourner cette restriction et exécuter Caddy en toute sécurité en tant qu'utilisateur non root, ajoutez la capacité cap_net_bind_service au binaire caddy :

sudo setcap cap_net_bind_service+ep /usr/local/bin/caddy

Démarrage automatique de Caddy

Maintenant que nous avons créé l'utilisateur et les répertoires, nous allons configurer Caddy comme un service du système. En effectuant cette étape, le serveur web Caddy démarrera automatiquement lorsque vous démarrez (ou redémarrez) votre système.

Vous pourrez ainsi démarrer, arrêter, ou forcer Caddy à recharger sa configuration en utilisant la commande systemctl. Nous allons également définir le répertoire de base de Caddy par le biais de ce fichier, qui définira le répertoire par défaut dans lequel Caddy cherchera les fichiers à diffuser.

Utilisez un éditeur de texte pour créer le fichier /etc/systemd/system/caddy.service. La plupart des distributions ont l'éditeur vi installé, vous pouvez donc utiliser :

sudo vi /etc/systemd/system/caddy.service

Dans l'éditeur vi, appuyez sur i pour passer en mode édition et collez le texte suivant :

[Unit]
Description=Caddy web server
After=network-online.target

[Service]
User=caddy
Group=caddy
Type=exec
WorkingDirectory=/var/caddy/html

ExecStart=/usr/local/bin/caddy run -config /etc/caddy/Caddyfile
ExecReload=/usr/local/bin/caddy reload -config /etc/caddy/Caddyfile
ExecStop=/usr/local/bin/caddy stop

LimitNOFILE=1048576
LimitNPROC=512

PrivateTmp=true
PrivateDevices=true
ProtectHome=true
ProtectSystem=strict
ReadWritePaths=/etc/caddy/.local /etc/caddy/.config /var/log

CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

Quittez le mode d'édition en appuyant sur "Esc", puis tapez :wq pour enregistrer le fichier.

Configuration de Caddy pour fournir un site web

La dernière étape de la configuration de Caddy est la création d'un Caddyfile, qui indique à Caddy ce qu'il doit faire lorsqu'une requête HTTP arrive. Pour créer le Caddyfile, utilisez la commande suivante :

sudo vi /etc/caddy/Caddyfile

Maintenant, entrez dans le mode d'édition en appuyant sur "i", puis entrez le contenu suivant :

http:// {
    encode gzip
    file_server
}

Ceci demandera à Caddy de mettre à disposition les fichiers présents dans son répertoire de travail actuel, et de compresser les corps des réponses HTTP avec l'algorithme gzip.

Maintenant, quel est le répertoire de travail de Caddy ?

Comme nous l'avons mentionné précédemment, nous avons défini le répertoire de travail lorsque nous avons créé le fichier de service, comme vous pouvez le voir dans la ligne WorkingDirectory=/var/caddy/html.

Ensuite, nous allons créer le répertoire /var/caddy/html et y placer un fichier index.html. Exécutez les commandes suivantes pour y parvenir :

sudo mkdir -p /var/caddy/html
sudo bash -c 'echo "<h1>Hello from Caddy web server</h1>" > /var/caddy/html/index.html'

Après avoir fait ces modifications, exécutez la commande suivante pour démarrer Caddy :

sudo systemctl start caddy

Maintenant, visitez l'URL http://X.X.X.X, en remplaçant X.X.X.X par l'adresse ip du serveur. Vous devriez voir une page comme celle-ci :

Enfin, nous souhaitons également configurer Caddy pour qu'il démarre automatiquement lorsque votre système est redémarré. Utilisez cette commande pour configurer le redémarrages automatiques du service Caddy :

systemctl enable caddy 

Configurer un site web avec HTTPS

Maintenant que vous avez un site opérationnel, vous pouvez configurer Caddy pour qu'il ajoute automatiquement HTTPS à votre site.

Pour suivre les étapes de cette section, vous devez avoir votre propre nom de domaine. Tout d'abord, allez dans les paramètres DNS du fournisseur DNS de votre domaine. Créez un sous-domaine ou modifiez l'entrée DNS du domaine afin qu'elle pointe vers l'adresse IP publique du serveur.

Après avoir effectué les modifications dans le DNS, modifiez le fichier /etc/caddy/Caddyfile afin que la configuration ressemble à ceci :

{
    email <YOUR EMAIL ADDRESS HERE>
}

<YOUR DOMAIN NAME HERE> {
    encode gzip
    file_server
}

Assurez-vous de remplacer les champs  et  par votre email et votre nom de domaine respectivement. Il n'est pas nécessaire de spécifier le protocole "https://" lorsque vous indiquez le nom de domaine. Lorsque vous ne précisez pas de nom de domaine, Caddy obtient automatiquement des certificats. Ensuite, il applique le protocole HTTPS à votre site Web et met en place une redirection de HTTP vers HTTPS.

Après avoir effectué les modifications ci-dessus, rechargez la configuration de Caddy en exécutant la commande suivante :

sudo systemctl reload caddy

Maintenant, à l'aide d'un navigateur, allez sur votre site web en utilisant votre nom de domaine. Le site apparaîtra comme protégé par HTTPS, comme indiqué ci-dessous :

Hébergement de plusieurs sites web

Généralement, vous souhaitez répondre aux requêtes de plusieurs domaines à partir d'un même serveur. Ce concept est parfois appelé "Virtual hosting". Vous pouvez ajouter des blocs supplémentaires à votre fichier Caddyfile pour réaliser de l'hébergement virtuel.

Par exemple, vous avez trois domaines, exemple1.com, exemple2.com et exemple3.com, où chaque domaine doit servir un contenu différent à l'utilisateur. La première étape consiste à créer des répertoires pour ces domaines, tels que /var/caddy/exemple1.com, /var/caddy/exemple2.com et /var/caddy/exemple3.com, et à stocker les fichiers requis dans ces répertoires.

Une fois le contenu en place, modifiez votre fichier Caddy de la manière suivante :

{
    email <YOUR EMAIL ADDRESS HERE>
}

example1.com {
    root * /var/caddy/example1.com
    encode gzip
    file_server
}

example2.com {
    root * /var/caddy/example2.com
    encode gzip
    file_server
}

example3.com {
    root * /var/caddy/example3.com
    encode gzip
    file_server
}

Après avoir effectué les modifications ci-dessus, rechargez la configuration de Caddy en exécutant :

sudo systemctl reload caddy

Caddy configurera HTTPS sur ces trois domaines et distribuera le contenu à partir des répertoires respectifs.

Si, pour une raison quelconque, vous souhaitez que les sites soient uniquement en HTTP, vous pouvez ajouter un http:// devant le nom de chaque site, comme suit :

http://example1.com {
    # Caddyfile directives for example1.com
}

Journalisation des requêtes

Par défaut, Caddy ne journalise pas les demandes. Toutefois, vous pouvez configurer Caddy pour qu'il journalise les requêtes grâce à la directive "log". Par défaut, Caddy stocke ses journaux sous forme de lignes de JSON, bien que d'autres formats soient également disponibles.

Comme nous l'avons vu dans les sections précédentes, le fichier Caddy est composé de sections dans lesquelles vous ajoutez la configuration pour chaque site Web. Pour configurer la journalisation, modifiez le fichier Caddy de sorte que chaque bloc ressemble à ceci :

<YOUR DOMAIN NAME HERE, OR SPECIFY "http://"> {
    encode gzip
    file_server
    log {
        output file /var/log/caddy/access.log
    }
}

Une fois que vous avez enregistré le fichier Caddy, rechargez la configuration avec :

sudo systemctl reload caddy

Maintenant, visitez le site Web dans un navigateur, afin de générer quelques entrées de journal. Exécutez la commande suivante pour afficher les journaux :

sudo cat /var/log/caddy/access.log

Conclusion

Caddyfile Concepts - Caddy Documentation
Caddy is a powerful, enterprise-ready, open source web server with automatic HTTPS written in Go

Dans cet article, nous avons abordé brièvement les fonctionnalités de Caddy et la manière de le configurer et de l'utiliser sur un système Linux. Si vous voulez en savoir plus, vous devriez commencer par lire la documentation sur le fichier Caddy.

Un vrai site Web utilise souvent du contenu dynamique en plus du contenu statique. Si vous avez un site Web basé sur PHP, vous devriez jeter un coup d'œil à la directive "php_fastcgi". En revanche, si vous avez une application Web écrite dans un langage tel que Go, NodeJS ou Rust qui démarre son propre serveur HTTP, utilisez la directive "proxy".

Walid ETTAYEB • 36 Articles

Passionné par l'informatique depuis mon plus jeune âge, je transforme ma passion en expertise.

View Articles