Écrit le 2016-03-07
Caddy est un serveur récent, écrit dans le langage Go. Ses caractéristiques principales sont plutôt intéressantes :
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.
Je choisis de ne pas lancer caddy en tant que root.
Création d'un utilisateur (ou utilisation de votre utilisateur) qui servira à lancer caddy en tant que démon, sans droit root.
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
}
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 cap_net_bind_service=+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 ;)