Modul 9 · 9.4
Opskrifter: Uptime Kuma og Vaultwarden
Modul 9: Docker og docker compose · Læsetid: 13 minutter
Læringsmål: Efter denne lektion kan du køre Uptime Kuma og Vaultwarden med docker compose bag Caddy, med https, lukket registrering, backup af dine volumes og en fast måde at opdatere på.
Centrale begreber: reverse proxy-container, Caddyfile, automatisk https, Uptime Kuma, Vaultwarden, DOMAIN, SIGNUPS_ALLOWED, ADMIN_TOKEN, Argon2, .env, websockets, backup af volumes, docker compose pull, egen header
Hvad vi bygger
To praktiske tjenester på din egen server, hver på sit eget subdomæne:
- Uptime Kuma på
status.example.com: et overvågningsprogram med en webgrænseflade, der holder øje med dine websites, porte og certifikater og sender dig en besked, hvis noget falder ud (lektion 8.3). Bemærk: en overvågning, der kører på samme server som det, den overvåger, opdager ikke, hvis hele serveren falder ud. Brug den derfor til dine andre sites og tjenester, eller sæt den op på en anden server. - Vaultwarden på
kluis.example.com: en let, uafhængig serverversion, der fungerer med Bitwardens apps og browserudvidelser. En adgangskodeboks er følsom software: gør det kun, hvis du er villig til at holde den ordentligt opdateret og tage backup af den. Det er også helt fint bare at bruge en adgangskodeadministrator fra en udbyder.
Foran dem sætter vi Caddy i en container: den tager imod på port 80 og 443, klarer selv certifikaterne fra Let's Encrypt (lektion 7.3 og 7.4) og sender trafikken videre til den rigtige container. Uptime Kuma og Vaultwarden publicerer ingen porte selv (lektion 9.3).
internet ──443──> caddy ──> uptime-kuma:3001
└─> vaultwarden:80Før du går i gang
- Docker Engine med compose-pluginnet (lektion 9.2).
- To DNS-records, der peger på din server, A og AAAA (lektion 7.1):
status.example.comogkluis.example.com. - Port 80 og 443 ledige på serveren. Kører der allerede en nginx eller Caddy fra systemet på de porte, kan Caddy-containeren ikke bruge dem. Så skal du vælge: enten stopper du systemets webserver, eller også lader du den stå for proxyarbejdet og publicerer containerne på
127.0.0.1(lektion 9.3). I denne opskrift er det Caddy-containeren, der gør det. - I ufw: åbn 80/tcp, 443/tcp og for HTTP/3 også 443/udp (lektion 5.2). Strengt taget går Docker uden om ufw, men på den måde stemmer dit firewalloverblik med virkeligheden.
Filerne
Alt ligger i én mappe, /srv/diensten/:
/srv/diensten/
├── compose.yaml
├── Caddyfile
└── .envcompose.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:Tjek, før du begynder, hvilken version af Vaultwarden der er den nyeste (udgivelserne på GitHub), og sæt den i tagget. Kun Caddy publicerer porte, og de skal være offentlige. Volumes caddy-data (certifikater), uptime-kuma og mappen vw-data indeholder alt det, du skal gemme.
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 henter automatisk et certifikat til begge navne og sender http videre til https. uptime-kuma og vaultwarden er servicenavnene fra compose-filen: Caddy finder dem på det interne netværk. header-blokken sætter en ekstra headerlinje i hvert svar fra status.example.com. Den bruger du i opgaven som bevis på, at din proxy-container kører. Med defer bliver headeren sat, efter at den bagvedliggende tjeneste har givet sit svar. Vil du også have HSTS og de andre sikkerhedsheaders fra lektion 7.4, så sæt dem i samme blok.
Sæt Vaultwarden sikkert op
Fire ting gør forskellen mellem en sikker og en farlig boks.
Et: kun via https. Bitwardens webboks bruger browserens kryptografi, og browsere giver kun adgang til den på https-sider. Uden https virker det altså ikke ordentligt, og det er kun godt. Vaultwarden-dokumentationen anbefaler en reverse proxy til https, som Caddy her. Sæt DOMAIN til den fulde https-adresse.
To: luk registreringen. Med SIGNUPS_ALLOWED: "true" kan alle, der finder siden, oprette en konto på din server. Start derfor, opret straks din egen konto eller dine egne konti, sæt værdien til "false", og kør docker compose up -d igen. Vil du senere tilføje nogen, så brug invitationsfunktionen i administrationssiden.
Tre: et hashet administrationstoken. Administrationssiden (/admin) er beskyttet med ADMIN_TOKEN. Sæt ikke en læsbar adgangskode ind der, men en Argon2-hash. Den laver du med Vaultwarden selv:
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$...'Sæt den linje i .env (altså VW_ADMIN_TOKEN='$argon2id$...', med enkelte anførselstegn), og gør filen læsbar kun for root: sudo chmod 600 .env. I en .env-fil behøver du ikke fordoble $-tegnene. Sætter du hashen direkte under environment: i compose-filen, skal du derimod (hvert $ bliver til $$), ellers prøver Compose at udfylde dem som variabler. Du logger ind på /admin med den adgangskode, du skrev, ikke med hashen. Bemærk: indstillinger, du gemmer i administrationssiden, havner i vw-data/config.json og går så forud for miljøvariablerne.
Fire: backup og gendannelse. Alt ligger i vw-data: databasen, vedhæftede filer og nøgler. Tag den mappe med i din restic-backup (lektion 8.2), og følg backupanvisningerne for databasen i Vaultwarden-wikien, så du ikke kopierer en halvt skrevet fil. Test gendannelsen (opgave O8.2): en boks uden fungerende backup er en risiko for alle dine adgangskoder.
Notifikationer mellem enheder (websockets) går i nyere versioner af Vaultwarden over samme port. Caddy sender dem videre uden ekstra indstillinger.
Sæt Uptime Kuma op
Efter docker compose up -d åbner du https://status.example.com. Ved første besøg beder Uptime Kuma dig oprette en administratorkonto. Gør det med det samme: så længe den konto ikke findes, kan alle, der finder siden, oprette den. Vil du slet ikke tage den risiko, så fjern først status-blokken fra Caddyfile, opret kontoen via en SSH-tunnel (lektion 2.3), og sæt blokken tilbage bagefter.
Derefter tilføjer du monitorer: en HTTP-monitor til dit website, en TCP-monitor til en port, en certifikatadvarsel og en notifikationskanal (mail, et chatprogram eller en pushtjeneste). Slå også totrinsbekræftelse til i Uptime Kumas indstillinger.
Start og kontrollér
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-opdrachtKun Caddy har porte. Lykkes certifikatet ikke, står der i Caddys logs hvorfor: som regel peger DNS endnu ikke på serveren, eller port 80 kan ikke nås (lektion 7.3).
Opdatering
En container bliver ikke opdateret af unattended-upgrades (lektion 4.2). Gør det til et fast tidspunkt, for eksempel hver anden uge:
anna@web1:/srv/diensten$ sudo docker compose pull
anna@web1:/srv/diensten$ sudo docker compose up -d
anna@web1:/srv/diensten$ sudo docker image prunepull henter de nyeste images inden for det tag, du har valgt (så caddy:2 bliver inden for version 2). Til Vaultwarden med et versionsnummer ændrer du først tagget, når du har læst release notes. Læs altid release notes ved en ny hovedversion: nogle gange skal der ændres noget i dine indstillinger. Tag backup af dine volumes før en stor opdatering.
Følg også udviklernes sikkerhedsmeddelelser. En sårbarhed i Vaultwarden eller Caddy bliver kun rettet, hvis du selv henter den nye version.
I praksis
Denne opskrift virker på enhver VPS med Docker, hos WebOké eller hos en anden udbyder. Det er selvhjælp: udbyderen af din VPS administrerer intet inde i dine containere. Tag et snapshot, før du sætter det op første gang, så kan du eksperimentere med ro i maven.
Opsummering
- Én compose-fil med Caddy som reverse proxy-container. Kun Caddy publicerer port 80 og 443, tjenesterne intet.
- Caddy klarer certifikater og https automatisk og kan sætte egne headerlinjer med
header. - Vaultwarden: https er et must,
DOMAINpå https-adressen, registrering lukket efter din egen konto,ADMIN_TOKENsom Argon2-hash i en.envmed rettigheder 600. - Uptime Kuma: opret administratorkontoen med det samme og slå totrinsbekræftelse til. Overvåg især andre servere og sites med den.
- Tag backup af dine volumes og mappen
vw-data, og opdater meddocker compose pullogup -dpå et fast tidspunkt.
Quiz
Opgave
Opgave Z9.4: Bevis at din container kører. Hent din personlige kode i opgaven, og sæt den i Caddyfile for din Caddy-container som headeren X-Weboke-Cursus for et af dine subdomæner (som status.<jouwdomein>). Genindlæs Caddy, og udfyld værtsnavnet. Programmet henter https://<hostnaam>/ og kontrollerer, at certifikatet er gyldigt, og at headeren indeholder præcis din kode. Indsæt desuden outputtet fra docker compose ps, og svar på, hvilken tjeneste der som den eneste publicerer porte.
Læs mere
- Adgangskodeadministrator og passkeys: sådan sikrer du dit login
- Uptime Kuma (installation med Docker): https://github.com/louislam/uptime-kuma
- Vaultwarden-wiki, Using Docker Compose: https://github.com/dani-garcia/vaultwarden/wiki/Using-Docker-Compose
- Vaultwarden-wiki, Enabling admin page: https://github.com/dani-garcia/vaultwarden/wiki/Enabling-admin-page
- Vaultwarden-wiki, Enabling HTTPS: https://github.com/dani-garcia/vaultwarden/wiki/Enabling-HTTPS
- Caddy-dokumentation, header: https://caddyserver.com/docs/caddyfile/directives/header
- VPS: fra første login til sikker server 7.1: Uptime Kuma: overvåg dine sites og din server
- VPS: fra første login til sikker server 7.2: Vaultwarden: din egen adgangskodeboks
- Adgangskodeadministrator i praksis 1.4: Alle kendte password managers sammenlignet: land, funktioner, anmeldelser og scores
- Gratis kursus Sikker online for virksomheder 2.2: Vælg og brug en adgangskodeadministrator
