Moduuli 9 · 9.4
Reseptit: Uptime Kuma ja Vaultwarden
Moduuli 9: Docker ja docker compose · Lukuaika: 13 minuuttia
Tavoite: Tämän oppitunnin jälkeen osaat ajaa Uptime Kumaa ja Vaultwardenia docker composella Caddyn takana niin, että käytössä on https, rekisteröinti on suljettu, volyymit varmuuskopioidaan ja päivität palvelut aina samalla tavalla.
Keskeiset käsitteet: käänteisen välityspalvelimen kontti, Caddyfile, automaattinen https, Uptime Kuma, Vaultwarden, DOMAIN, SIGNUPS_ALLOWED, ADMIN_TOKEN, Argon2, .env, websocketit, volyymien varmuuskopiointi, docker compose pull, oma otsake
Mitä rakennamme
Kaksi kätevää palvelua omalle palvelimellesi, kumpikin omassa aliverkkotunnuksessaan:
- Uptime Kuma osoitteessa
status.example.com: verkkokäyttöliittymällä varustettu valvontaohjelma, joka tarkkailee sivustojasi, porttejasi ja varmenteitasi ja lähettää sinulle ilmoituksen, jos jokin lakkaa toimimasta (oppitunti 8.3). Huomaa: valvonta, joka toimii samalla palvelimella kuin valvottava kohde, ei huomaa, jos koko palvelin kaatuu. Käytä sitä siis muiden sivustojesi ja palveluidesi valvontaan tai asenna se toiselle palvelimelle. - Vaultwarden osoitteessa
kluis.example.com: kevyt, itsenäinen palvelinversio, joka toimii Bitwardenin sovellusten ja selainlaajennusten kanssa. Salasanaholvi on arkaluonteinen ohjelmisto: ota se käyttöön vain, jos olet valmis pitämään sen ajan tasalla ja varmuuskopioimaan sen kunnolla. On myös täysin hyvä vaihtoehto käyttää jonkin palveluntarjoajan salasanojen hallintaa.
Niiden eteen laitamme kontissa toimivan Caddyn: se vastaanottaa portit 80 ja 443, hoitaa itse Let's Encryptin varmenteet (oppitunnit 7.3 ja 7.4) ja ohjaa liikenteen oikeaan konttiin. Uptime Kuma ja Vaultwarden eivät itse julkaise yhtään porttia (oppitunti 9.3).
internet ──443──> caddy ──> uptime-kuma:3001
└─> vaultwarden:80Ennen aloitusta
- Docker Engine ja compose-lisäosa (oppitunti 9.2).
- Kaksi palvelimeesi osoittavaa DNS-tietuetta, A ja AAAA (oppitunti 7.1):
status.example.comjakluis.example.com. - Portit 80 ja 443 vapaina palvelimella. Jos näissä porteissa toimii jo järjestelmän nginx tai Caddy, Caddy-kontti ei voi käyttää niitä. Valitse silloin: joko pysäytät järjestelmän verkkopalvelimen tai annat sen hoitaa välitystyön ja julkaiset kontit osoitteessa
127.0.0.1(oppitunti 9.3). Tässä reseptissä työn tekee Caddy-kontti. - Avaa ufw:ssä 80/tcp, 443/tcp ja HTTP/3:a varten myös 443/udp (oppitunti 5.2). Tarkkaan ottaen Docker ohittaa ufw:n, mutta näin palomuurisi yhteenveto vastaa todellisuutta.
Tiedostot
Kaikki tulee yhteen kansioon, /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:Tarkista ennen aloittamista, mikä on Vaultwardenin uusin versio (julkaisut GitHubissa), ja merkitse se tagiin. Vain Caddy julkaisee portteja, ja niiden on oltava julkisia. Volyymit caddy-data (varmenteet), uptime-kuma ja kansio vw-data sisältävät kaiken, mikä sinun pitää säilyttää.
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 hakee molemmille nimille automaattisesti varmenteen ja ohjaa http-liikenteen https:ään. uptime-kuma ja vaultwarden ovat compose-tiedoston palvelunimiä: Caddy löytää ne sisäverkosta. header-lohko lisää ylimääräisen otsakerivin jokaiseen osoitteen status.example.com vastaukseen. Käytät sitä tehtävässä todisteena siitä, että oma välityspalvelinkonttisi on käynnissä. defer asettaa otsakkeen vasta sen jälkeen, kun taustalla oleva palvelu on antanut vastauksensa. Jos haluat myös HSTS:n ja muut oppitunnin 7.4 tietoturvaotsakkeet, lisää ne samaan lohkoon.
Vaultwardenin turvallinen määrittäminen
Neljä asiaa ratkaisee, onko holvi turvallinen vai vaarallinen.
Yksi: vain https:n kautta. Bitwardenin verkkoholvi käyttää selaimen kryptografiaa, ja selaimet antavat sen käyttöön vain https-sivuilla. Ilman https:ää se ei siis toimi kunnolla, ja hyvä niin. Vaultwardenin dokumentaatio suosittelee https:ää varten käänteistä välityspalvelinta, kuten tässä Caddya. Aseta DOMAIN täydeksi https-osoitteeksi.
Kaksi: rekisteröinti kiinni. Asetuksella SIGNUPS_ALLOWED: "true" kuka tahansa sivun löytävä voi luoda tilin palvelimellesi. Käynnistä siis palvelu, luo heti oma tilisi tai tilisi, vaihda arvoksi "false" ja suorita docker compose up -d uudelleen. Jos haluat myöhemmin lisätä jonkun, käytä hallintanäkymän kutsutoimintoa.
Kolme: tiivistetty hallintatunnus. Hallintanäkymä (/admin) on suojattu asetuksella ADMIN_TOKEN. Älä laita siihen luettavaa salasanaa, vaan Argon2-tiiviste. Sen teet Vaultwardenilla itsellään:
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$...'Laita tämä rivi tiedostoon .env (eli VW_ADMIN_TOKEN='$argon2id$...', yksinkertaisin lainausmerkein) ja tee tiedostosta vain rootin luettavissa oleva: sudo chmod 600 .env. .env-tiedostossa $-merkkejä ei tarvitse kahdentaa. Jos laitat tiivisteen suoraan compose-tiedostoon kohtaan environment:, ne pitää kahdentaa (jokainen $ muuttuu muotoon $$), muuten Compose yrittää täyttää ne muuttujina. Kirjaudut osoitteeseen /admin kirjoittamallasi salasanalla, et tiivisteellä. Huomaa: hallintanäkymässä tallentamasi asetukset menevät tiedostoon vw-data/config.json ja ohittavat silloin ympäristömuuttujat.
Neljä: varmuuskopiointi ja palautus. Kaikki on kansiossa vw-data: tietokanta, liitteet ja avaimet. Ota kansio mukaan restic-varmuuskopioosi (oppitunti 8.2) ja noudata tietokannan osalta Vaultwardenin wikin varmuuskopio-ohjeita, jotta et kopioi puoliksi kirjoitettua tiedostoa. Testaa palautus (tehtävä O8.2): holvi ilman toimivaa varmuuskopiota on riski kaikille salasanoillesi.
Laitteiden väliset ilmoitukset (websocketit) kulkevat Vaultwardenin uusissa versioissa saman portin kautta. Caddy välittää ne ilman lisäasetuksia.
Uptime Kuman määrittäminen
Komennon docker compose up -d jälkeen avaa https://status.example.com. Ensimmäisellä käynnillä Uptime Kuma pyytää luomaan ylläpitäjän tilin. Tee se heti: niin kauan kuin tiliä ei ole, kuka tahansa sivun löytävä voi luoda sen. Jos et halua ottaa tätäkään riskiä, jätä status-lohko ensin pois Caddyfilestä, luo tili SSH-tunnelin kautta (oppitunti 2.3) ja palauta lohko sen jälkeen.
Lisää sen jälkeen valvontakohteet: HTTP-valvonta sivustollesi, TCP-valvonta portille, varmenteen vanhenemisvaroitus ja ilmoituskanava (sähköposti, pikaviestin tai push-palvelu). Ota myös kaksivaiheinen tunnistautuminen käyttöön Uptime Kuman asetuksista.
Käynnistys ja tarkistus
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-opdrachtVain Caddylla on portteja. Jos varmenteen hakeminen epäonnistuu, Caddyn lokeista näet syyn: yleensä DNS ei vielä osoita palvelimeen tai portti 80 ei ole tavoitettavissa (oppitunti 7.3).
Päivittäminen
unattended-upgrades ei päivitä kontteja (oppitunti 4.2). Tee päivittämisestä säännöllinen tapa, esimerkiksi joka toinen viikko:
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 hakee uusimmat imaget valitsemasi tagin sisällä (eli caddy:2 pysyy versiossa 2). Versionumerolla merkityn Vaultwardenin kohdalla muutat ensin tagin, kun olet lukenut julkaisutiedot. Lue uuden pääversion kohdalla aina julkaisutiedot: joskus asetuksiisi täytyy tehdä muutoksia. Varmuuskopioi volyymit ennen suurta päivitystä.
Seuraa myös tekijöiden tietoturvatiedotteita. Vaultwardenin tai Caddyn haavoittuvuus korjaantuu vain, jos haet itse uuden version.
Käytännössä
Tämä resepti toimii millä tahansa VPS:llä, jossa on Docker, niin WebOkéllä kuin muulla palveluntarjoajalla. Kyse on omatoimisesta ylläpidosta: VPS:n tarjoaja ei hallinnoi mitään konttiesi sisällä. Ota tilannevedos ennen ensimmäistä asennusta, niin voit kokeilla huoletta.
Yhteenveto
- Yksi compose-tiedosto, jossa Caddy toimii käänteisen välityspalvelimen konttina. Vain Caddy julkaisee portit 80 ja 443, palvelut eivät mitään.
- Caddy hoitaa varmenteet ja https:n automaattisesti ja voi asettaa omia otsakerivejä
header-direktiivillä. - Vaultwarden: https pakollinen,
DOMAINhttps-osoitteeksi, rekisteröinti kiinni oman tilin luomisen jälkeen,ADMIN_TOKENArgon2-tiivisteenä tiedostossa.envoikeuksin 600. - Uptime Kuma: luo ylläpitäjän tili heti ja ota kaksivaiheinen tunnistautuminen käyttöön. Valvo sillä ennen kaikkea muita palvelimia ja sivustoja.
- Varmuuskopioi volyymit ja kansio
vw-data, ja päivitä komennoilladocker compose pulljaup -dsäännöllisesti.
Tietovisa (quiz)
Tehtävä
Tehtävä Z9.4: Todista, että konttisi on käynnissä. Hae tehtävästä henkilökohtainen koodisi ja lisää se Caddy-konttisi Caddyfileen otsakkeeksi X-Weboke-Cursus jollekin omalle aliverkkotunnuksellesi (esimerkiksi status.<jouwdomein>). Lataa Caddyn asetukset uudelleen ja syötä isäntänimi. Ohjelma hakee osoitteen https://<hostnaam>/ ja tarkistaa, että varmenne on voimassa ja että otsake sisältää täsmälleen sinun koodisi. Liitä lisäksi komennon docker compose ps tuloste ja vastaa, mikä palvelu ainoana julkaisee portteja.
Lue lisää
- Salasananhallinta ja passkeyt: näin hoidat kirjautumisen turvallisesti
- Uptime Kuma (asennus Dockerilla): https://github.com/louislam/uptime-kuma
- Vaultwardenin wiki, Using Docker Compose: https://github.com/dani-garcia/vaultwarden/wiki/Using-Docker-Compose
- Vaultwardenin wiki, Enabling admin page: https://github.com/dani-garcia/vaultwarden/wiki/Enabling-admin-page
- Vaultwardenin wiki, Enabling HTTPS: https://github.com/dani-garcia/vaultwarden/wiki/Enabling-HTTPS
- Caddyn dokumentaatio, header: https://caddyserver.com/docs/caddyfile/directives/header
