Moodul 9 · 9.4
Retseptid: Uptime Kuma ja Vaultwarden
Moodul 9: Docker ja docker compose · Lugemisaeg: 13 minutit
Õpieesmärk: Pärast seda õppetundi oskad käivitada Uptime Kuma ja Vaultwardeni docker compose'iga Caddy taga, koos https-i, suletud registreerimise, volume'ite varunduse ja kindla uuendamise viisiga.
Põhimõisted: pöördpuhverserveri (reverse proxy) konteiner, Caddyfile, automaatne https, Uptime Kuma, Vaultwarden, DOMAIN, SIGNUPS_ALLOWED, ADMIN_TOKEN, Argon2, .env, websocketid, volume'ite varundamine, docker compose pull, oma päis
Mida me ehitame
Kaks kasulikku teenust sinu enda serveris, kumbki oma alamdomeenil:
- Uptime Kuma aadressil
status.example.com: veebiliidesega jälgimisprogramm, mis hoiab silma peal su veebisaitidel, portidel ja sertifikaatidel ning saadab sulle teate, kui midagi maha kukub (õppetund 8.3). Pane tähele: jälgimine, mis töötab samas serveris kui see, mida ta jälgib, ei märka, kui kogu server maha kukub. Kasuta seda seega oma teiste saitide ja teenuste jaoks või pane see teise serverisse. - Vaultwarden aadressil
kluis.example.com: kerge, sõltumatu serveriversioon, mis töötab Bitwardeni rakenduste ja brauserilaiendustega. Paroolihoidla on tundlik tarkvara: tee seda ainult siis, kui oled valmis seda korralikult hooldama ja varundama. Täiesti mõistlik on kasutada ka mõne teenusepakkuja paroolihaldurit.
Nende ette paneme konteinerisse Caddy: see võtab vastu pordid 80 ja 443, hoolitseb ise Let's Encrypti sertifikaatide eest (õppetunnid 7.3 ja 7.4) ja suunab liikluse õigesse konteinerisse. Uptime Kuma ja Vaultwarden ise ei avalda ühtegi porti (õppetund 9.3).
internet ──443──> caddy ──> uptime-kuma:3001
└─> vaultwarden:80Enne alustamist
- Docker Engine koos compose'i pistikprogrammiga (õppetund 9.2).
- Kaks DNS-kirjet, mis osutavad su serverile, A ja AAAA (õppetund 7.1):
status.example.comjakluis.example.com. - Pordid 80 ja 443 serveris vabad. Kui neil portidel töötab juba süsteemi nginx või Caddy, ei saa Caddy konteiner neid kasutada. Siis vali: kas peatad süsteemi veebiserveri või lased tal puhverserveri töö ära teha ja avaldad konteinerid aadressil
127.0.0.1(õppetund 9.3). Selles retseptis teeb seda Caddy konteiner. - Ava ufw-s 80/tcp, 443/tcp ja HTTP/3 jaoks ka 443/udp (õppetund 5.2). Rangelt võttes läheb Docker ufw-st mööda, kuid nii vastab su tulemüüri ülevaade tegelikkusele.
Failid
Kõik läheb ühte kausta, /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:Enne alustamist vaata, milline Vaultwardeni versioon on uusim (releases GitHubis), ja pane see tag'i. Porte avaldab ainult Caddy; need peavad olema avalikud. Volume'id caddy-data (sertifikaadid), uptime-kuma ja kaust vw-data sisaldavad kõike, mida pead alles hoidma.
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 hangib mõlemale nimele ise sertifikaadi ja suunab http ümber https-ile. uptime-kuma ja vaultwarden on teenusenimed compose-failist: Caddy leiab need sisevõrgust. Plokk header lisab igale status.example.com vastusele lisapäise; seda kasutad ülesandes tõendina, et sinu puhverserveri konteiner töötab. Valikuga defer seatakse päis pärast seda, kui taustal olev teenus on oma vastuse andnud. Kui soovid ka HSTS-i ja teisi turvapäiseid õppetunnist 7.4, pane need samasse plokki.
Vaultwardeni turvaline seadistamine
Neli asja teevad vahe turvalise ja ohtliku hoidla vahel.
Üks: ainult https-i kaudu. Bitwardeni veebihoidla kasutab brauseri krüptograafiat ja brauserid teevad selle kättesaadavaks ainult https-lehtedel. Ilma https-ita see seega korralikult ei tööta, ja hea ongi. Vaultwardeni dokumentatsioon soovitab https-i jaoks pöördpuhverserverit, nagu siin Caddy. Sea DOMAIN täielikule https-aadressile.
Kaks: registreerimine kinni. Seadega SIGNUPS_ALLOWED: "true" saab igaüks, kes lehe leiab, sinu serverisse konto teha. Seega käivita, loo kohe oma konto(d), sea väärtuseks "false" ja käivita uuesti docker compose up -d. Kui soovid hiljem kedagi lisada, kasuta halduslehe kutsefunktsiooni.
Kolm: räsitud haldustoken. Halduslehte (/admin) kaitseb ADMIN_TOKEN. Ära pane sinna loetavat parooli, vaid Argon2-räsi. Selle teed Vaultwardeni enda abil:
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$...'Pane see rida faili .env (st VW_ADMIN_TOKEN='$argon2id$...', ühekordsete jutumärkidega) ja tee fail loetavaks ainult root'ile: sudo chmod 600 .env. Failis .env ei pea $-märke kahekordistama; kui paned räsi otse compose-failis environment: alla, siis pead (iga $ muutub $$-ks), muidu proovib Compose neid muutujatena täita. Lehele /admin logid sisse parooliga, mille sisestasid, mitte räsiga. Pane tähele: halduslehel salvestatud seaded lähevad faili vw-data/config.json ja on siis keskkonnamuutujatest ülimuslikud.
Neli: varundus ja taastamine. Kõik asub kaustas vw-data: andmebaas, manused ja võtmed. Võta see kaust oma restic-varundusse (õppetund 8.2) ja järgi andmebaasi puhul Vaultwardeni wiki varundusjuhiseid, et sa ei kopeeriks poolikult kirjutatud faili. Testi taastamist (ülesanne O8.2): hoidla ilma toimiva varunduseta on risk kõigile su paroolidele.
Seadmetevahelised teated (websocketid) töötavad Vaultwardeni uuemates versioonides sama pordi kaudu; Caddy edastab need ilma lisaseadeteta.
Uptime Kuma seadistamine
Pärast käsku docker compose up -d ava https://status.example.com. Esimesel külastusel palub Uptime Kuma sul luua administraatori konto. Tee seda kohe: seni kuni seda kontot pole, saab igaüks, kes lehe leiab, selle ise luua. Kui sa ei taha seda riski üldse võtta, jäta plokk status esialgu Caddyfile'ist välja, loo konto SSH-tunneli kaudu (õppetund 2.3) ja pane plokk siis tagasi.
Seejärel lisa monitorid: HTTP-monitor oma veebisaidile, TCP-monitor pordile, sertifikaadihoiatus ja teavituskanal (e-post, vestlusprogramm või push-teenus). Lülita Uptime Kuma seadetes sisse ka kaheastmeline kinnitamine.
Käivitamine ja kontrollimine
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-opdrachtPorte on ainult Caddyl. Kui sertifikaadi hankimine ei õnnestu, on Caddy logides kirjas, miks: enamasti ei osuta DNS veel serverile või pole port 80 kättesaadav (õppetund 7.3).
Uuendamine
unattended-upgrades ei uuenda konteinereid (õppetund 4.2). Tee sellest kindel harjumus, näiteks iga kahe nädala tagant:
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 tõmbab uusimad image'id sinu valitud tag'i piires (seega jääb caddy:2 versiooni 2 piiresse). Versiooninumbriga Vaultwardeni puhul muuda esmalt tag'i, kui oled release notes'id läbi lugenud. Uue põhiversiooni puhul loe alati release notes'e: vahel tuleb seadetes midagi muuta. Enne suurt uuendust varunda volume'id.
Jälgi ka tegijate turvateateid. Vaultwardeni või Caddy haavatavus parandatakse ainult siis, kui sa ise uue versiooni alla tõmbad.
Praktikas
See retsept töötab igas Dockeriga VPS-is, nii WebOkés kui ka mõne teise teenusepakkuja juures. See on iseabi: su VPS-i pakkuja ei halda midagi su konteinerite sees. Tee enne esimest seadistamist hetktõmmis (snapshot), siis saad rahuliku südamega katsetada.
Kokkuvõte
- Üks compose-fail, kus Caddy on pöördpuhverserveri konteiner; porte 80 ja 443 avaldab ainult Caddy, teenused mitte midagi.
- Caddy hoolitseb sertifikaatide ja https-i eest automaatselt ning saab
headerabil lisada oma päiseid. - Vaultwarden: https on kohustuslik,
DOMAINhttps-aadressile, registreerimine kinni pärast oma konto loomist,ADMIN_TOKENArgon2-räsina failis.envõigustega 600. - Uptime Kuma: loo kohe administraatori konto ja lülita sisse kaheastmeline kinnitamine; jälgi sellega peamiselt teisi servereid ja saite.
- Varunda volume'id ja kaust
vw-dataning uuenda kindlal ajal käskudegadocker compose pulljaup -d.
Test (quiz)
Ülesanne
Ülesanne Z9.4: Tõesta, et su konteiner töötab. Hangi ülesandes oma isiklik kood ja pane see oma Caddy konteineri Caddyfile'i päisena X-Weboke-Cursus mõnele oma alamdomeenile (näiteks status.<jouwdomein>). Laadi Caddy uuesti ja sisesta hostinimi. Programm laadib https://<hostnaam>/ ja kontrollib, et sertifikaat on kehtiv ja päis sisaldab täpselt sinu koodi. Lisaks kleebi käsu docker compose ps väljund ja vasta, milline teenus ainsana porte avaldab.
Loe edasi
- Paroolihaldur ja pääsuvõtmed: nii korraldad oma sisselogimise turvaliselt
- Uptime Kuma (paigaldus Dockeriga): https://github.com/louislam/uptime-kuma
- Vaultwardeni wiki, Using Docker Compose: https://github.com/dani-garcia/vaultwarden/wiki/Using-Docker-Compose
- Vaultwardeni wiki, Enabling admin page: https://github.com/dani-garcia/vaultwarden/wiki/Enabling-admin-page
- Vaultwardeni wiki, Enabling HTTPS: https://github.com/dani-garcia/vaultwarden/wiki/Enabling-HTTPS
- Caddy dokumentatsioon, header: https://caddyserver.com/docs/caddyfile/directives/header
