Gå til innholdet

Cookie-innstillinger

Velg hvilke typer cookies du tillater. Du kan når som helst endre valget via Cookie-innstillinger nederst på hver side. Personvernerklæring

Nødvendige

Alltid på

Trengs for å logge inn, beholde handlekurven og huske valgene dine. Disse er alltid på.

Hvilke cookies?
  • weboke_sessie, weboke_klant, weboke_remember: økten din og at du forblir innlogget
  • weboke_basket: handlekurven din
  • wkBtwIncl: visning av priser med eller uten mva.
  • wok_cookies: cookievalget ditt, 12 måneder

Måler hvilken annonse som fører til et besøk eller en bestilling, slik at vi ikke betaler for annonser som ikke gir noe.

Hvilke cookies?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), opptil 90 dager
  • OpenAI Ads, annonser i ChatGPT
  • wok_aff: hvilken partner som henviste deg til oss (partnerprogram), 60 dager

4,6

Land og språk

Hvert land har sin egen nettside, med priser og mva. for det landet.

Vis

Oppskrifter: Uptime Kuma og Vaultwarden

Modul 9: Docker og docker compose · Lesetid: 13 minutter

Læringsmål: Etter denne leksjonen kan du kjøre Uptime Kuma og Vaultwarden med docker compose bak Caddy, med https, stengt registrering, sikkerhetskopi av volumene og en fast måte å oppdatere på.

Nøkkelbegreper: reverse proxy-container, Caddyfile, automatisk https, Uptime Kuma, Vaultwarden, DOMAIN, SIGNUPS_ALLOWED, ADMIN_TOKEN, Argon2, .env, websockets, sikkerhetskopiere volumer, docker compose pull, egen header

Hva vi bygger

To nyttige tjenester på din egen server, hver på sitt eget underdomene:

  • Uptime Kuma på status.example.com: et overvåkingsprogram med webgrensesnitt som holder øye med nettstedene, portene og sertifikatene dine og sender deg et varsel når noe faller ut (leksjon 8.3). Merk: en overvåking som kjører på samme server som det den overvåker, merker ikke at hele serveren faller ut. Bruk den derfor til de andre nettstedene og tjenestene dine, eller sett den opp på en annen server.
  • Vaultwarden på kluis.example.com: en lett, uavhengig serverversjon som fungerer med appene og nettleserutvidelsene til Bitwarden. Et passordhvelv er sensitiv programvare: gjør dette bare hvis du er villig til å vedlikeholde og sikkerhetskopiere det skikkelig. Det er også helt greit å bruke en passordbehandler fra en leverandør.

Foran setter vi Caddy i en container: den tar imot port 80 og 443, ordner selv sertifikatene fra Let's Encrypt (leksjon 7.3 og 7.4) og sender trafikken videre til riktig container. Uptime Kuma og Vaultwarden publiserer selv ingen porter (leksjon 9.3).

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

Før du starter

  1. Docker Engine med compose-pluginen (leksjon 9.2).
  2. To DNS-poster som peker til serveren din, A og AAAA (leksjon 7.1): status.example.com og kluis.example.com.
  3. Port 80 og 443 ledige på serveren. Kjører det allerede en nginx eller Caddy fra systemet på disse portene, kan ikke Caddy-containeren bruke dem. Velg da: enten stopper du systemets webserver, eller så lar du den gjøre proxyjobben og publiserer containerne på 127.0.0.1 (leksjon 9.3). I denne oppskriften er det Caddy-containeren som gjør det.
  4. Åpne 80/tcp, 443/tcp og for HTTP/3 også 443/udp i ufw (leksjon 5.2). Strengt tatt går Docker utenom ufw, men slik stemmer brannmuroversikten din med virkeligheten.

Filene

Alt legges i én mappe, /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:

Sjekk før du begynner hvilken versjon av Vaultwarden som er den nyeste (releasene på GitHub), og sett den i taggen. Bare Caddy publiserer porter, og de må være offentlige. Volumene caddy-data (sertifikater), uptime-kuma og mappen vw-data inneholder alt du må ta vare på.

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 sertifikat for begge navnene og sender http videre til https. uptime-kuma og vaultwarden er tjenestenavnene fra compose-filen: Caddy finner dem på det interne nettverket. header-blokken legger til en ekstra headerlinje i hvert svar fra status.example.com. Den bruker du i oppgaven som bevis på at proxy-containeren din kjører. Med defer settes headeren etter at tjenesten bak har gitt sitt svar. Vil du også ha HSTS og de andre sikkerhetsheaderne fra leksjon 7.4, setter du dem i samme blokk.

Sett opp Vaultwarden sikkert

Fire ting utgjør forskjellen mellom et trygt og et farlig hvelv.

Én: bare via https. Webhvelvet til Bitwarden bruker kryptografien i nettleseren, og nettlesere gir bare tilgang til den på https-sider. Uten https fungerer det altså ikke ordentlig, og det er like greit. Vaultwarden-dokumentasjonen anbefaler en reverse proxy for https, slik som Caddy her. Sett DOMAIN til den fullstendige https-adressen.

To: stengt registrering. Med SIGNUPS_ALLOWED: "true" kan alle som finner siden, lage en konto på serveren din. Start derfor, lag kontoen(e) dine med en gang, sett verdien til "false" og kjør docker compose up -d på nytt. Vil du legge til noen senere, bruker du invitasjonsfunksjonen i administrasjonssiden.

Tre: et hashet administrasjonstoken. Administrasjonssiden (/admin) er beskyttet med ADMIN_TOKEN. Ikke sett et lesbart passord der, men en Argon2-hash. Den lager 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$...'

Sett den linjen i .env (altså VW_ADMIN_TOKEN='$argon2id$...', med enkle anførselstegn) og gjør filen lesbar bare for root: sudo chmod 600 .env. I en .env-fil trenger du ikke doble $-tegnene. Setter du hashen rett under environment: i compose-filen, må du det (hver $ blir $$), ellers prøver Compose å fylle dem inn som variabler. Du logger inn på /admin med passordet du skrev inn, ikke med hashen. Merk: innstillinger du lagrer i administrasjonssiden, havner i vw-data/config.json og går da foran miljøvariablene.

Fire: sikkerhetskopi og gjenoppretting. Alt ligger i vw-data: databasen, vedlegg og nøkler. Ta med den mappen i restic-sikkerhetskopien din (leksjon 8.2), og følg sikkerhetskopiveiledningen i Vaultwarden-wikien for databasen, slik at du ikke kopierer en halvskrevet fil. Test gjenopprettingen (oppgave O8.2): et hvelv uten fungerende sikkerhetskopi er en risiko for alle passordene dine.

Varsler mellom enheter (websockets) går i nyere versjoner av Vaultwarden over samme port. Caddy sender dem videre uten ekstra innstillinger.

Sett opp Uptime Kuma

Etter docker compose up -d åpner du https://status.example.com. Ved første besøk ber Uptime Kuma deg om å opprette en administratorkonto. Gjør det med en gang: så lenge kontoen ikke finnes, kan alle som finner siden, opprette den. Vil du unngå den risikoen helt, fjerner du først status-blokken fra Caddyfile, oppretter kontoen via en SSH-tunnel (leksjon 2.3) og setter blokken tilbake etterpå.

Deretter legger du til monitorer: en HTTP-monitor for nettstedet ditt, en TCP-monitor for en port, et sertifikatvarsel og en varslingskanal (e-post, et chatprogram eller en pushtjeneste). Slå også på tofaktorautentisering i innstillingene til Uptime Kuma.

Start og kontroller

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

Bare Caddy har porter. Lykkes ikke sertifikatet, står årsaken i loggene til Caddy: som regel peker DNS ennå ikke til serveren, eller port 80 er ikke tilgjengelig (leksjon 7.3).

Oppdatering

En container oppdateres ikke av unattended-upgrades (leksjon 4.2). Gjør det til en fast rutine, for eksempel hver andre uke:

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 henter de nyeste imagene innenfor taggen du har valgt (så caddy:2 holder seg innenfor versjon 2). For Vaultwarden med et versjonsnummer endrer du først taggen etter at du har lest release notes. Les alltid release notes ved en ny hovedversjon: noen ganger må noe i innstillingene dine endres. Ta en sikkerhetskopi av volumene før en stor oppdatering.

Følg også sikkerhetsvarslene fra utviklerne. En sårbarhet i Vaultwarden eller Caddy blir bare rettet hvis du henter den nye versjonen.

I praksis

Denne oppskriften fungerer på alle VPS-er med Docker, hos WebOké eller hos en annen leverandør. Det er selvhjelp: leverandøren av VPS-en din administrerer ingenting inne i containerne dine. Ta et øyeblikksbilde før du setter det opp første gang, så kan du eksperimentere med god samvittighet.

Sammendrag

  • Én compose-fil med Caddy som reverse proxy-container. Bare Caddy publiserer port 80 og 443, tjenestene ingenting.
  • Caddy ordner sertifikater og https automatisk og kan sette egne headerlinjer med header.
  • Vaultwarden: https er påkrevd, DOMAIN til https-adressen, stengt registrering etter at du har laget din egen konto, ADMIN_TOKEN som Argon2-hash i en .env med rettighetene 600.
  • Uptime Kuma: opprett administratorkontoen med en gang og slå på tofaktorautentisering. Bruk den helst til å overvåke andre servere og nettsteder.
  • Sikkerhetskopier volumene og mappen vw-data, og oppdater med docker compose pull og up -d til faste tider.

Quiz

1. Hvorfor publiserer ikke Uptime Kuma og Vaultwarden egne porter i denne oppskriften?



2. Hvorfor fungerer ikke webhvelvet til Vaultwarden ordentlig over vanlig http?



3. Du har opprettet din egen Vaultwarden-konto. Hva er neste steg?



4. Du setter Argon2-hashen for administrasjonstokenet rett under environment: i compose.yaml og får advarsler om ukjente variabler. Hvorfor?



5. Hvordan oppdaterer du disse tjenestene?



Oppgave

Oppgave Z9.4: Bevis at containeren din kjører. Hent den personlige koden din i oppgaven og legg den inn i Caddyfile i Caddy-containeren din som headeren X-Weboke-Cursus for et av underdomenene dine (for eksempel status.<jouwdomein>). Last inn Caddy på nytt og fyll inn vertsnavnet. Programmet henter https://<hostnaam>/ og kontrollerer at sertifikatet er gyldig og at headeren inneholder nøyaktig koden din. Lim i tillegg inn utdataene fra docker compose ps og svar på hvilken tjeneste som er den eneste som publiserer porter.

Oppgave Z9.4: Bevis at containeren din kjører

Klikk på "Vis koden min" og legg inn overskriften X-Weboke-Cursus med den koden i Caddyfile, for eksempel: header { X-Weboke-Cursus "<code>" }. Utenfra kan ingen se om noe kjører i en container. Derfor limer du også inn utdataene fra docker compose ps (de lagrer vi ikke).




Det du fyller inn, og det vi finner, lagrer vi ikke. Nettleseren din husker svarene dine og om du har bestått oppgaven. Er du logget inn, lagrer vi kun at du har (nesten) bestått oppgaven i Mine kurs; der kan du også slette det.

Les mer

Et øyeblikk …

Sett opp domenene dine

Ordne for hvert domene navnetjenerne, koblingen til hostingen din og hvem som blir innehaver.

Laster inn domenene dine…