Guida introduttiva

Benvenuti in Caddy! Questo tutorial esplorerà le basi dell'uso di Caddy e vi aiuterà a familiarizzare con esso a un livello generale.

Obiettivi:

  • 🔲 Eseguire il demone
  • 🔲 Provare l'API
  • 🔲 Fornire una configurazione a Caddy
  • 🔲 Testare la configurazione
  • 🔲 Creare un Caddyfile
  • 🔲 Usare l'adattatore di configurazione
  • 🔲 Avviare con una configurazione iniziale
  • 🔲 Confrontare JSON e Caddyfile
  • 🔲 Confrontare API e file di configurazione
  • 🔲 Eseguire in background
  • 🔲 Ricaricamento della configurazione senza tempi di inattività

Prerequisiti:

  • Competenze di base del terminale / riga di comando
  • Competenze di base con editor di testo
  • caddy e curl nel vostro PATH

Se avete installato Caddy da un gestore di pacchetti, Caddy potrebbe essere già in esecuzione come servizio. In tal caso, interrompete il servizio prima di seguire questo tutorial.

Iniziamo eseguendolo:

caddy

Oops; senza un sottocomando, il comando caddy visualizza solo il testo di aiuto. Potete usarlo ogni volta che dimenticate cosa fare.

Per avviare Caddy come demone, usate il sottocomando run:

caddy run

Questo comando blocca il terminale a tempo indeterminato, ma cosa sta facendo? Al momento... nulla. Per impostazione predefinita, la configurazione ("config") di Caddy è vuota. Possiamo verificarlo usando l'API di amministrazione in un altro terminale:

curl localhost:2019/config/

Possiamo rendere Caddy utile fornendogli una configurazione. Questo può essere fatto in molti modi, ma inizieremo effettuando una richiesta POST all'endpoint /load usando curl nella sezione successiva.

La vostra prima configurazione

Per preparare la nostra richiesta, dobbiamo creare una configurazione. Nel suo nucleo, la configurazione di Caddy è semplicemente un documento JSON.

Salvate questo contenuto in un file JSON (es. caddy.json):

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

Quindi caricatela:

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

Possiamo verificare che Caddy abbia applicato la nostra nuova configurazione con un'altra richiesta GET:

curl localhost:2019/config/

Verificate che funzioni andando su localhost:2015 nel vostro browser o usando curl:

curl localhost:2015
Hello, world!

Se vedete Hello, world!, congratulazioni -- funziona! È sempre una buona idea assicurarsi che la configurazione funzioni come previsto, specialmente prima di passare alla produzione.

Il vostro primo Caddyfile

È stato un bel po' di lavoro solo per un Hello World.

Un altro modo per configurare Caddy è con il Caddyfile. La stessa configurazione che abbiamo scritto sopra in JSON può essere espressa semplicemente come:

:2015

respond "Hello, world!"

Salvate questo contenuto in un file chiamato Caddyfile (senza estensione) nella directory corrente.

Fermate Caddy se è già in esecuzione (Ctrl+C), quindi eseguite:

caddy adapt

O se avete salvato il Caddyfile altrove o lo avete chiamato in modo diverso da Caddyfile:

caddy adapt --config /percorso/del/Caddyfile

Vedrete un output JSON! Cosa è successo?

Abbiamo appena usato un adattatore di configurazione per convertire il nostro Caddyfile nella struttura JSON nativa di Caddy.

Anche se potremmo prendere quell'output ed effettuare un'altra richiesta API, possiamo saltare tutti questi passaggi perché il comando caddy può farlo per noi. Se nella directory corrente è presente un file chiamato Caddyfile e non è specificata altra configurazione, Caddy caricherà il Caddyfile, lo adatterà per noi e lo eseguirà immediatamente.

Ora che c'è un Caddyfile nella cartella corrente, eseguiamo di nuovo caddy run:

caddy run

O se il vostro Caddyfile è altrove:

caddy run --config /percorso/del/Caddyfile

(Se si chiama in un altro modo che non inizia con "Caddyfile", dovrete specificare --adapter caddyfile.)

Potete ora provare a caricare nuovamente il vostro sito e vedrete che funziona!

Come potete vedere, ci sono diversi modi per avviare Caddy con una configurazione iniziale:

  • Un file chiamato Caddyfile nella directory corrente
  • Il flag --config (opzionalmente con il flag --adapter)
  • Il flag --resume (se una configurazione è stata caricata in precedenza)

JSON vs. Caddyfile

Ora sapete che il Caddyfile viene semplicemente convertito in JSON per voi.

Il Caddyfile sembra più facile del JSON, ma dovreste usarlo sempre? Ci sono pro e contro per ogni approccio. La risposta dipende dalle vostre esigenze e dal caso d'uso.

JSON Caddyfile
Facile da generare Facile da creare a mano
Facilmente programmabile Scomodo da automatizzare
Estremamente espressivo Moderatamente espressivo
Gamma completa di funzionalità Caddy La maggior parte delle funzionalità Caddy
Permette l'esplorazione della configurazione Non è possibile esplorare all'interno del Caddyfile
Modifiche parziali alla configurazione Solo modifiche all'intera configurazione
Può essere esportato Non può essere esportato
Compatibile con tutti gli endpoint API Compatibile con alcuni endpoint API
Documentazione generata automaticamente Documentazione scritta a mano
Ubiquo Di nicchia
Più efficiente Richiede più calcolo
Un po' noioso Più divertente
Saperne di più: Struttura JSON Saperne di più: Documentazione Caddyfile

Dovrete decidere quale sia il migliore per il vostro caso d'uso.

È importante notare che sia JSON che il Caddyfile (e qualsiasi altro adattatore di configurazione supportato) possono essere utilizzati con l'API di Caddy. Tuttavia, ottenete l'intera gamma di funzionalità e caratteristiche API di Caddy se utilizzate JSON. Se utilizzate un adattatore di configurazione, l'unico modo per caricare o modificare la configurazione con l'API è l'endpoint /load.

API vs. File di configurazione

Dovrete anche decidere se il vostro flusso di lavoro debba essere basato su API o su CLI. (È possibile usare sia l'API che i file di configurazione sullo stesso server, ma non lo raccomandiamo: meglio avere un'unica fonte di verità.)

API File di configurazione
Modifiche alla configurazione con richieste HTTP Modifiche alla configurazione con comandi shell
Facile da scalare Difficile da scalare
Difficile da gestire a mano Facile da gestire a mano
Molto divertente Anche divertente
Saperne di più: Tutorial API Saperne di più: Tutorial Caddyfile

La scelta tra flusso di lavoro API o file di configurazione è ortogonale all'uso degli adattatori di configurazione: potete usare JSON ma memorizzarlo in un file e usare l'interfaccia a riga di comando; viceversa, potete anche usare il Caddyfile con l'API.

Ma la maggior parte delle persone userà le combinazioni JSON+API o Caddyfile+CLI.

Come potete vedere, Caddy è adatto per un'ampia varietà di casi d'uso e distribuzioni!

Start, stop, run

Dato che Caddy è un server, viene eseguito a tempo indeterminato. Ciò significa che il vostro terminale non si sbloccherà dopo aver eseguito caddy run finché il processo non viene terminato (solitamente con Ctrl+C).

Sebbene caddy run sia il più comune e solitamente raccomandato (specialmente quando si crea un servizio di sistema!), potete in alternativa usare caddy start per avviare Caddy e farlo girare in background:

caddy start

Questo vi permetterà di usare nuovamente il terminale, il che è comodo in alcuni ambienti interattivi headless.

Dovrete poi interrompere il processo voi stessi, dato che Ctrl+C non lo fermerà per voi:

caddy stop

Oppure usate l'endpoint /stop dell'API.

Ricaricamento della configurazione

Il vostro server può eseguire ricaricamenti/modifiche della configurazione senza tempi di inattività (zero-downtime).

Tutti gli endpoint API che caricano o modificano la configurazione sono sicuri e senza interruzioni.

Quando usate la riga di comando, tuttavia, potreste essere tentati di usare Ctrl+C per fermare il server e poi riavviarlo per applicare la nuova configurazione. Non fatelo: fermare e avviare il server è ortogonale alle modifiche della configurazione e comporterà tempi di inattività.

Invece, usate il comando caddy reload per una modifica della configurazione senza interruzioni:

caddy reload

Questo comando in realtà utilizza semplicemente l'API sotto il cofano. Caricherà e, se necessario, adatterà il vostro file di configurazione in JSON, quindi sostituirà gradualmente la configurazione attiva senza tempi di inattività.

Se si verificano errori nel caricamento della nuova configurazione, Caddy ripristina l'ultima configurazione funzionante.