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 :

https://letsencrypt

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.

page de téléchargement

ICI

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