| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| configuration_d_un_serveur_web_caddy [2021/02/24 21:45] – [Configurer PHP avec Caddy] superadmin | configuration_d_un_serveur_web_caddy [2022/04/11 16:34] (Version actuelle) – modification externe 127.0.0.1 |
|---|
| ===== Configuration de Caddy comme serveur web ===== | ===== Configuration de Caddy comme serveur web ===== |
| |
| Caddy se configure via le Caddyfile. Ce fichier est par défaut stocké dans ''/etc/caddy/''. Il est possible d'utiliser un autre fichier, mais pour que les commandes ''start'' et ''reload'' le prennent en compte, il faudra utiliser l'argument ''--config'' pour indiquer le chemin vers ce fichier. | Caddy se configure via un fichier spécifique nommé **Caddyfile**. ''/etc/caddy/Caddyfile'' est le Caddyfile par défaut. Il est possible de choisir d'utiliser un autre Caddyfile lors du démarrage du serveur, grâce à un argument facultatif, voir [[configuration_d_un_serveur_web_caddy#demarrage_arret_de_caddy|Démarrage & Arrêt de Caddy]]). |
| |
| ==== Serveur web local (sans HTTPS) ==== | On commence par indiquer l'adresse IP ou le nom de domaine du site, ainsi que le port TCP sur lequel écoutera Caddy. Puis on lui donne l'instruction d'agir comme serveur web avec la directive ''file_server'' : |
| | |
| <code>localhost { #localhost permet de restreindre l'accès au site en local uniquement | |
| root * /web/ #indique le répertoire du site web. Ici /web/. (par défaut ''/usr/share/caddy''. L'astérisque est à mettre devant le chemin du répertoire) | |
| file_server #spécifie le mode serveur web | |
| } | |
| </code> | |
| | |
| :!: Derrière ''localhost'', on peut renseigner le port que l'on souhaite utiliser si besoin, par exemple '':8080'' pour le port **8080**. Par défaut c'est le 80. | |
| | |
| => Pour démarrer Caddy, allez à la section [[configuration_d_un_serveur_web_caddy#demarrage_arret_de_caddy|Démarrage & Arrêt de Caddy]] | |
| ==== Serveur web local (avec HTTPS) ==== | |
| | |
| <code>https://localhost { #localhost permet de restreindre l'accès au site en local uniquement | |
| root * /web/ #indique le répertoire du site web. Ici /web/. (par défaut ''/usr/share/caddy''. L'astérisque est à mettre devant le chemin du répertoire) | |
| file_server #spécifie le mode serveur web | |
| tls self_signed #permet de générer un certificat HTTPS auto-signé (utilisable seulement en local) | |
| } | |
| </code> | |
| | |
| ==== Serveur web en réseau (avec et sans HTTPS) ==== | |
| | |
| Un Caddyfile peut contenir plusieurs sites à la manière des hôtes virtuels d'apache. Pour cela, il faudra utiliser des accolades (''{'' et ''}'') à la suite de la déclaration du nom de domaine/adresse IP afin de délimiter la configuration des différents sites. | |
| De plus, il permet d'activer le protocole HTTPS gratuitement sans avoir à installer manuellement de certificat (voir la remarque plus bas). | |
| | |
| https://monnomdedomaine.fr:443 #https + nom de domaine ou adresse IP + port 443 pour le site en HTTPS | |
| | |
| root * /web/ { #indique le répertoire du site web. Ici /web/. | |
| file_server #spécifie le mode serveur web | |
| tls admin@monnomdedomaine.fr #adresse mail de l'admin, utile pour la certification HTTPS</code> | |
| } | |
| <code> | <code> |
| http://monnomdedomaine.fr:80 { #http + nom de domaine ou adresse IP + port 80 pour le site en HTTP | 192.168.1.29:80 |
| root * /web/ #indique le répertoire du site web. Ici /web/. | file_server |
| file_server #spécifie le mode serveur web | |
| } | |
| </code> | </code> |
| |
| Dans le cas où l'on souhaiterais installer un certificat manuellement, ajouter cette ligne en l'adaptant : | Par défaut le répertoire racine des sites web utilisé par Caddy est ''/usr/share/caddy''. Pour le modifier, il faut ajouter la directive suivante : |
| |
| <code>tls /etc/ssl/certs/cloudfare/cert.pem /etc/ssl/certs/cloudflare/key.pem</code> | <code>root * /web/</code> |
| |
| Le premier chemin est celui du certificat, et le second celui de la clé. | Dans l'exemple ci-dessus, on a choisi d'utiliser /web/ comme répertoire racine du site. Ce répertoire doit être accessible en lecture pour tous le monde. |
| |
| __:!: Remarque importante :!: :__ Pour que la création et l'installation automatique du certificat HTTPS fonctionne, le site doit être accessible depuis le port **443** (avec ''https://'' devant le nom de domaine) et être aussi accessible depuis le port **80** (avec ''http://'' devant le NDD), si le site tourne sur d'autres ports, la certification HTTPS ne fonctionnera pas (ou alors il faudra installer le certificat manuellement). De plus, il faut que le serveur ait accès à Internet bien sûr. | Si l'on souhaite que le site ne soit accessible qu'en local, à des fins de développement par exemple, le nom de domaine du site doit être ''localhost''. |
| |
| ==== Configurer PHP avec Caddy ==== | :!: Lorsque plusieurs sites doivent cohabiter sur le même serveur, on utilise les accolades (''{'' & ''}'') à la suite de la déclaration du nom de domaine/adresse IP afin de dissocier les différentes configurations. |
| |
| PHP n'étant pas intégré nativement à Caddy, il faut donc le paramétrer à part. | ==== Activer PHP ==== |
| |
| Installer en premier les paquets ''php-cli'' et ''php-fpm'' : | Le défaut majeur de Caddy est qu'il n'intègre pas PHP nativement. Pour profiter de PHP, il faut donc le paramétrer soi-même. |
| | |
| | Installer d'abord les paquets ''php-cli'' et ''php-fpm'' : |
| |
| <code>apt-get install php-fpm php-cli</code> | <code>apt-get install php-fpm php-cli</code> |
| |
| <code>php_fastcgi unix//run/php/php7.3-fpm.sock</code> | <code>php_fastcgi unix//run/php/php7.3-fpm.sock</code> |
| | |
| | ==== Activer HTTPS ==== |
| | |
| | Le protocole HTTPS permet de chiffrer les requêtes entre le serveur web et le navigateur web. Il requiert l'utilisation de certificats SSL afin de garantir la confidentialité et l'intégrité des données échangées. Caddy est capable de gérer cela de façon complètement autonome. |
| | |
| | === Activer HTTPS automatiquement pour un site public === |
| | |
| | Un des avantages de Caddy est qu'il permet d'automatiser la génération et l'installation de certificats SSL pour le web. Pour cela, il faut impérativement que les sites concernés soient accessibles sur les ports 80 et 443 ET que le nom de domaine utilisé redirige bien vers le serveur web. |
| | La configuration est aisée, puisqu'il ne suffit que d'une ligne supplémentaire dans le Caddyfile : |
| | |
| | <code>tls admin@monnomdedomaine.fr</code> |
| | |
| | Cette instruction permet simplement de renseigner une adresse mail de contact (obligatoire pour la création du certificat SSL). |
| | |
| | Au premier lancement du serveur web, et s'il n'y a pas d'erreur dans la configuration, Caddy va alors récupérer un certificat auprès d'une autorité de certification gratuite (Let's Encrypt ou ZeroSSL) et l'installer sur le serveur. Le(s) site(s) est/sont désormais accessible(s) en HTTPS ! |
| | |
| | Dans le cas où l'on souhaiterais installer soi-même un certificat SSL existant, se référer à la partie **Activer HTTPS manuellement** un peu plus bas. |
| | |
| | === Activer HTTPS automatiquement pour un site local === |
| | |
| | L'activation d'HTTPS se fait automatiquement pour les sites locaux, sauf sur les sites sur le port 80. Un certificat auto-signé est généré par Caddy. |
| | |
| | === Activer HTTPS manuellement === |
| | |
| | Dans le cas où l'on souhaiterais installer un certificat manuellement, ajouter cette ligne : |
| | |
| | <code>tls /etc/ssl/certs/cloudfare/cert.pem /etc/ssl/certs/cloudflare/key.pem</code> |
| | |
| | Après ''tls'', le premier fichier à indiquer est le certificat, et le second la clé privée associée. |
| | |
| | |
| | |
| |
| ==== Démarrage & Arrêt de Caddy ==== | ==== Démarrage & Arrêt de Caddy ==== |
| <code>caddy start</code> | <code>caddy start</code> |
| |
| Ou bien avec : | :!: Attention : Si le processus Caddy est déja lancé, il refusera de se "relancer". Il faudra donc le redémarrer manuellement ou avec la commande dédiée. |
| | |
| <code>systemctl caddy start</code> | |
| | |
| :!: Attention : le service est automatiquement lancé à l'installation, une erreur peut donc se produire s'il est déja lancé, on ne peut donc que l'arrêter ou le relancer. | |
| |
| Pour redémarrer le serveur en lui indiquant le fichier de configuration à charger : | Pour redémarrer le serveur en lui indiquant le fichier de configuration à charger : |
| |
| <code>caddy reload --config /etc/caddy/Caddyfile</code> | <code>caddy reload</code> |
| |
| Pour arrêter le serveur : | Pour arrêter le serveur : |
| <code>caddy stop</code> | <code>caddy stop</code> |
| |
| Ou bien : | Pour démarrer/relancer Caddy en spécifiant un Caddyfile particulier : |
| |
| <code>systemctl stop caddy</code> | <code>--config /etc/caddy/Caddyfile</code> |
| |
| Enfin, pour créer une image Docker avec Caddy, il est nécessaire d'utiliser la commande suivante dans le dockerfile afin de lancer Caddy au premier plan : | Enfin, pour créer une image Docker avec Caddy, il est nécessaire d'utiliser la commande suivante dans le dockerfile afin de lancer Caddy au premier plan : |
| :!: Bien évidemment le chemin vers la configuration de Caddy peut varier. | :!: Bien évidemment le chemin vers la configuration de Caddy peut varier. |
| |
| ===== Configuration de Caddy comme Reverse Proxy web ===== | ==== Exemples de configuration ==== |
| |
| à venir | Caddyfile d'un serveur web disponible sur le réseau local avec PHP et HTTPS : |
| |
| | <code>192.168.1.65:80 |
| | root * /web/ |
| | file_server |
| | php_fastcgi unix//run/php/php7.3-fpm.sock |
| | </code> |
| ===== Dépannage ===== | ===== Dépannage ===== |
| |