9. modulis · 9.4
Receptes: Uptime Kuma un Vaultwarden
9. modulis: Docker un docker compose · Lasīšanas laiks: 13 min.
Mācīšanās mērķis: Pēc šīs nodarbības Jūs varēsiet palaist Uptime Kuma un Vaultwarden ar docker compose aiz Caddy, ar https, slēgtu reģistrāciju, sējumu rezerves kopijām un noteiktu atjaunināšanas kārtību.
Pamatjēdzieni: reversā starpniekservera konteiners, Caddyfile, automātisks https, Uptime Kuma, Vaultwarden, DOMAIN, SIGNUPS_ALLOWED, ADMIN_TOKEN, Argon2, .env, websockets, sējumu rezerves kopēšana, docker compose pull, sava galvene
Ko mēs veidojam
Divi noderīgi pakalpojumi Jūsu serverī, katrs savā apakšdomēnā:
- Uptime Kuma adresē
status.example.com: uzraudzības programma ar tīmekļa saskarni, kas pārrauga Jūsu vietnes, portus un sertifikātus un nosūta Jums paziņojumu, ja kaut kas pārstāj darboties (nodarbība 8.3). Ievērībai: uzraudzība, kas darbojas tajā pašā serverī, ko tā uzrauga, nepamana, ka viss serveris ir izgājis no ierindas. Tāpēc izmantojiet to citām savām vietnēm un pakalpojumiem vai uzstādiet to otrā serverī. - Vaultwarden adresē
kluis.example.com: viegla, neatkarīga servera versija, kas darbojas ar Bitwarden lietotnēm un pārlūka paplašinājumiem. Paroļu glabātuve ir jutīga programmatūra: uzstādiet to tikai tad, ja vēlaties to rūpīgi uzturēt un regulāri veidot rezerves kopijas. Pilnīgi pieņemami ir arī vienkārši izmantot kāda pakalpojumu sniedzēja paroļu pārvaldnieku.
Tiem priekšā mēs novietojam Caddy konteinerā: tas pieņem portus 80 un 443, pats kārto Let's Encrypt sertifikātus (nodarbība 7.3 un 7.4) un pārsūta datplūsmu uz pareizo konteineru. Uptime Kuma un Vaultwarden paši nepublicē nevienu portu (nodarbība 9.3).
internet ──443──> caddy ──> uptime-kuma:3001
└─> vaultwarden:80Priekšnosacījumi
- Docker Engine ar compose spraudni (nodarbība 9.2).
- Divi DNS ieraksti, kas norāda uz Jūsu serveri, A un AAAA (nodarbība 7.1):
status.example.comunkluis.example.com. - Porti 80 un 443 serverī ir brīvi. Ja šajos portos jau darbojas sistēmas nginx vai Caddy, Caddy konteiners tos nevar izmantot. Tad izvēlieties: vai nu apturiet sistēmas tīmekļa serveri, vai ļaujiet tam veikt starpniekservera darbu un publicējiet konteinerus uz
127.0.0.1(nodarbība 9.3). Šajā receptē to dara Caddy konteiners. - Ugunsmūrī ufw atveriet 80/tcp, 443/tcp un HTTP/3 vajadzībām arī 443/udp (nodarbība 5.2). Stingri ņemot, Docker apiet ufw, taču šādi Jūsu ugunsmūra pārskats atbilst realitātei.
Faili
Viss atrodas vienā mapē, /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:Pirms sākat, pārbaudiet, kura Vaultwarden versija ir jaunākā (laidieni GitHub), un ierakstiet to birkā. Portus publicē tikai Caddy, un tiem jābūt publiskiem. Sējumi caddy-data (sertifikāti), uptime-kuma un mape vw-data satur visu, kas Jums jāsaglabā.
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 abiem nosaukumiem automātiski iegūst sertifikātu un pāradresē http uz https. uptime-kuma un vaultwarden ir pakalpojumu nosaukumi no compose faila: Caddy tos atrod iekšējā tīklā. Bloks header pievieno papildu galvenes rindu katrai status.example.com atbildei; uzdevumā Jūs to izmantosiet kā pierādījumu, ka darbojas tieši Jūsu starpniekservera konteiners. Ar defer galvene tiek iestatīta pēc tam, kad aizmugurējais pakalpojums ir sniedzis savu atbildi. Ja vēlaties arī HSTS un citas drošības galvenes no nodarbības 7.4, ierakstiet tās tajā pašā blokā.
Vaultwarden droša iestatīšana
Četras lietas nosaka atšķirību starp drošu un bīstamu glabātuvi.
Pirmkārt: tikai caur https. Bitwarden tīmekļa glabātuve izmanto pārlūka kriptogrāfiju, un pārlūki to dara pieejamu tikai https lapās. Bez https tā nedarbojas pareizi, un tas ir labi. Vaultwarden dokumentācija iesaka https nodrošināšanai izmantot reverso starpniekserveri, kā šeit Caddy. Iestatiet DOMAIN uz pilno https adresi.
Otrkārt: slēgta reģistrācija. Ar SIGNUPS_ALLOWED: "true" ikviens, kas atrod lapu, var izveidot kontu Jūsu serverī. Tāpēc palaidiet pakalpojumu, nekavējoties izveidojiet savu kontu (kontus), iestatiet vērtību uz "false" un vēlreiz izpildiet docker compose up -d. Ja vēlāk vēlaties kādu pievienot, izmantojiet ielūgumu funkciju administrēšanas ekrānā.
Treškārt: jaukts administrēšanas marķieris. Administrēšanas ekrāns (/admin) ir aizsargāts ar ADMIN_TOKEN. Neierakstiet tur lasāmu paroli, bet gan Argon2 jaucējvērtību. To izveido ar pašu 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$...'Ierakstiet šo rindu failā .env (tātad VW_ADMIN_TOKEN='$argon2id$...', ar vienpēdiņām) un padariet failu lasāmu tikai lietotājam root: sudo chmod 600 .env. Failā .env zīmes $ nav jādubulto; ja jaucējvērtību ierakstāt tieši zem environment: compose failā, tad gan (katra $ kļūst par $$), citādi Compose mēģina tās aizpildīt kā mainīgos. Adresē /admin Jūs piesakāties ar paroli, ko ievadījāt, nevis ar jaucējvērtību. Ievērībai: iestatījumi, ko saglabājat administrēšanas ekrānā, nonāk failā vw-data/config.json un tad ir noteicošie pār vides mainīgajiem.
Ceturtkārt: rezerves kopija un atjaunošana. Viss atrodas mapē vw-data: datubāze, pielikumi un atslēgas. Iekļaujiet šo mapi savā restic rezerves kopijā (nodarbība 8.2) un datubāzei ievērojiet rezerves kopēšanas norādījumus Vaultwarden wiki, lai nenokopētu pusrakstītu failu. Pārbaudiet atjaunošanu (uzdevums O8.2): glabātuve bez strādājošas rezerves kopijas ir risks visām Jūsu parolēm.
Paziņojumi starp ierīcēm (websockets) jaunākajās Vaultwarden versijās darbojas caur to pašu portu; Caddy tos pārsūta bez papildu iestatījumiem.
Uptime Kuma iestatīšana
Pēc docker compose up -d atveriet https://status.example.com. Pirmajā apmeklējumā Uptime Kuma lūdz izveidot administratora kontu. Dariet to nekavējoties: kamēr šī konta nav, ikviens, kas atrod lapu, var to izveidot. Ja nevēlaties šo risku vispār, sākumā izņemiet bloku status no Caddyfile, izveidojiet kontu caur SSH tuneli (nodarbība 2.3) un pēc tam bloku atjaunojiet.
Pēc tam pievienojiet monitorus: HTTP monitoru savai vietnei, TCP monitoru portam, sertifikāta brīdinājumu un paziņojumu kanālu (e-pasts, tērzēšanas programma vai push pakalpojums). Uptime Kuma iestatījumos ieslēdziet arī divpakāpju verifikāciju.
Palaišana un pārbaude
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-opdrachtPortus izmanto tikai Caddy. Ja sertifikātu neizdodas iegūt, Caddy žurnālos ir norādīts iemesls: parasti DNS vēl nenorāda uz serveri vai ports 80 nav sasniedzams (nodarbība 7.3).
Atjaunināšana
Konteineru neatjaunina unattended-upgrades (nodarbība 4.2). Nosakiet tam regulāru laiku, piemēram, ik pēc divām nedēļām:
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 lejupielādē jaunākos attēlus Jūsu izvēlētās birkas robežās (tātad caddy:2 paliek versijā 2). Vaultwarden ar versijas numuru vispirms izlasiet laidiena piezīmes un tad nomainiet birku. Jaunas galvenās versijas gadījumā vienmēr izlasiet laidiena piezīmes: dažreiz Jūsu iestatījumos kaut kas jāmaina. Pirms liela atjauninājuma izveidojiet sējumu rezerves kopiju.
Sekojiet arī izstrādātāju drošības paziņojumiem. Ievainojamība Vaultwarden vai Caddy tiek novērsta tikai tad, kad Jūs lejupielādējat jauno versiju.
Praksē
Šī recepte darbojas jebkurā VPS ar Docker, gan WebOké, gan pie cita pakalpojumu sniedzēja. Tā ir pašpalīdzība: Jūsu VPS pakalpojumu sniedzējs nepārvalda neko Jūsu konteineros. Pirms pirmās uzstādīšanas izveidojiet momentuzņēmumu, tad varēsiet eksperimentēt mierīgu prātu.
Kopsavilkums
- Viens compose fails ar Caddy kā reversā starpniekservera konteineru; portus 80 un 443 publicē tikai Caddy, pakalpojumi nepublicē neko.
- Caddy automātiski kārto sertifikātus un https un ar
headervar iestatīt savas galvenes rindas. - Vaultwarden: https obligāts,
DOMAINuz https adresi, reģistrācija slēgta pēc sava konta izveides,ADMIN_TOKENkā Argon2 jaucējvērtība failā.envar tiesībām 600. - Uptime Kuma: nekavējoties izveidojiet administratora kontu un ieslēdziet divpakāpju verifikāciju; ar to galvenokārt uzraugiet citus serverus un vietnes.
- Veidojiet rezerves kopijas sējumiem un mapei
vw-dataun atjauniniet ardocker compose pullunup -dnoteiktā laikā.
Tests (quiz)
Uzdevums
Uzdevums Z9.4: Pierādiet, ka Jūsu konteiners darbojas. Uzdevumā saņemiet savu personīgo kodu un ierakstiet to sava Caddy konteinera Caddyfile kā galveni X-Weboke-Cursus kādam savam apakšdomēnam (piemēram, status.<jouwdomein>). Pārlādējiet Caddy un ievadiet resursdatora nosaukumu. Programma ielādē https://<hostnaam>/ un pārbauda, vai sertifikāts ir derīgs un vai galvene satur tieši Jūsu kodu. Turklāt ielīmējiet komandas docker compose ps izvadi un atbildiet, kurš pakalpojums vienīgais publicē portus.
Vairāk lasīt
- Paroļu pārvaldnieks un piekļuves atslēgas: šādi droši sakārtojat savu pieteikšanos
- Uptime Kuma (instalēšana ar Docker): 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ācija, header: https://caddyserver.com/docs/caddyfile/directives/header
