Modul 9 · 9.4
Slovenčina
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:80Pred začatím
- Docker Engine s pluginom compose (lekcia 9.2).
- Dva DNS záznamy, ktoré smerujú na váš server, A a AAAA (lekcia 7.1):
status.example.comakluis.example.com. - 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. - 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
└── .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: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-opdrachtPorty 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 prunepull 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
headerdokáže nastaviť vlastné hlavičky. - Vaultwarden: https je povinné,
DOMAINna https adresu, po vytvorení vlastného účtu zatvoriť registráciu,ADMIN_TOKENako hash Argon2 v.envs 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-dataa aktualizujte pomocoudocker compose pullaup -dv pravidelnom termíne.
Kvíz
Ú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.
Ďalšie čítanie
- Správca hesiel a prístupové kľúče (passkeys): takto si bezpečne zabezpečíte prihlasovanie
- Uptime Kuma (inštalácia s Dockerom): https://github.com/louislam/uptime-kuma
- Wiki Vaultwarden, Using Docker Compose: https://github.com/dani-garcia/vaultwarden/wiki/Using-Docker-Compose
- Wiki Vaultwarden, Enabling admin page: https://github.com/dani-garcia/vaultwarden/wiki/Enabling-admin-page
- Wiki Vaultwarden, Enabling HTTPS: https://github.com/dani-garcia/vaultwarden/wiki/Enabling-HTTPS
- Dokumentácia Caddy, header: https://caddyserver.com/docs/caddyfile/directives/header
