Vai al contenuto

Impostazioni cookie

Scelga per ogni tipo quali cookie consente. Può modificare la sua scelta in qualsiasi momento tramite Impostazioni cookie in fondo a ogni pagina. Informativa sulla privacy

Necessari

Sempre attivi

Servono per accedere, conservare il carrello e ricordare le sue scelte. Sono sempre attivi.

Quali cookie?
  • weboke_sessie, weboke_klant, weboke_remember: la sua sessione e la permanenza dell'accesso
  • weboke_basket: il suo carrello
  • wkBtwIncl: visualizzazione dei prezzi con o senza IVA
  • wok_cookies: la sua scelta sui cookie, 12 mesi

Misurano quale annuncio porta a una visita o a un ordine, così non paghiamo annunci che non funzionano.

Quali cookie?
  • Google Ads tramite Google Tag Manager (_gcl_au, _gcl_aw), fino a 90 giorni
  • OpenAI Ads, annunci in ChatGPT
  • wok_aff: tramite quale partner è arrivato da noi (programma di affiliazione), 60 giorni

4,6

Paese e lingua

Ogni paese ha il suo sito, con i prezzi e l'IVA di quel paese.

Vedi

Ricette: Uptime Kuma e Vaultwarden

Modulo 9: Docker e docker compose · Tempo di lettura: 13 minuti

Obiettivo della lezione: Dopo questa lezione Lei sarà in grado di eseguire Uptime Kuma e Vaultwarden con docker compose dietro Caddy, con https, registrazione chiusa, backup dei volumi e una procedura fissa di aggiornamento.

Concetti chiave: container reverse proxy, Caddyfile, https automatico, Uptime Kuma, Vaultwarden, DOMAIN, SIGNUPS_ALLOWED, ADMIN_TOKEN, Argon2, .env, websocket, backup dei volumi, docker compose pull, header personalizzato

Che cosa costruiamo

Due servizi utili sul Suo server, ciascuno su un proprio sottodominio:

  • Uptime Kuma su status.example.com: un programma di monitoraggio con interfaccia web che tiene d'occhio i Suoi siti web, le porte e i certificati e Le invia una notifica quando qualcosa smette di funzionare (lezione 8.3). Attenzione: un monitoraggio che gira sullo stesso server che sorveglia non si accorge se l'intero server va giù. Lo usi quindi per gli altri Suoi siti e servizi, oppure lo installi su un secondo server.
  • Vaultwarden su kluis.example.com: una versione server leggera e indipendente che funziona con le app e le estensioni per browser di Bitwarden. Una cassaforte per password è un software delicato: lo faccia solo se è disposto a mantenerla con cura e a farne il backup. Va benissimo anche usare semplicemente un gestore di password di un fornitore.

Davanti mettiamo Caddy in un container: riceve il traffico sulle porte 80 e 443, gestisce da solo i certificati di Let's Encrypt (lezioni 7.3 e 7.4) e inoltra il traffico al container giusto. Uptime Kuma e Vaultwarden non pubblicano porte proprie (lezione 9.3).

internet ──443──> caddy ──> uptime-kuma:3001
                        └─> vaultwarden:80

Prerequisiti

  1. Docker Engine con il plug-in compose (lezione 9.2).
  2. Due record DNS che puntano al Suo server, A e AAAA (lezione 7.1): status.example.com e kluis.example.com.
  3. Le porte 80 e 443 libere sul server. Se su queste porte gira già un nginx o un Caddy di sistema, il container Caddy non può usarle. In tal caso scelga: o ferma il server web di sistema, oppure lascia a lui il lavoro di proxy e pubblica i container su 127.0.0.1 (lezione 9.3). In questa ricetta se ne occupa il container Caddy.
  4. In ufw aprire 80/tcp, 443/tcp e, per HTTP/3, anche 443/udp (lezione 5.2). A rigore Docker aggira ufw, ma così la panoramica del Suo firewall corrisponde alla realtà.

I file

Tutto va in un'unica cartella, /srv/diensten/:

/srv/diensten/
├── compose.yaml
├── Caddyfile
└── .env

compose.yaml

services:
  caddy:
    image: caddy:2
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy-data:/data
      - caddy-config:/config

  uptime-kuma:
    image: louislam/uptime-kuma:2
    restart: unless-stopped
    volumes:
      - uptime-kuma:/app/data

  vaultwarden:
    image: vaultwarden/server:1.37.5
    restart: unless-stopped
    environment:
      DOMAIN: "https://kluis.example.com"
      SIGNUPS_ALLOWED: "true"
      ADMIN_TOKEN: ${VW_ADMIN_TOKEN}
    volumes:
      - ./vw-data:/data

volumes:
  caddy-data:
  caddy-config:
  uptime-kuma:

Prima di iniziare verifichi quale sia la versione più recente di Vaultwarden (le release su GitHub) e la inserisca nel tag. Solo Caddy pubblica porte, e queste devono essere pubbliche. I volumi caddy-data (certificati), uptime-kuma e la cartella vw-data contengono tutto ciò che deve conservare.

Caddyfile

{
	email beheer@example.com
}

status.example.com {
	reverse_proxy uptime-kuma:3001
	header {
		X-Weboke-Cursus "jouw-code-uit-de-opdracht"
		defer
	}
}

kluis.example.com {
	reverse_proxy vaultwarden:80
}

Caddy ottiene automaticamente un certificato per entrambi i nomi e reindirizza http verso https. uptime-kuma e vaultwarden sono i nomi dei servizi del file compose: Caddy li trova sulla rete interna. Il blocco header aggiunge un header in più a ogni risposta di status.example.com; nell'esercizio Lei lo userà come prova che il Suo container proxy è in esecuzione. Con defer l'header viene impostato dopo che il servizio retrostante ha fornito la sua risposta. Se desidera anche HSTS e gli altri header di sicurezza della lezione 7.4, li inserisca nello stesso blocco.

Configurare Vaultwarden in modo sicuro

Quattro aspetti fanno la differenza tra una cassaforte sicura e una pericolosa.

Uno: solo tramite https. La cassaforte web di Bitwarden utilizza la crittografia del browser, e i browser la rendono disponibile solo sulle pagine https. Senza https quindi non funziona bene, ed è giusto così. La documentazione di Vaultwarden consiglia un reverse proxy per https, come Caddy in questo caso. Imposti DOMAIN sull'indirizzo https completo.

Due: registrazione chiusa. Con SIGNUPS_ALLOWED: "true" chiunque trovi la pagina può creare un account sul Suo server. Avvii quindi il servizio, crei subito il Suo account (o i Suoi account), imposti il valore su "false" ed esegua di nuovo docker compose up -d. Se in seguito desidera aggiungere qualcuno, usi la funzione di invito nella pagina di amministrazione.

Tre: un token di amministrazione con hash. La pagina di amministrazione (/admin) è protetta con ADMIN_TOKEN. Non inserisca lì una password leggibile, ma un hash Argon2. Lo crea con Vaultwarden stesso:

anna@web1:/srv/diensten$ sudo docker compose exec vaultwarden /vaultwarden hash
Password:
Confirm Password:

ADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$...'

Inserisca quella riga in .env (quindi VW_ADMIN_TOKEN='$argon2id$...', con apici singoli) e renda il file leggibile solo da root: sudo chmod 600 .env. In un file .env non è necessario raddoppiare i caratteri $; se invece inserisce l'hash direttamente sotto environment: nel file compose, deve farlo (ogni $ diventa $$), altrimenti Compose cerca di interpretarli come variabili. Per accedere a /admin usi la password che ha digitato, non l'hash. Attenzione: le impostazioni che salva nella pagina di amministrazione finiscono in vw-data/config.json e hanno quindi la precedenza sulle variabili d'ambiente.

Quattro: backup e ripristino. Tutto si trova in vw-data: il database, gli allegati e le chiavi. Includa questa cartella nel Suo backup con restic (lezione 8.2) e, per il database, segua le istruzioni di backup del wiki di Vaultwarden, in modo da non copiare un file scritto a metà. Verifichi il ripristino (esercizio O8.2): una cassaforte senza un backup funzionante è un rischio per tutte le Sue password.

Le notifiche tra dispositivi (websocket) passano, nelle versioni recenti di Vaultwarden, sulla stessa porta; Caddy le inoltra senza impostazioni aggiuntive.

Configurare Uptime Kuma

Dopo docker compose up -d apra https://status.example.com. Alla prima visita Uptime Kuma Le chiede di creare un account amministratore. Lo faccia subito: finché quell'account non esiste, chiunque trovi la pagina può crearlo. Se non vuole correre affatto questo rischio, tolga prima il blocco status dal Caddyfile, crei l'account tramite un tunnel SSH (lezione 2.3) e poi rimetta il blocco.

Successivamente aggiunga i monitor: un monitor HTTP per il Suo sito web, un monitor TCP per una porta, un avviso sui certificati e un canale di notifica (e-mail, un programma di chat o un servizio push). Attivi anche la verifica in due passaggi nelle impostazioni di Uptime Kuma.

Avviare e verificare

anna@web1:/srv/diensten$ sudo docker compose up -d
anna@web1:/srv/diensten$ sudo docker compose ps
NAME                     SERVICE       STATUS          PORTS
diensten-caddy-1         caddy         Up 2 minutes    0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, ...
diensten-uptime-kuma-1   uptime-kuma   Up 2 minutes (healthy)
diensten-vaultwarden-1   vaultwarden   Up 2 minutes (healthy)
anna@web1:/srv/diensten$ sudo docker compose logs caddy | grep -i "certificate obtained"
anna@web1:~$ curl -sI https://status.example.com | grep -i x-weboke
x-weboke-cursus: jouw-code-uit-de-opdracht

Solo Caddy ha porte. Se il certificato non viene emesso, i log di Caddy ne indicano il motivo: di solito il DNS non punta ancora al server, oppure la porta 80 non è raggiungibile (lezione 7.3).

Aggiornare

Un container non viene aggiornato da unattended-upgrades (lezione 4.2). Ne faccia un appuntamento fisso, per esempio ogni due settimane:

anna@web1:/srv/diensten$ sudo docker compose pull
anna@web1:/srv/diensten$ sudo docker compose up -d
anna@web1:/srv/diensten$ sudo docker image prune

pull scarica le immagini più recenti all'interno del tag che ha scelto (quindi caddy:2 resta nella versione 2). Per Vaultwarden con un numero di versione, aggiorni prima il tag dopo aver letto le note di rilascio. In caso di una nuova versione principale legga sempre le note di rilascio: a volte occorre modificare qualcosa nelle impostazioni. Prima di un aggiornamento importante faccia un backup dei volumi.

Segua anche gli avvisi di sicurezza degli sviluppatori. Una vulnerabilità in Vaultwarden o Caddy viene risolta solo quando Lei scarica la nuova versione.

Nella pratica

Questa ricetta funziona su qualsiasi VPS con Docker, presso WebOké o presso un altro fornitore. Si tratta di fai da te: il fornitore del Suo VPS non gestisce nulla all'interno dei Suoi container. Crei uno snapshot prima della prima installazione: così potrà sperimentare in tutta tranquillità.

Riepilogo

  • Un unico file compose con Caddy come container reverse proxy; solo Caddy pubblica le porte 80 e 443, i servizi nessuna.
  • Caddy gestisce automaticamente certificati e https e con header può impostare header personalizzati.
  • Vaultwarden: https obbligatorio, DOMAIN sull'indirizzo https, registrazione chiusa dopo il Suo account, ADMIN_TOKEN come hash Argon2 in un .env con permessi 600.
  • Uptime Kuma: creare subito l'account amministratore e attivare la verifica in due passaggi; lo usi soprattutto per sorvegliare altri server e siti.
  • Faccia il backup dei volumi e della cartella vw-data, e aggiorni con docker compose pull e up -d a scadenza fissa.

Quiz

1. Perché in questa ricetta Uptime Kuma e Vaultwarden non pubblicano porte proprie?



2. Perché la cassaforte web di Vaultwarden non funziona bene con semplice http?



3. Ha creato il Suo account Vaultwarden. Qual è il passo successivo?



4. Inserisce l'hash Argon2 del token di amministrazione direttamente sotto environment: in compose.yaml e riceve avvisi su variabili sconosciute. Perché?



5. Come si aggiornano questi servizi?



Esercizio

Esercizio Z9.4: Dimostri che il Suo container è in esecuzione. Nell'esercizio recuperi il Suo codice personale e lo inserisca nel Caddyfile del Suo container Caddy come header X-Weboke-Cursus per un Suo sottodominio (come status.<jouwdomein>). Ricarichi Caddy e inserisca il nome host. Il programma recupera https://<hostnaam>/ e verifica che il certificato sia valido e che l'header contenga esattamente il Suo codice. Incolli inoltre l'output di docker compose ps e indichi quale servizio è l'unico a pubblicare porte.

Esercizio Z9.4: Dimostri che il Suo container è in esecuzione

Clicchi su "Mostra il mio codice" e inserisca nel Suo Caddyfile l'intestazione X-Weboke-Cursus con quel codice, ad esempio: header { X-Weboke-Cursus "<code>" }. Dall'esterno non si vede se qualcosa gira in un container; per questo incolla anche l'output di docker compose ps (che non conserviamo).




Quello che inserisce e quello che rileviamo non vengono salvati. Il Suo browser ricorda le Sue risposte e se ha superato l'esercizio. Se ha effettuato l'accesso, conserviamo in I miei corsi solo il fatto che l'esercizio era (quasi) corretto; anche lì può eliminarlo.

Per approfondire

Un momento…

Configuri i suoi domini

Per ogni dominio imposti i nameserver, il collegamento al suo hosting e chi ne diventa l'intestatario.

Caricamento dei suoi domini…