Caddy serveur
Caddy est un serveur web écrit en Go, open source et disponible avec HTTPS automatiquement
Caddy
Installation
Guide d’utilisation d’un serveur Caddy sous Linux
https://caddyserver.com/docs/running#using-the-service
Prérequis
1
2
sudo apt update
sudo apt install libcap2-bin libnss3-tools wget tar
suivre ces instructions pour une installation “manuelle”
Exigences :
- binaire Caddy que vous avez téléchargé ou construit à partir des sources.
- systemctl –version 232 ou plus récent
- privilèges sudo
Télécharger le binaire linux amd64
Déplacez le binaire caddy dans votre $PATH, par exemple :
1
2
sudo mv caddy_linux_amd64 /usr/local/bin/caddy
sudo chmod +x /usr/local/bin/caddy
Testez : caddy version
v2.7.6 h1:w0NymbG2m9PcvKWsrXO6EEkY9Ru4FJK8uQbYcev1p3A=
Configuration
Les serveurs Web tels que Caddy sont généralement exposés sur l’Internet, lancer tout logiciel qui est exposé en tant qu’utilisateur restreint.
configurer un utilisateur restreint nommé caddy avec le répertoire personnel de /etc/caddy
en exécutant la commande suivante
1
sudo useradd --shell /bin/false --home-dir /etc/caddy --system caddy
Caddy stocke la configuration dans le répertoire .config
, et les certificats dans le répertoire .local
.
Exécutez la commande suivante pour créer ces deux répertoires
1
sudo mkdir -p /etc/caddy/.config /etc/caddy/.local
répertoire lié à Caddy pour stocker les logs
1
sudo mkdir -p /var/log/caddy
Modifier la propriété des répertoires au profit de l’utilisateur caddy
1
sudo chown -R caddy: /etc/caddy /var/log/caddy
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 :
1
sudo setcap cap_net_bind_service+ep /usr/local/bin/caddy
Caddy service
configurer Caddy comme un service du système qui démarrera automatiquement
Créer le fichier
1
sudo nano /etc/systemd/system/caddy.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[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
Noter , répertoire par défaut : /var/caddy/html
Création : sudo mkdir -p /var/caddy/html
Site proxy
Créer un proxy avec un accès protégé
1
sudo nano /etc/caddy/Caddyfile
1
2
3
xoyaz.xyz {
reverse_proxy 127.0.0.1:8100
}
Démarrer et activer le service
1
2
sudo systemctl daemon-reload
sudo systemctl enable caddy --now
Accès https://xoyaz.xyz
Accès avec authentification
Entrez ceci dans le terminal pour générer un hachage du mot de passe (par défaut, l’algorithme de hachage bcrypt est utilisé).
1
caddy hash-password
Saisir le mot de passe à hacher, qui va donner un résultat , exemple
JDJhJDE0JElab2ZPM25zdU40bE5SSURlTHd3OHVBeVJvYTlMN3dMOEFMdFVCRzNYS1l5ODl6TlVyQllH
Vous trouverez ci-dessous un modèle qu’il vous suffit de remplacer par le nom d’utilisateur et le code d’accès, puis de le placer dans votre fichier Caddy /etc/caddy/Caddyfile
1
2
3
basicauth * {
bob JDJhJDE0JElab2ZPM25zdU40bE5SSURlTHd3OHVBeVJvYTlMN3dMOEFMdFVCRzNYS1l5ODl6TlVyQllH
}
Si vous souhaitez sécuriser un certain chemin, la syntaxe suivante peut être utilisée
1
2
3
basicauth /homework/* {
bob JDJhJDE0JElab2ZPM25zdU40bE5SSURlTHd3OHVBeVJvYTlMN3dMOEFMdFVCRzNYS1l5ODl6TlVyQllH
}
Recharger le caddy
1
2
3
caddy reload
# OU
sudo systemctl reload caddy
Activer PHP dans Caddy
En mode su
Tout d’abord, installez PHP et les autres extensions nécessaires
1
apt-get install php8.2-fpm php8.2-mysql php8.2-curl php8.2-gd php8.2-mbstring php8.2-common php-xml php8.2-xmlrpc -y
Après avoir installé PHP, éditez le fichier de configuration PHP-FPM et changez l’utilisateur et le groupe par défaut avec caddy
1
nano /etc/php/8.2/fpm/pool.d/www.conf
Recherchez et remplacez le nom d’utilisateur et de groupe de www-data par caddy :
1
2
3
4
user = caddy
group = caddy
listen.owner = caddy
listen.group = caddy
Enregistrez et fermez le fichier puis redémarrez le service PHP-FPM pour appliquer les modifications
1
systemctl restart php8.2-fpm
Créer un fichier de configuration d’hôte virtuel Caddy dans /etc/caddy/Caddyfile
1
nano /etc/caddy/Caddyfile
Ajouter les lignes suivantes :
1
2
3
4
5
php.xoyaz.xyz {
root * /var/lib/caddy/
encode gzip zstd
php_fastcgi unix//run/php/php8.2-fpm.sock
}
Redémarrer le service Caddy pour appliquer les modifications :
1
systemctl restart caddy
Ensuite, créer un fichier PHP de test pour Caddy
1
nano /var/lib/caddy/info.php
Ajoutez les lignes suivantes :
1
<?php phpinfo(); ?>
Tester le lien https://php.xoyaz.xyz/info.php
Directive file_server
La directive index est lié à file_server
1
2
3
4
5
6
ouestline.xyz {
root * /mnt/sambashare/alpine
file_server {
index index.html index.php
}
}
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 :
1
2
3
4
5
6
7
<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 :
1
2
sudo systemctl reload caddy # avec systemd
sudo service caddy reload
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 :
1
sudo cat /var/log/caddy/access.log
Archlinux Caddy
Caddy est un serveur web compatible HTTP/2 avec un HTTPS automatique.
Installation
Installez le paquet Caddy.
1
sudo pacman -S caddy
Par défaut le service est inactif: systemctl status caddy
1
2
3
4
○ caddy.service - Caddy web server
Loaded: loaded (/usr/lib/systemd/system/caddy.service; disabled; preset: disabled)
Active: inactive (dead)
Docs: https://caddyserver.com/docs/
Plugins
Si vous avez besoin de plus que la version de base de Caddy, vous pouvez utiliser xcaddy-binAUR pour personnaliser la construction de votre serveur Caddy. Ceci est utile si vous avez besoin des plugins supplémentaires pour le défi DNS, etc. Sinon, si un paquet pré-construit, avec les plugins dont vous avez besoin, est déjà disponible, vous pouvez choisir d’installer ceux de AUR, par exemple caddy-cloudflareAUR.
Pour un serveur caddy personnalisé construire vous pouvez utiliser xcaddy pour construire caddy avec les modules de plugin nécessaires:
1
2
3
$ xcaddy build [<caddy_version>]
[--output <file>]
[--with <module[@version][=replacement]>...]
Pour en savoir plus, consultez le dépôt xcaddy.
Configuration
Caddy 2 prend en charge différents formats de configuration, voir config adapters (caddyfile, nginx, json, yaml, toml, entre autres).
Le plus souvent, Caddy est configuré en utilisant un fichier texte simple appelé Caddyfile. Le Caddyfile commence par (un bloc optionnel d’options globales et) une adresse du site à desservir, et est suivi d’un certain nombre de directives.
Un simple Caddyfile hébergeant le site à localhost:2020:
1
2
3
4
5
6
{
http_port 2020
}
localhost:2020
file_server
Utilisation
1
2
$ caddy help
$ caddy help run
Caddy peut être exécuté par n’importe quel utilisateur à partir du répertoire de la page, et le Caddyfile devrait être dans le même répertoire:
1
caddy run
Vous pouvez également spécifier un Caddyfile personnalisé:
1
caddy run --config ../chemin/vers/caddyfile
Dépannage
Erreur de certificat
Si vous rencontrez des problèmes liés aux certificats SSL (surtout sur des domaines non publics), c’est probablement parce que l’instance de caddy en cours d’exécution n’a pas la permission d’ajouter le certificat au magasin de fiducie du système. C’est le cas quand caddy.service
est utilisé pour démarrer automatiquement Caddy.
Pour corriger cela, exécutez ce qui suit en “root”. Vous n’avez à exécuter cela qu’une fois dans un temps très long (vie du certificat racine).
1
XDG_DATA_HOME=/var/lib caddy trust
Type de contenu manquant
Si vous rencontrez des problèmes lors de l’utilisation de la sous-direction de navigation du serveur de fichiers comme par exemple les fichiers vidéo ne s’affichent pas correctement, cela pourrait être dû au manque d’en-tête Content-Type
dans les réponses HTTP.
Caddy est écrit en Go et utilise la fonction TypeByExtension de la bibliothèque MIME standard pour obtenir le type mime de l’extension de fichier. Comme documenté, la fonction TypeByExtension
utilise /etc/mime.types
(ou l’un des autres fichiers listés) pour obtenir le type MIME.
Vous devez installer le paquet mailcap pour rendre /etc/mime.types
disponible à Caddy, permettant une génération correcte de l’en-tête Content-Type
.
Test chirpy sur archlinux
Tester le serveur statique chirpy en local
Le fichier de configuration $HOME/media/Caddyfile
1
2
3
4
:8282 {
root * /home/yann/media/chirpy/_site
file_server
}
Exécution serveur
1
caddy run --config media/Caddyfile
Modèles Caddyfile courants
Cette page présente quelques configurations Caddyfile complètes et minimales pour les cas d’utilisation courants. Ceux-ci peuvent être des points de départ utiles pour vos propres documents Caddyfile.
Ce ne sont pas des solutions instantanées ; vous devrez personnaliser votre nom de domaine, vos ports/sockets, vos chemins de répertoire, etc. Ils sont destinés à illustrer certains des modèles de configuration les plus courants.