Comment héberger un site Web avec Caddy sur CentOS 7

introduction

Caddy est un nouveau serveur Web créé dans un souci de facilité d’utilisation. Il est assez simple pour être utilisé comme serveur de développement rapide et suffisamment robuste pour être utilisé dans des environnements de production.

Il propose un fichier de configuration intuitif, une prise en charge HTTP / 2 et un chiffrement TLS automatique. HTTP / 2 est la nouvelle version du protocole HTTP qui accélère la création de sites Web en utilisant une connexion unique pour transférer plusieurs fichiers et la compression d’en-tête, entre autres fonctionnalités. TLS est utilisé pour desservir des sites Web cryptés sur une connexion sécurisée et, bien qu’il ait été largement adopté sur Internet, il est souvent fastidieux d’obtenir et d’installer des certificats manuellement.

Caddy s’intègre étroitement à Let’s Encrypt, une autorité de certification qui fournit des Les certificats TLS / SSL obtiennent et renouvellent automatiquement les certificats si nécessaire. En d’autres termes, chaque site Web desservi par Caddy peut être automatiquement desservi via une connexion sécurisée, sans configuration ni action supplémentaire.

Dans ce tutoriel, vous allez installer et configurer Caddy. Après avoir suivi ce tutoriel, vous aurez un site Web fonctionnel fonctionnant avec HTTP / 2 et une connexion TLS sécurisée.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de:

  • Un serveur CentOS 7 configuré avec cette introduction à la configuration initiale du serveur, y compris un utilisateur sudo non root.

  • Un nom de domaine configuré pour pointer vers votre serveur. Cela est nécessaire pour que Caddie obtienne un certificat SSL pour le site Web; sans utiliser un nom de domaine approprié, le site Web ne sera pas servi en toute sécurité avec le cryptage TLS. Vous pouvez apprendre à pointer des domaines vers des gouttelettes DigitalOcean en suivant la procédure Comment configurer un Nom d’hôte avec DigitalOcean.

  • En option, l’éditeur de texte + nano + installé avec + sudo yum install nano +. CentOS est livré avec l’éditeur de texte + vi + par défaut, mais + nano + peut être plus convivial.

Étape 1 - Installation des fichiers binaires Caddy

Le projet Caddie fournit un script d’installation permettant de récupérer et d’installer les fichiers binaires du serveur Caddie. Pour l’exécuter, tapez:

curl -s https://getcaddy.com | bash

Vous pouvez voir le script en visitant + https: // getcaddy.com + dans votre navigateur ou en téléchargeant le fichier avec + wget ou` + curl` avant de l’exécuter.

Pendant l’installation, le script utilisera + sudo + pour obtenir les privilèges d’administrateur afin de placer les fichiers Caddy dans des répertoires système, afin de vous demander un mot de passe.

Le résultat de la commande ressemblera à ceci:

Caddy installation script outputDownloading Caddy for linux/amd64...
https://caddyserver.com/download/linux/amd64?plugins=
Extracting...
Putting caddy in /usr/local/bin (may require password)
[sudo] password for sammy:
Caddy 0.10.2
Successfully installed

Une fois le script terminé, les fichiers binaires Caddy sont installés sur le serveur et prêts à être utilisés. Vous pouvez vérifier que les fichiers binaires Caddy ont été mis en place en utilisant + which + pour vérifier leur emplacement.

which caddy

La sortie de la commande indiquera que le binaire Caddy se trouve dans + / usr / local / bin / caddy +.

Caddy ne crée aucune configuration à l’échelle du système lors de l’installation et ne s’installe pas lui-même en tant que service, ce qui signifie qu’il ne démarrera pas automatiquement au démarrage. Au cours des prochaines étapes, nous allons créer le compte utilisateur à utiliser avec Caddy, les fichiers dont Caddy a besoin pour fonctionner et installer son fichier de service.

Étape 2 - Création de l’utilisateur et du groupe pour Caddy

Alors qu’Apache et Nginx, les deux serveurs HTTP les plus populaires, créent leurs propres utilisateurs sans privilèges lors de l’installation à partir de packages système, Caddy ne le fait pas. Pour des raisons de sécurité, il ne faut pas non plus démarrer avec le compte superutilisateur + root +. Dans cette étape, nous allons créer un utilisateur dédié nommé + caddy + qui sera uniquement utilisé pour exécuter Caddy et accéder à ses fichiers.

Pour créer un utilisateur nommé + caddy +, tapez:

sudo adduser -r -d /var/www -s /sbin/nologin

Le commutateur + -r + transforme le compte nouvellement créé en un compte système, le commutateur + -d + indique le répertoire de base de cet utilisateur. Dans notre cas, il s’agira de + / var / www + que nous allons créer. plus tard. L’utilisateur non privilégié ne devrait pas pouvoir se connecter et accéder au shell du système, ce dont nous nous assurons avec le commutateur + -s + pour configurer le shell souhaité en + / sbin / nologin +, une commande système interdisant la connexion au système. Le dernier paramètre est le nom d’utilisateur lui-même - dans notre cas, ++.

Maintenant, lorsque l’utilisateur du serveur Web Caddy est disponible, nous pouvons configurer les répertoires nécessaires pour stocker les fichiers de configuration Caddy à l’étape suivante.

Étape 3 - Configuration des répertoires nécessaires

Le support TLS automatique de Caddy et le fichier d’unité (que nous installerons à la prochaine étape) s’attendent à ce que des répertoires et des fichiers particuliers existent avec des autorisations spécifiques. Nous les créerons tous dans cette étape.

Tout d’abord, créez un répertoire qui contiendra le fichier principal + Caddyfile +, qui est un fichier de configuration qui indique à Caddy quels sites Web doivent être utilisés et comment.

sudo mkdir /etc/caddy

Changez le propriétaire de ce répertoire en utilisateur * root * et son groupe en * www-data * pour que Caddy puisse le lire.

sudo chown -R root:caddy /etc/caddy

Dans ce répertoire, créez un + Caddyfile + vide que nous éditerons plus tard.

sudo touch /etc/caddy/Caddyfile

Créez un autre répertoire dans + / etc / ssl +. Caddy en a besoin pour stocker les clés privées SSL et les certificats qu’il obtient automatiquement de Let’s Encrypt.

sudo mkdir /etc/ssl/caddy

Caddy doit pouvoir écrire dans ce répertoire lorsqu’il obtient le certificat. Par conséquent, définissez le propriétaire comme utilisateur * caddy *. Vous pouvez laisser le groupe en tant que * root *, sans modification de la valeur par défaut:

sudo chown -R caddy:root /etc/ssl/caddy

Assurez-vous ensuite que personne d’autre ne peut lire ces fichiers en supprimant tous les droits d’accès des autres.

sudo chmod 0770 /etc/ssl/caddy

Le répertoire final que nous devons créer est celui où le site Web lui-même sera publié. Nous allons utiliser + / var / www +, qui est habituel et le chemin par défaut lorsque d’autres serveurs Web, tels qu’Apache ou Nginx, sont utilisés.

sudo mkdir /var/www

Ce répertoire devrait appartenir complètement à * caddy *.

sudo chown caddy:caddy /var/www

Vous avez maintenant préparé l’environnement nécessaire à l’exécution de Caddy. Dans l’étape suivante, nous allons configurer Caddy en tant que service système pour garantir qu’il démarre au démarrage du système et qu’il peut être géré avec + systemctl +.

Étape 4 - Installation de Caddy en tant que service système

Bien que Caddy ne s’installe pas lui-même en tant que service, le projet fournit un fichier officiel https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files [+ systemd +]. Ce fichier assume la structure de répertoire que nous avons configurée à l’étape précédente. Assurez-vous donc que votre configuration correspond.

Téléchargez le fichier à partir du référentiel officiel Caddy. Le paramètre additionnel + -o + de la commande + curl + enregistre le fichier dans le répertoire + / etc / systemd / system / + et le rend visible dans + systemd +.

sudo curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service

Avant de poursuivre, nous devons légèrement modifier le fichier pour qu’il utilise notre utilisateur + caddy + sans privilèges pour exécuter le serveur.

Ouvrons le fichier avec + vi + ou votre éditeur de texte préféré (voici un https://www.digitalocean.com/community/tutorials/installing-and-using-the-vim-text-editor-on-a-cloud -server # édition modale [brève introduction à + ​​vi +]

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

et trouvez le fragment responsable de la spécification du compte d’utilisateur et du groupe.

/etc/systemd/system/caddy.service

; User and group the process will run as.
User=
Group=

Changez les deux valeurs en + caddy + comme suit:

/etc/systemd/system/caddy.service

; User and group the process will run as.
User=
Group=

Enregistrez et fermez le fichier pour quitter. Le fichier de service est maintenant prêt à être utilisé avec notre installation. Indiquez + systemd + du nouveau fichier de service.

sudo systemctl daemon-reload

Ensuite, activez Caddy pour qu’il s’exécute au démarrage.

sudo systemctl enable caddy.service

Vous pouvez vérifier que le service a été correctement chargé et activé pour démarrer au démarrage en vérifiant son statut.

sudo systemctl status caddy.service

La sortie devrait ressembler à ceci:

Caddy service status output● caddy.service - Caddy HTTP/2 web server
  Loaded:  (/etc/systemd/system/caddy.service; ; vendor preset: disabled)
  Active: inactive (dead)
    Docs: https://caddyserver.com/docs

Plus précisément, il est indiqué que le service est * chargé * et * activé *, mais qu’il n’est pas encore en cours d’exécution. Nous ne lancerons pas le serveur pour l’instant car la configuration est encore incomplète.

Vous avez maintenant configuré Caddy en tant que service système qui démarrera automatiquement au démarrage sans avoir à l’exécuter manuellement. Ensuite, nous allons autoriser le trafic Web à travers le pare-feu.

Étape 5 - Autoriser les connexions HTTP et HTTPS (facultatif)

Si vous avez également suivi le tutoriel 7traitement recommandé pour les nouveaux serveurs CentOS 7 et utilisez un pare-feu, nous devons ajouter manuellement des règles de pare-feu pour transmettre le trafic Internet à Caddy.

Caddy dessert des sites Web utilisant les protocoles HTTP et HTTPS. Nous devons donc autoriser l’accès aux ports appropriés afin de rendre Caddy disponible à partir d’Internet.

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

Lorsqu’elles sont exécutées, les trois commandes génèrent le message de succès suivant:

firewall-cmd outputsuccess

Cela permettra à Caddy de servir les sites Web aux visiteurs librement. Dans l’étape suivante, nous allons créer un exemple de page Web et mettre à jour le + Caddyfile + afin de le servir afin de tester l’installation de Caddy.

Étape 6 - Création d’une page Web de test et d’un fichier de sauvegarde

Commençons par créer une page HTML très simple qui affichera un message simple * Hello World! *. Cette commande créera un fichier + index.html + dans le répertoire du site Web créé précédemment avec une seule ligne de texte, + <h1> Hello World! </ H1> +, à l’intérieur.

echo '<h1>Hello World!</h1>' | sudo tee /var/www/index.html

Ensuite, nous allons compléter le + Caddyfile +. Le + Caddyfile +, dans sa forme la plus simple, consiste en un ou plusieurs server blocks qui définissent chacun la configuration d’un site Web. Un bloc de serveur commence par une définition d’adresse et est suivi d’accolades. À l’intérieur des accolades, vous pouvez inclure des directives de configuration à appliquer à ce site Web.

Une adresse definition est spécifiée sous la forme +: //: +. Caddy assumera lui-même certaines valeurs par défaut si vous laissez des champs vides. Par exemple, si vous spécifiez le protocole mais pas le port, ce dernier sera automatiquement dérivé (c.-à-d. le port + 80 + est supposé pour HTTP et le port + 443 + est supposé pour HTTPS). Les règles régissant le format de l’adresse sont décrites en détail dans la documentation officielle de Caddyfile.

Ouvrez le + Caddyfile + que vous avez créé à l’étape 2 en utilisant + vi + ou votre éditeur de texte préféré.

sudo vi /etc/caddy/Caddyfile

Coller dans le contenu suivant:

/ etc / caddy / Caddyfile

http:// {
   root /var/www
   gzip
}

Enregistrez ensuite le fichier et quittez. Expliquons ce que fait ce + Caddyfile + spécifique.

Ici, nous utilisons +: // + pour la définition de l’adresse. Cela indique à Caddy qu’il doit lier le port + 80 + et traiter toutes les demandes à l’aide du protocole HTTP simple (sans cryptage TLS), quel que soit le nom de domaine utilisé pour se connecter au serveur. Cela vous permettra d’accéder aux sites Web que Caddy héberge en utilisant l’adresse IP de votre serveur.

À l’intérieur des accolades de notre bloc de serveur, il y a deux directives:

  • La directive + root + indique à Caddy où se trouvent les fichiers du site Web. Dans notre exemple, c’est + / var / www +, où nous avons créé la page de test.

  • La directive + gzip + indique à Caddy d’utiliser la compression Gzip pour rendre le site plus rapide. Il n’a pas besoin de configuration supplémentaire.

Une fois le fichier de configuration prêt, démarrez le service Caddy.

sudo systemctl start caddy

Nous pouvons maintenant tester si le site Web fonctionne. Pour cela, vous utilisez l’adresse IP publique de votre serveur. Si vous ne connaissez pas l’adresse IP de votre serveur, vous pouvez l’obtenir avec + curl -4 icanhazip.com +. Une fois que vous l’avez, visitez + http: // + dans votre navigateur préféré pour voir le site Web * Hello World! *.

Cela signifie que votre installation Caddy fonctionne correctement. Dans l’étape suivante, vous activerez une connexion sécurisée à votre site Web avec la prise en charge automatique TLS de Caddy.

Étape 7 - Configuration du TLS automatique

L’une des principales caractéristiques qui distingue Caddy des autres serveurs Web est sa capacité à demander et à renouveler automatiquement les certificats TLS auprès de Let’s Encrypt, une autorité de certification gratuite. De plus, configurer Caddy pour qu’il serve automatiquement les sites Web sur une connexion sécurisée ne nécessite qu’un changement d’une ligne dans le + Caddyfile +.

Caddy se charge d’activer la connexion sécurisée HTTPS pour tous les blocs de serveur configurés et d’obtenir automatiquement les certificats nécessaires, dans la mesure où certaines exigences sont remplies par la configuration des blocs de serveur.

Pour que TLS fonctionne, les conditions suivantes doivent être remplies:

  • Caddy doit pouvoir se lier au port + 443 + pour HTTPS, et le même port doit être accessible à partir d’Internet.

  • Le protocole ne doit pas être défini sur HTTP, le port ne doit pas être défini sur + 80 +, et TLS ne doit pas être explicitement désactivé ou remplacé par d’autres paramètres (par exemple, avec la directive + tls + dans le bloc serveur).

  • Le nom d’hôte doit être un nom de domaine valide. il ne doit pas être vide ni paramétré sur + localhost + ou une adresse IP. Cela est nécessaire car Let’s Encrypt peut uniquement émettre des certificats pour des noms de domaine valides.

  • Caddy doit connaître l’adresse électronique pouvant être utilisée pour la récupération de clé avec Let’s Encrypt.

Si vous avez suivi ce didacticiel, la première condition est déjà remplie. Toutefois, l’adresse de blocage du serveur en cours est simplement configurée comme suit: "+: // +", définissant un schéma HTTP simple sans chiffrement ni nom de domaine. Nous n’avons pas non plus fourni à Caddy d’adresse e-mail requise par Let’s Encrypt lors de la demande de certificat. Si l’adresse n’est pas fournie dans la configuration, Caddy le demande lors du démarrage. Cependant, étant donné que Caddy est installé en tant que service système, il ne peut pas poser de questions au démarrage et, par conséquent, il ne démarrera pas correctement du tout.

Pour résoudre ce problème, ouvrez à nouveau le fichier + Caddyfile +.

sudo vi /etc/caddy/Caddyfile

Tout d’abord, remplacez la définition de l’adresse + http: // + par votre domaine. Cela supprime la connexion non sécurisée forcée par HTTP et fournit un nom de domaine pour le certificat TLS. Deuxièmement, fournissez une adresse électronique à Caddy à l’aide de la directive + tls + à l’intérieur du bloc serveur.

Le fichier + Caddyfile + modifié devrait ressembler à ceci, avec votre domaine et votre adresse e-mail remplacés par:

/ etc / caddy / Caddyfile

{
   root /var/www
   gzip

}

Enregistrez le fichier et quittez l’éditeur. Pour appliquer les modifications, redémarrez Caddy.

sudo systemctl restart caddy

Dirigez maintenant votre navigateur sur + https: // + pour vérifier si les modifications ont été appliquées correctement. Si tel est le cas, vous devriez à nouveau voir la page * Hello World! *. Cette fois, vous pouvez vérifier que le site Web est servi avec HTTPS en consultant l’URL ou un symbole de verrou dans la barre d’URL.

Conclusion

Vous avez maintenant configuré Caddy pour desservir correctement votre site Web via une connexion TLS sécurisée. Il obtiendra et renouvellera automatiquement les certificats auprès de Let’s Encrypt, servira votre site via une connexion sécurisée utilisant le nouveau protocole HTTP / 2 et réduira le temps de chargement grâce à la compression gzip.

Ceci est un exemple simple pour démarrer avec Caddy. Pour en savoir plus sur les fonctionnalités uniques et les directives de configuration de Caddy pour le + Caddyfile + dans la official documentation Caddy.