Installation du serveur Caddy sous Devuan

3 minute read Published:

Installer et paramétrer le 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 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 ;)


☣ laisser un commentaire ☣