Modul 9 · 9.4
Receptek: Uptime Kuma és Vaultwarden
Modul 9: Docker és docker compose · Olvasási idő: 13 perc
Tanulási cél: A lecke után Ön képes lesz az Uptime Kumát és a Vaultwardent docker compose segítségével Caddy mögött futtatni, https-sel, zárt regisztrációval, a volume-ok biztonsági mentésével és a frissítés állandó módjával.
Kulcsfogalmak: reverse proxy konténer, Caddyfile, automatikus https, Uptime Kuma, Vaultwarden, DOMAIN, SIGNUPS_ALLOWED, ADMIN_TOKEN, Argon2, .env, websocketek, volume-ok mentése, docker compose pull, saját fejléc
Mit építünk
Két hasznos szolgáltatást a saját szerverén, mindegyiket külön aldomainen:
- Uptime Kuma a(z)
status.example.comcímen: webes felülettel rendelkező felügyeleti program, amely figyeli a webhelyeit, portjait és tanúsítványait, és értesítést küld, ha valami leáll (8.3. lecke). Figyelem: az a felügyelet, amely ugyanazon a szerveren fut, mint amit figyel, nem veszi észre, ha az egész szerver leáll. Használja tehát a többi webhelyéhez és szolgáltatásához, vagy telepítse egy második szerverre. - Vaultwarden a(z)
kluis.example.comcímen: könnyű, független szerverváltozat, amely a Bitwarden alkalmazásaival és böngészőbővítményeivel működik. A jelszótároló érzékeny szoftver: csak akkor vágjon bele, ha kész rendszeresen karbantartani és menteni. Az is teljesen rendben van, ha egyszerűen egy szolgáltató jelszókezelőjét használja.
Eléjük egy konténerben futó Caddy kerül: ez fogadja a 80-as és 443-as porton érkező forgalmat, maga intézi a Let's Encrypt tanúsítványokat (7.3. és 7.4. lecke), és a forgalmat a megfelelő konténerhez továbbítja. Az Uptime Kuma és a Vaultwarden maga nem tesz közzé portot (9.3. lecke).
internet ──443──> caddy ──> uptime-kuma:3001
└─> vaultwarden:80Előfeltételek
- Docker Engine a compose bővítménnyel (9.2. lecke).
- Két DNS-rekord, amely a szerverére mutat, A és AAAA (7.1. lecke):
status.example.coméskluis.example.com. - Szabad 80-as és 443-as port a szerveren. Ha ezeken a portokon már fut a rendszer saját nginxe vagy Caddyje, a Caddy konténer nem tudja használni őket. Ilyenkor válasszon: vagy leállítja a rendszer webszerverét, vagy rábízza a proxyfeladatot, és a konténereket a(z)
127.0.0.1címen teszi közzé (9.3. lecke). Ebben a receptben a Caddy konténer végzi ezt. - Az ufw-ben nyissa meg a 80/tcp, a 443/tcp és a HTTP/3 miatt a 443/udp portot is (5.2. lecke). Szigorúan véve a Docker megkerüli az ufw-t, de így a tűzfal áttekintése megegyezik a valósággal.
A fájlok
Minden egyetlen mappába kerül: /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:Mielőtt hozzákezd, nézze meg, melyik a Vaultwarden legújabb verziója (a GitHubon lévő kiadásoknál), és írja be azt a tagbe. Csak a Caddy tesz közzé portokat, ezeknek nyilvánosnak kell lenniük. A(z) caddy-data (tanúsítványok) és uptime-kuma volume, valamint a(z) vw-data mappa tartalmaz mindent, amit meg kell őriznie.
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
}A Caddy mindkét névhez magától szerez tanúsítványt, és a http-t átirányítja https-re. A(z) uptime-kuma és a(z) vaultwarden a compose-fájlban szereplő szolgáltatásnevek: a Caddy a belső hálózaton megtalálja őket. A(z) header blokk egy további fejlécsort tesz a(z) status.example.com minden válaszába; ezt használja majd a feladatban annak bizonyítására, hogy az Ön proxykonténere fut. A(z) defer hatására a fejléc azután kerül beállításra, hogy a háttérszolgáltatás megadta a válaszát. Ha a HSTS-t és a 7.4. lecke többi biztonsági fejlécét is szeretné, tegye őket ugyanebbe a blokkba.
A Vaultwarden biztonságos beállítása
Négy dolog dönti el, hogy biztonságos vagy veszélyes lesz-e a jelszótároló.
Egy: csak https-en keresztül. A Bitwarden webes tárolója a böngésző kriptográfiáját használja, a böngészők pedig ezt csak https-oldalakon teszik elérhetővé. Https nélkül tehát nem működik rendesen, és ez így van jól. A Vaultwarden dokumentációja a https-hez reverse proxyt javasol, mint itt a Caddyt. Állítsa a(z) DOMAIN értékét a teljes https-címre.
Kettő: zárt regisztráció. A(z) SIGNUPS_ALLOWED: "true" beállítással bárki, aki megtalálja az oldalt, fiókot hozhat létre az Ön szerverén. Indítsa el tehát, hozza létre azonnal a saját fiókjá(ka)t, állítsa az értéket "false" értékre, és futtassa újra a(z) docker compose up -d parancsot. Ha később valakit hozzá szeretne adni, használja a kezelőfelület meghívó funkcióját.
Három: hash-elt kezelői token. A kezelőfelületet (/admin) a(z) ADMIN_TOKEN védi. Ne olvasható jelszót írjon bele, hanem egy Argon2-hasht. Ezt magával a Vaultwardennel állíthatja elő:
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$...'Ezt a sort tegye a(z) .env fájlba (vagyis VW_ADMIN_TOKEN='$argon2id$...', egyszeres idézőjelekkel), és tegye a fájlt csak a root számára olvashatóvá: sudo chmod 600 .env. Egy .env fájlban nem kell megduplázni a(z) $ karaktereket; ha viszont a hasht közvetlenül a compose-fájlba, a(z) environment: alá írja, akkor igen (minden $ helyére $$ kerül), különben a Compose változóként próbálja kitölteni őket. A(z) /admin oldalra a begépelt jelszóval jelentkezik be, nem a hash-sel. Figyelem: a kezelőfelületen mentett beállítások a(z) vw-data/config.json fájlba kerülnek, és ezután elsőbbséget élveznek a környezeti változókkal szemben.
Négy: mentés és visszaállítás. Minden a(z) vw-data mappában van: az adatbázis, a mellékletek és a kulcsok. Vegye bele ezt a mappát a restic-mentésbe (8.2. lecke), az adatbázishoz pedig kövesse a Vaultwarden-wiki mentési útmutatását, hogy ne félig megírt fájlt másoljon. Tesztelje a visszaállítást (O8.2 feladat): egy működő mentés nélküli jelszótároló az összes jelszavát veszélyezteti.
Az eszközök közötti értesítések (websocketek) a Vaultwarden újabb verzióiban ugyanazon a porton működnek; a Caddy külön beállítás nélkül továbbítja őket.
Az Uptime Kuma beállítása
A(z) docker compose up -d után nyissa meg a(z) https://status.example.com címet. Az első látogatáskor az Uptime Kuma kéri, hogy hozzon létre egy rendszergazdai fiókot. Tegye ezt meg azonnal: amíg ez a fiók nem létezik, bárki létrehozhatja, aki megtalálja az oldalt. Ha ezt a kockázatot egyáltalán nem szeretné vállalni, először hagyja ki a(z) status blokkot a Caddyfile-ból, hozza létre a fiókot egy SSH-alagúton keresztül (2.3. lecke), majd tegye vissza a blokkot.
Ezután vegyen fel monitorokat: egy HTTP-monitort a webhelyéhez, egy TCP-monitort egy porthoz, egy tanúsítványfigyelmeztetést és egy értesítési csatornát (e-mail, csevegőprogram vagy push-szolgáltatás). Kapcsolja be a kétlépcsős azonosítást is az Uptime Kuma beállításaiban.
Indítás és ellenőrzés
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-opdrachtCsak a Caddynek vannak portjai. Ha a tanúsítvány nem jön létre, a Caddy naplóiban megtalálja az okát: többnyire a DNS még nem mutat a szerverre, vagy a 80-as port nem érhető el (7.3. lecke).
Frissítés
A konténereket az unattended-upgrades nem frissíti (4.2. lecke). Jelöljön ki rá állandó időpontot, például kéthetente:
anna@web1:/srv/diensten$ sudo docker compose pull
anna@web1:/srv/diensten$ sudo docker compose up -d
anna@web1:/srv/diensten$ sudo docker image pruneA(z) pull a választott tagen belül tölti le a legújabb image-eket (így a(z) caddy:2 a 2-es verzión belül marad). A verziószámmal megadott Vaultwardennél előbb a kiadási megjegyzések elolvasása után módosítsa a taget. Új főverziónál mindig olvassa el a kiadási megjegyzéseket: néha a beállításain is változtatni kell. Nagyobb frissítés előtt készítsen mentést a volume-okról.
Kövesse a fejlesztők biztonsági közleményeit is. A Vaultwarden vagy a Caddy sérülékenysége csak akkor szűnik meg, ha Ön letölti az új verziót.
A gyakorlatban
Ez a recept bármely Dockert futtató VPS-en működik, a WebOkénál vagy más szolgáltatónál. Önkiszolgáló megoldás: a VPS szolgáltatója semmit sem kezel a konténerein belül. Az első telepítés előtt készítsen pillanatképet (snapshotot), így nyugodtan kísérletezhet.
Összefoglalás
- Egyetlen compose-fájl, a Caddy reverse proxy konténerként; csak a Caddy tesz közzé portot (80 és 443), a szolgáltatások semmit.
- A Caddy automatikusan intézi a tanúsítványokat és a https-t, és a(z)
headersegítségével saját fejlécsorokat is beállíthat. - Vaultwarden: kötelező a https, a(z)
DOMAINa https-címre mutat, a saját fiók után zárt regisztráció, a(z)ADMIN_TOKENArgon2-hashként egy 600-as jogosultságú.envfájlban. - Uptime Kuma: azonnal hozza létre a rendszergazdai fiókot, és kapcsolja be a kétlépcsős azonosítást; elsősorban más szervereket és webhelyeket figyeljen vele.
- Mentse a volume-okat és a(z)
vw-datamappát, és frissítsen a(z)docker compose pullés a(z)up -dparanccsal egy állandó időpontban.
Kvíz
Feladat
Feladat Z9.4: Bizonyítsa, hogy a konténere fut. Kérje le a feladatban a személyes kódját, és írja be a Caddy konténere Caddyfile-jába X-Weboke-Cursus fejlécként az egyik saját aldomainjéhez (például status.<jouwdomein>). Töltse újra a Caddyt, és adja meg a hosztnevet. A program lekéri a(z) https://<hostnaam>/ címet, és ellenőrzi, hogy a tanúsítvány érvényes-e, és a fejléc pontosan az Ön kódját tartalmazza-e. Emellett illessze be a(z) docker compose ps kimenetét, és válaszolja meg, melyik szolgáltatás az egyetlen, amely portokat tesz közzé.
További olvasnivaló
- Jelszókezelő és passkey-k: így intézheti biztonságosan a bejelentkezéseit
- Uptime Kuma (telepítés Dockerrel): 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-dokumentáció, header: https://caddyserver.com/docs/caddyfile/directives/header
