Salt la conținut

Setări cookie-uri

Alegeți pentru fiecare tip ce cookie-uri permiteți. Puteți modifica oricând alegerea prin Setări cookie-uri, în partea de jos a fiecărei pagini. Declarație de confidențialitate

Necesare

Mereu active

Necesare pentru autentificare, pentru păstrarea coșului și pentru a vă reține alegerile. Acestea sunt mereu active.

Ce cookie-uri?
  • weboke_sessie, weboke_klant, weboke_remember: sesiunea și menținerea autentificării
  • weboke_basket: coșul de cumpărături
  • wkBtwIncl: afișarea prețurilor cu sau fără TVA
  • wok_cookies: alegerea privind cookie-urile, 12 luni

Măsoară ce reclamă duce la o vizită sau o comandă, ca să nu plătim pentru reclame care nu aduc nimic.

Ce cookie-uri?
  • Google Ads prin Google Tag Manager (_gcl_au, _gcl_aw), până la 90 de zile
  • OpenAI Ads, reclame în ChatGPT
  • wok_aff: prin ce partener ați ajuns la noi (program de afiliere), 60 de zile

4,6

Țară și limbă

Fiecare țară are propriul site, cu prețurile și TVA-ul pentru țara respectivă.

Vedeți

Rețete: Uptime Kuma și Vaultwarden

Modulul 9: Docker și docker compose · Timp de citire: 13 minute

Obiectivul lecției: După această lecție veți putea rula Uptime Kuma și Vaultwarden cu docker compose în spatele Caddy, cu https, înregistrare închisă, backup pentru volume și o metodă fixă de actualizare.

Noțiuni cheie: container reverse proxy, Caddyfile, https automat, Uptime Kuma, Vaultwarden, DOMAIN, SIGNUPS_ALLOWED, ADMIN_TOKEN, Argon2, .env, websockets, backup pentru volume, docker compose pull, antet propriu

Ce construim

Două servicii utile pe propriul dumneavoastră server, fiecare pe un subdomeniu propriu:

  • Uptime Kuma pe status.example.com: un program de monitorizare cu interfață web care urmărește site-urile, porturile și certificatele dumneavoastră și vă trimite o notificare când ceva cade (lecția 8.3). Atenție: o monitorizare care rulează pe același server ca ceea ce monitorizează nu observă când întregul server cade. Folosiți-o deci pentru celelalte site-uri și servicii ale dumneavoastră sau instalați-o pe un al doilea server.
  • Vaultwarden pe kluis.example.com: o versiune de server ușoară și independentă, care funcționează cu aplicațiile și extensiile de browser Bitwarden. Un seif de parole este un software sensibil: faceți acest lucru doar dacă sunteți dispus să îl întrețineți bine și să îi faceți backup. Este de asemenea perfect în regulă să folosiți pur și simplu managerul de parole al unui furnizor.

În fața lor punem Caddy într-un container: acesta preia porturile 80 și 443, se ocupă singur de certificatele Let's Encrypt (lecțiile 7.3 și 7.4) și trimite traficul mai departe către containerul potrivit. Uptime Kuma și Vaultwarden nu publică ele însele porturi (lecția 9.3).

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

Înainte de a începe

  1. Docker Engine cu plug-in-ul compose (lecția 9.2).
  2. Două înregistrări DNS care indică spre serverul dumneavoastră, A și AAAA (lecția 7.1): status.example.com și kluis.example.com.
  3. Porturile 80 și 443 libere pe server. Dacă pe aceste porturi rulează deja un nginx sau un Caddy al sistemului, containerul Caddy nu le poate folosi. Alegeți atunci: fie opriți serverul web al sistemului, fie îl lăsați pe acesta să facă munca de proxy și publicați containerele pe 127.0.0.1 (lecția 9.3). În această rețetă se ocupă containerul Caddy.
  4. În ufw deschideți 80/tcp, 443/tcp și, pentru HTTP/3, și 443/udp (lecția 5.2). Strict vorbind, Docker ocolește ufw, dar așa prezentarea firewall-ului dumneavoastră corespunde realității.

Fișierele

Totul se află într-un singur director, /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:

Înainte de a începe, verificați care este cea mai nouă versiune Vaultwarden (versiunile publicate pe GitHub) și treceți-o în tag. Doar Caddy publică porturi; acestea trebuie să fie publice. Volumele caddy-data (certificate), uptime-kuma și directorul vw-data conțin tot ce trebuie să păstrați.

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 obține automat un certificat pentru ambele nume și redirecționează http către https. uptime-kuma și vaultwarden sunt numele serviciilor din fișierul compose: Caddy le găsește în rețeaua internă. Blocul header adaugă un antet suplimentar în fiecare răspuns de la status.example.com; îl folosiți în exercițiu ca dovadă că rulează containerul dumneavoastră proxy. Cu defer, antetul este setat după ce serviciul din spate și-a dat răspunsul. Dacă doriți și HSTS și celelalte antete de securitate din lecția 7.4, puneți-le în același bloc.

Configurarea sigură a Vaultwarden

Patru lucruri fac diferența între un seif sigur și unul periculos.

Unu: doar prin https. Seiful web Bitwarden folosește criptografia browserului, iar browserele o pun la dispoziție doar pe paginile https. Fără https nu funcționează deci corect, și e bine că este așa. Documentația Vaultwarden recomandă un reverse proxy pentru https, cum este Caddy aici. Setați DOMAIN la adresa https completă.

Doi: înregistrarea închisă. Cu SIGNUPS_ALLOWED: "true", oricine găsește pagina poate crea un cont pe serverul dumneavoastră. Porniți deci serviciul, creați imediat propriul cont (propriile conturi), setați valoarea la "false" și rulați din nou docker compose up -d. Dacă doriți mai târziu să adăugați pe cineva, folosiți funcția de invitație din pagina de administrare.

Trei: un token de administrare hash-uit. Pagina de administrare (/admin) este protejată cu ADMIN_TOKEN. Nu puneți acolo o parolă lizibilă, ci un hash Argon2. Îl generați cu Vaultwarden însuși:

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$...'

Puneți acel rând în .env (adică VW_ADMIN_TOKEN='$argon2id$...', cu ghilimele simple) și faceți fișierul lizibil doar pentru root: sudo chmod 600 .env. Într-un fișier .env nu trebuie să dublați caracterele $; dacă puneți hash-ul direct sub environment: în fișierul compose, atunci da (fiecare $ devine $$), altfel Compose încearcă să le completeze ca variabile. Autentificarea pe /admin se face cu parola pe care ați tastat-o, nu cu hash-ul. Atenție: setările pe care le salvați în pagina de administrare ajung în vw-data/config.json și au apoi prioritate față de variabilele de mediu.

Patru: backup și restaurare. Totul se află în vw-data: baza de date, atașamentele și cheile. Includeți acest director în backupul restic (lecția 8.2) și, pentru baza de date, urmați instrucțiunile de backup din wiki-ul Vaultwarden, ca să nu copiați un fișier scris pe jumătate. Testați restaurarea (exercițiul O8.2): un seif fără un backup funcțional este un risc pentru toate parolele dumneavoastră.

Notificările între dispozitive (websockets) funcționează în versiunile recente ale Vaultwarden prin același port; Caddy le transmite fără nicio setare suplimentară.

Configurarea Uptime Kuma

După docker compose up -d deschideți https://status.example.com. La prima vizită, Uptime Kuma vă cere să creați un cont de administrator. Faceți acest lucru imediat: cât timp acel cont nu există, oricine găsește pagina îl poate crea. Dacă nu doriți deloc acest risc, scoateți mai întâi blocul status din Caddyfile, creați contul printr-un tunel SSH (lecția 2.3) și apoi puneți blocul înapoi.

Apoi adăugați monitoare: un monitor HTTP pentru site-ul dumneavoastră, un monitor TCP pentru un port, o avertizare pentru certificate și un canal de notificare (e-mail, un program de chat sau un serviciu push). Activați de asemenea autentificarea în doi pași în setările Uptime Kuma.

Pornire și 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

Doar Caddy are porturi. Dacă certificatul nu reușește, în jurnalele Caddy scrie de ce: de obicei DNS-ul nu indică încă spre server sau portul 80 nu este accesibil (lecția 7.3).

Actualizare

Un container nu este actualizat de unattended-upgrades (lecția 4.2). Stabiliți un moment fix, de exemplu la fiecare două săptămâni:

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 descarcă cele mai noi imagini în cadrul tagului ales (deci caddy:2 rămâne în cadrul versiunii 2). Pentru Vaultwarden cu număr de versiune, modificați mai întâi tagul, după ce ați citit notele de versiune. La o nouă versiune majoră citiți întotdeauna notele de versiune: uneori trebuie schimbat ceva în setările dumneavoastră. Înainte de o actualizare mare, faceți un backup al volumelor.

Urmăriți și anunțurile de securitate ale dezvoltatorilor. O vulnerabilitate în Vaultwarden sau Caddy este remediată doar dacă descărcați dumneavoastră noua versiune.

În practică

Această rețetă funcționează pe orice VPS cu Docker, la WebOké sau la alt furnizor. Este autoajutorare: furnizorul VPS-ului dumneavoastră nu administrează nimic în interiorul containerelor dumneavoastră. Faceți un snapshot înainte de prima configurare, astfel puteți experimenta liniștit.

Rezumat

  • Un singur fișier compose cu Caddy drept container reverse proxy; doar Caddy publică porturile 80 și 443, serviciile nimic.
  • Caddy se ocupă automat de certificate și https și poate seta antete proprii cu header.
  • Vaultwarden: https obligatoriu, DOMAIN la adresa https, înregistrarea închisă după crearea propriului cont, ADMIN_TOKEN ca hash Argon2 într-un .env cu permisiuni 600.
  • Uptime Kuma: creați imediat contul de administrator și activați autentificarea în doi pași; monitorizați cu el mai ales alte servere și site-uri.
  • Faceți backup pentru volume și pentru directorul vw-data și actualizați cu docker compose pull și up -d la un moment fix.

Test (quiz)

1. De ce nu publică Uptime Kuma și Vaultwarden ele însele porturi în această rețetă?



2. De ce nu funcționează corect seiful web Vaultwarden prin http simplu?



3. Ați creat propriul cont Vaultwarden. Care este pasul următor?



4. Puneți hash-ul Argon2 al tokenului de administrare direct sub environment: în compose.yaml și primiți avertismente despre variabile necunoscute. De ce?



5. Cum actualizați aceste servicii?



Exercițiu

Exercițiul Z9.4: Dovediți că containerul dumneavoastră rulează. Obțineți în exercițiu codul dumneavoastră personal și puneți-l în Caddyfile-ul containerului Caddy ca antet X-Weboke-Cursus pentru un subdomeniu al dumneavoastră (de exemplu status.<jouwdomein>). Reîncărcați Caddy și completați numele de gazdă. Programul descarcă https://<hostnaam>/ și verifică dacă certificatul este valid și dacă antetul conține exact codul dumneavoastră. În plus, lipiți rezultatul comenzii docker compose ps și răspundeți care serviciu este singurul care publică porturi.

Exercițiul Z9.4: Dovediți că containerul dumneavoastră rulează

Faceți clic pe "Afișați codul meu" și adăugați antetul X-Weboke-Cursus cu acel cod în Caddyfile, de exemplu: header { X-Weboke-Cursus "<code>" }. Din exterior nu se poate vedea dacă ceva rulează într-un container; de aceea lipiți și rezultatul comenzii docker compose ps (nu îl păstrăm).




Ceea ce completați și ceea ce găsim nu se salvează. Browserul dumneavoastră reține răspunsurile și dacă ați rezolvat exercițiul. Dacă sunteți autentificat, păstrăm în Cursurile mele doar faptul că exercițiul a fost (aproape) corect; și de acolo îl puteți șterge.

Lecturi suplimentare

Un moment…

Configurați domeniile

Stabiliți pentru fiecare domeniu nameserverele, legătura cu hostingul și cine devine titularul.

Se încarcă domeniile…