Prejsť na obsah

Nastavenia súborov cookie

Vyberte, aké druhy súborov cookie povolíte. Svoj výber môžete kedykoľvek zmeniť cez Nastavenia súborov cookie v dolnej časti každej stránky. Vyhlásenie o ochrane osobných údajov

Nevyhnutné

Vždy zapnuté

Potrebné na prihlásenie, uchovanie košíka a zapamätanie vašich volieb. Sú vždy zapnuté.

Ktoré súbory cookie?
  • weboke_sessie, weboke_klant, weboke_remember: vaša relácia a trvalé prihlásenie
  • weboke_basket: váš košík
  • wkBtwIncl: zobrazovanie cien s DPH alebo bez DPH
  • wok_cookies: váš výber súborov cookie, 12 mesiacov

Merajú, ktorá reklama vedie k návšteve alebo objednávke, aby sme neplatili za reklamy, ktoré nič neprinášajú.

Ktoré súbory cookie?
  • Google Ads cez Google Tag Manager (_gcl_au, _gcl_aw), najviac 90 dní
  • OpenAI Ads, reklamy v ChatGPT
  • wok_aff: ktorý partner vás k nám odporučil (partnerský program), 60 dní

4,6

Krajina a jazyk

Každá krajina má vlastný web s cenami a DPH danej krajiny.

Zobraziť

Recepty: Uptime Kuma a Vaultwarden

Modul 9: Docker a docker compose · Čas čítania: 13 minút

Cieľ lekcie: Po tejto lekcii dokážete spustiť Uptime Kuma a Vaultwarden pomocou docker compose za Caddy, s https, zatvorenou registráciou, zálohou zväzkov (volumes) a pevne daným postupom aktualizácie.

Kľúčové pojmy: kontajner s reverse proxy, Caddyfile, automatické https, Uptime Kuma, Vaultwarden, DOMAIN, SIGNUPS_ALLOWED, ADMIN_TOKEN, Argon2, .env, websockety, zálohovanie zväzkov, docker compose pull, vlastná hlavička

Čo postavíme

Dve užitočné služby na vašom vlastnom serveri, každá na vlastnej subdoméne:

  • Uptime Kuma na status.example.com: monitorovací program s webovým rozhraním, ktorý sleduje vaše webové stránky, porty a certifikáty a pošle vám upozornenie, keď niečo vypadne (lekcia 8.3). Pozor: monitorovanie, ktoré beží na tom istom serveri ako to, čo sleduje, nezistí výpadok celého servera. Používajte ho preto pre svoje ostatné stránky a služby alebo ho umiestnite na druhý server.
  • Vaultwarden na kluis.example.com: ľahká, nezávislá serverová verzia, ktorá funguje s aplikáciami a rozšíreniami prehliadača od Bitwarden. Trezor hesiel je citlivý softvér: púšťajte sa doň len vtedy, ak ste ochotní ho poctivo udržiavať a zálohovať. Úplne v poriadku je aj používať správcu hesiel od poskytovateľa.

Pred ne postavíme Caddy v kontajneri: prijíma porty 80 a 443, sám si vybavuje certifikáty od Let's Encrypt (lekcie 7.3 a 7.4) a posiela prevádzku do správneho kontajnera. Uptime Kuma a Vaultwarden samy nepublikujú žiadne porty (lekcia 9.3).

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

Pred začatím

  1. Docker Engine s pluginom compose (lekcia 9.2).
  2. Dva DNS záznamy, ktoré smerujú na váš server, A a AAAA (lekcia 7.1): status.example.com a kluis.example.com.
  3. Voľné porty 80 a 443 na serveri. Ak na týchto portoch už beží systémový nginx alebo Caddy, kontajner Caddy ich nemôže použiť. Potom si vyberte: buď systémový webový server zastavíte, alebo necháte proxy na ňom a kontajnery publikujete na 127.0.0.1 (lekcia 9.3). V tomto recepte túto úlohu plní kontajner Caddy.
  4. V ufw otvorte 80/tcp, 443/tcp a pre HTTP/3 aj 443/udp (lekcia 5.2). Prísne vzaté Docker ufw obchádza, ale takto prehľad vášho firewallu zodpovedá skutočnosti.

Súbory

Všetko bude v jednom priečinku, /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:

Pred začatím si overte, ktorá verzia Vaultwarden je najnovšia (releases na GitHube), a zadajte ju do tagu. Porty publikuje iba Caddy; tie musia byť verejné. Zväzky caddy-data (certifikáty), uptime-kuma a priečinok vw-data obsahujú všetko, čo musíte uchovať.

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 pre oba názvy automaticky získa certifikát a presmeruje http na https. uptime-kuma a vaultwarden sú názvy služieb zo súboru compose: Caddy ich nájde vo vnútornej sieti. Blok header pridá do každej odpovede z status.example.com ďalšiu hlavičku; v úlohe ju použijete ako dôkaz, že váš kontajner s proxy beží. Vďaka defer sa hlavička nastaví až potom, ako služba v pozadí vráti svoju odpoveď. Ak chcete aj HSTS a ďalšie bezpečnostné hlavičky z lekcie 7.4, pridajte ich do toho istého bloku.

Bezpečné nastavenie Vaultwarden

Štyri veci rozhodujú o tom, či je trezor bezpečný, alebo nebezpečný.

Prvá: iba cez https. Webový trezor Bitwarden používa kryptografiu prehliadača a prehliadače ju sprístupňujú iba na stránkach s https. Bez https preto nefunguje správne, a to je dobre. Dokumentácia Vaultwarden odporúča pre https reverse proxy, ako je tu Caddy. Nastavte DOMAIN na úplnú https adresu.

Druhá: zatvorená registrácia. S SIGNUPS_ALLOWED: "true" si môže ktokoľvek, kto stránku nájde, vytvoriť účet na vašom serveri. Spustite teda službu, hneď si vytvorte vlastný účet (alebo účty), nastavte hodnotu na "false" a znova spustite docker compose up -d. Ak budete neskôr chcieť niekoho pridať, použite funkciu pozvánok v administračnom rozhraní.

Tretia: hashovaný administračný token. Administračné rozhranie (/admin) je chránené pomocou ADMIN_TOKEN. Nezadávajte tam čitateľné heslo, ale hash Argon2. Vytvoríte ho priamo pomocou Vaultwarden:

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

Tento riadok vložte do .env (teda VW_ADMIN_TOKEN='$argon2id$...', s jednoduchými úvodzovkami) a súbor nastavte tak, aby ho mohol čítať iba root: sudo chmod 600 .env. V súbore .env nemusíte znaky $ zdvojovať; ak hash vložíte priamo pod environment: v súbore compose, musíte (každé $ sa zmení na $$), inak sa ich Compose pokúsi doplniť ako premenné. Na /admin sa prihlasujete heslom, ktoré ste zadali, nie hashom. Pozor: nastavenia, ktoré uložíte v administračnom rozhraní, sa zapíšu do vw-data/config.json a potom majú prednosť pred premennými prostredia.

Štvrtá: záloha a obnova. Všetko je v vw-data: databáza, prílohy a kľúče. Zahrňte tento priečinok do svojej zálohy restic (lekcia 8.2) a pri databáze sa riaďte pokynmi na zálohovanie vo wiki Vaultwarden, aby ste nekopírovali napoly zapísaný súbor. Obnovu otestujte (úloha O8.2): trezor bez funkčnej zálohy je rizikom pre všetky vaše heslá.

Upozornenia medzi zariadeniami (websockety) fungujú v novších verziách Vaultwarden cez ten istý port; Caddy ich odovzdáva bez ďalšieho nastavenia.

Nastavenie Uptime Kuma

Po docker compose up -d otvorte https://status.example.com. Pri prvej návšteve vás Uptime Kuma vyzve na vytvorenie administrátorského účtu. Urobte to hneď: kým tento účet neexistuje, môže si ho vytvoriť ktokoľvek, kto stránku nájde. Ak sa tomuto riziku chcete úplne vyhnúť, najprv blok status z Caddyfile vynechajte, účet vytvorte cez SSH tunel (lekcia 2.3) a potom blok vráťte späť.

Potom pridajte monitory: HTTP monitor pre vašu webovú stránku, TCP monitor pre port, upozornenie na certifikát a kanál na upozornenia (e-mail, chatovací program alebo push služba). V nastaveniach Uptime Kuma zapnite aj dvojstupňové overenie.

Spustenie a kontrola

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

Porty má iba Caddy. Ak sa certifikát nepodarí získať, v logoch Caddy nájdete prečo: najčastejšie DNS ešte nesmeruje na server alebo port 80 nie je dostupný (lekcia 7.3).

Aktualizácia

Kontajner sa neaktualizuje cez unattended-upgrades (lekcia 4.2). Urobte z toho pravidelný termín, napríklad každé dva týždne:

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 stiahne najnovšie images v rámci zvoleného tagu (teda caddy:2 zostane vo verzii 2). Pri Vaultwarden s číslom verzie najprv po prečítaní release notes upravte tag. Pri novej hlavnej verzii si vždy prečítajte release notes: niekedy treba niečo zmeniť v nastaveniach. Pred veľkou aktualizáciou zálohujte zväzky.

Sledujte aj bezpečnostné oznámenia autorov. Zraniteľnosť vo Vaultwarden alebo v Caddy sa odstráni, iba ak si novú verziu stiahnete.

V praxi

Tento recept funguje na každom VPS s Dockerom, vo WebOké aj u iného poskytovateľa. Ide o svojpomoc: poskytovateľ vášho VPS nič vo vnútri vašich kontajnerov nespravuje. Pred prvým nastavením si vytvorte snapshot, potom môžete pokojne experimentovať.

Zhrnutie

  • Jeden súbor compose s Caddy ako kontajnerom s reverse proxy; porty 80 a 443 publikuje iba Caddy, služby žiadne.
  • Caddy automaticky vybavuje certifikáty a https a pomocou header dokáže nastaviť vlastné hlavičky.
  • Vaultwarden: https je povinné, DOMAIN na https adresu, po vytvorení vlastného účtu zatvoriť registráciu, ADMIN_TOKEN ako hash Argon2 v .env s právami 600.
  • Uptime Kuma: hneď vytvoriť administrátorský účet a zapnúť dvojstupňové overenie; monitorujte ním najmä iné servery a stránky.
  • Zálohujte zväzky a priečinok vw-data a aktualizujte pomocou docker compose pull a up -d v pravidelnom termíne.

Kvíz

1. Prečo Uptime Kuma a Vaultwarden v tomto recepte samy nepublikujú žiadne porty?



2. Prečo webový trezor Vaultwarden nefunguje správne cez obyčajné http?



3. Vytvorili ste si vlastný účet vo Vaultwarden. Aký je ďalší krok?



4. Hash Argon2 administračného tokenu vložíte priamo pod environment: v compose.yaml a dostávate varovania o neznámych premenných. Prečo?



5. Ako tieto služby aktualizujete?



Úloha

Úloha Z9.4: Preukážte, že váš kontajner beží. V úlohe si vyžiadajte svoj osobný kód a vložte ho do Caddyfile vášho kontajnera Caddy ako hlavičku X-Weboke-Cursus pre vašu subdoménu (napríklad status.<jouwdomein>). Znova načítajte Caddy a zadajte názov hostiteľa. Program načíta https://<hostnaam>/ a skontroluje, či je certifikát platný a či hlavička obsahuje presne váš kód. Okrem toho vložte výstup docker compose ps a odpovedzte, ktorá služba ako jediná publikuje porty.

Úloha Z9.4: Preukážte, že váš kontajner beží

Kliknite na "Zobraziť môj kód" a vložte hlavičku X-Weboke-Cursus s týmto kódom do svojho Caddyfile, napríklad: header { X-Weboke-Cursus "<code>" }. Zvonku nie je vidieť, či niečo beží v kontajneri, preto vložte aj výstup príkazu docker compose ps (ten neukladáme).




Čo vyplníte a čo nájdeme, neukladáme. Váš prehliadač si pamätá vaše odpovede a to, či ste úlohu splnili. Po prihlásení si v sekcii Moje kurzy uchovávame iba to, že úloha bola (takmer) správne vyriešená; aj to tam môžete odstrániť.

Ďalšie čítanie

Chvíľu strpenia…

Nastavte svoje domény

Pri každej doméne nastavte nameservery, prepojenie s hostingom a to, kto bude jej vlastníkom.

Načítavajú sa vaše domény…