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 ;)