Installation du serveur Caddy sous Devuan
Caractéristiques
Caddy est un serveur récent, écrit dans le langage Go. Ses caractéristiques principales sont plutôt intéressantes :
- HTTP/2
- Https, de façon automatique avec https://letsencrypt
- IPv6,
- Reverse proxy,
- Markdown,
- WebSockets,
- FastCGI,
- les templates,
- …
Installation
Go est un langage compilé. Pour installer caddy, on télécharge le binaire précompilé par l'équipe.
Sur la page de téléchargement, vous avez le choix d'ajouter des options. Ensuite, vous indiquez votre système et, vous téléchargez l'application.
Si, comme moi, vous n'avez accès à votre serveur que via ssh, il existe un script qui vous permet un téléchargement et une installation via la ligne de commande.
Le script se trouve par ICI. Lisez le avant d'automatiser la chose :
wget -qO- https://getcaddy.com | bash
Une fois le binaire téléchargé, le script passera par sudo afin de l'installer dans le répertoire /usr/local/bin.
Voilà, c'est tout.
Configuration
Je choisis de ne pas lancer caddy en tant que root.
Utilisateur
Création d'un utilisateur (ou utilisation de votre utilisateur) qui servira à lancer caddy en tant que démon, sans droit root.
Fichier de configuration
Par défaut, ce script pousse caddy à lire un fichier de configuration situé dans /etc/caddy/Caddyfile. Sa syntaxe est des plus simple. Exemple :
# Pour du https automatique avec redirection plop.net www.plop.net { tls votre@email root /data/www/plop.net gzip } # Pour du classique da.plip.net:80 { tls off root /data/www/da.plip gzip }
Démon
Vous n'avez qu'un binaire, la procédure pour le lancer en tant que service n'existe pas.
Il va falloir créer un script caddy et le placer dans etc/init.d. Je vous propose le suivant :
#!/bin/sh # kFreeBSD do not accept scripts as interpreters, using #!/bin/sh and sourcing. if [ true != "$INIT_D_SCRIPT_SOURCED" ] ; then set "$0" "$@"; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script fi ### BEGIN INIT INFO # Provides: caddy # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start caddy server at boot time # Description: Enable service provided by caddy daemon. ### END INIT INFO DESC="the caddy server" NAME=caddy DAEMON=/usr/local/bin/$NAME DAEMONOPTS="-conf=/etc/caddy/Caddyfile -log /var/log/caddy.log" DAEMONUSER="a_not_root_user" USERBIND="/sbin/setcap cap_net_bind_service=+ep" PIDFILE=/var/run/$NAME.pid STOP_TIMEOUT=30 test -x $DAEMON || exit 0 start () { $USERBIND $DAEMON start-stop-daemon --background --make-pidfile --pidfile $PIDFILE \ --start --quiet --chuid $DAEMONUSER \ --exec $DAEMON -- $DAEMONOPTS } stop () { start-stop-daemon --stop --quiet \ --exec $DAEMON --retry $STOP_TIMEOUT --oknodo } case "$1" in start) log_daemon_msg "Starting web server daemon $NAME" start ;; stop) log_daemon_msg "Stopping web server daemon $NAME" stop ;; restart) log_daemon_msg "Restarting web server daemon $NAME" stop start ;; status) status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $? ;; *) log_action_msg "Usage: $0 {status|start|stop|restart}" exit 2 ;; esac exit 0
Vous pouvez récupérer ce script sur le dépôt Git chez Devuan. Il vous reste à renseigner la variable DAEMONUSER et le rendre exécutable :
sudo chmod +x /etc/init.d/caddy
La variable USERBIND="/sbin/setcap capnetbindservice=+ep" est utilisée pour permettre à caddy, qui fonctionne sans droits root, d'utiliser les ports 80 et 443.
Vous pouvez tester si cela vous convient :
sudo /etc/init.d/caddy start
Les options classiques stop, restart, status sont disponibles.
Pour automatiser le service à chaque redémarrage :
sudo update-rc.d caddy defaults
Voilà, n'hésitez pas à l'améliorer ;)