#howto - Installazione e configurazione di Caddy Server su Centos 7/RHEL 7/Fedora 31+

Scritto da il
centos
fedora
nginx

Caddy è un Web Server altamente estensibile e performante scritto in linguaggio Go.

Il beneficio nell'usare Caddy non è esclusivamente legato all'incremento di performance, ma nel godere di tutti i pregi di un software scritto in un linguaggio moderno, pulito e alla base di nuove tecnologie.

Un altro aspetto importante di questo web server è la configurazione automatizzata del certificato SSL, il quale è diventato un aspetto fondamentale per il web dei nostri giorni.

Caddy 2 (la versione che tratteremo in questa guida) è ancora in fase beta. Nonostante la stabilità dimostrata nei nostri test, sconsigliamo l'utilizzo in un ambiente in produzione.

Installazione

Prima di tutto è bene accertarsi di aver installato curl dato che ci servirà per impartire istruzioni a Caddy. Quindi su Centos 7/RHEL 7:

yum install curl

mentre su Fedora 31+:

dnf install curl

L'installazione avviene tramite l'utilizzo di repository/build Copr di Fedora.

Per prima cosa aggiungiamo la repository Copr ufficiale di caddy, su Centos 7/RHEL 7:

yum-config-manager --add-repo https://copr.fedorainfracloud.org/coprs/g/caddy/caddy/repo/epel-7/group_caddy-caddy-epel-7.repo

mentre su Fedora 31+:

dnf copr enable @caddy/caddy

infine installiamo il pacchetto via yum per Centos 7/RHEL 7:

yum install caddy

e via dnf per Fedora 31+:

dnf install caddy

Il web server è subito pronto all'uso.

Utilizzo del servizio

Come ogni web server, anche caddy mette a disposizione un servizio per avviare e fermare il processo.

Avvio

Per avviare il servizio possiamo usare l'opzione start:

caddy start

il quale lavorerà in background lasciando all'amministratore l'accesso alla console. Possiamo invece usare l'opzione run per avviare il servizio tenendo impegnata la console e mostrandone il log:

caddy run

Stop

Usando l'opzione stop possiamo fermare il servizio:

caddy stop

nel caso di una sessione eseguita via opzione run, ci basterà inoltrare la combinazione di tasti CTRL+C per fermarlo.

Reload

Un'altra opzione è reload il quale (come su Nginx) si occupa di aggiornare e quindi ricaricare le configurazioni in uso:

caddy reload

Configurazione

Esistono due modi per configurare caddy, il primo sfruttando la configurazione in formato json e comunicando mediante curl, la seconda tramite caddyfile e lavorando con i comandi integrati.

Personalmente consiglio l'utilizzo dei caddyfile non solo per la loro semplicità ma per poter sfruttare la conversione in tempo reale e passando il compito a caddy stesso.

Config.json

Avviamo il servizio di caddy per la prima volta mediante opzione run del comando caddy:

caddy run

Creiamo la nostra prima configurazione semplicemente scrivendo un nuovo file json:

nano myconf.json

col seguente contenuto:

{
    "apps": {
        "http": {
            "servers": {
                "example": {
                    "listen": [":2015"],
                    "routes": [
                        {
                            "handle": [{
                                "handler": "static_response",
                                "body": "Ciao!"
                            }]
                        }
                    ]
                }
            }
        }
    }
}

dove:

  • example è la configurazione del server che stiamo creando
  • listen è la porta da cui possiamo accedere
  • routes è la lista di percorsi (in Nginx locations) a cui andiamo ad aggiungere definizioni specifiche come ad esempio un testo personalizzato da mostrare nel body della pagina, la quale verrà servita come una risorsa statica static_response

Carichiamo la nostra nuova configurazione a caddy:

curl localhost:2019/load \
  -X POST \
  -H "Content-Type: application/json" \
  -d @myconf.json

Ciò che abbiamo appena fatto è stato comunicare con caddy inviando una richiestra POST col documento json contenente la nostra configurazione, il tutto tramite curl.

Testiamo quindi la nostra nuova configurazione con una nuova richiesta, questa volta di tipo GET:

curl localhost:2019/config/

se tutto è andato a buon fine dovremmo ricevere come output il testo che abbiamo precedentemente inserito come body, ossia Ciao!.

Caddyfile

Creiamo un nuovo file di nome Caddyfile col seguente contenuto:

:2015

respond "Ciao!"

il quale ha lo stesso significato della precedente configurazione in json:

  • :2015 è la porta da cui si potrà accedere alla risorsa
  • respond è il contenuto che andremo a mostrare nel body

fermiamo caddy nel caso fosse ancora operativo (CTRL+C) ed avviamolo sfruttando il nostro file:

caddy run --config /posizione/Caddyfile --adapter caddyfile

dove:

  • --config richiede la posizione completa al nostro Caddyfile
  • --adapter specifica che caddy dovrà usare una configurazione in formato caddyfile e di conseguenza procedere in modo autonomo alla conversione in formato json

Proviamo nuovamente a visualizzare il contenuto del nostro sito:

curl localhost:2015

il quale dovrà mostrare Ciao! nel caso fosse tutto configurato correttamente.

Consiglio di proseguire la lettura tramite la documentazione ufficiale, nello specifico al punto Caddyfile.