Preskoči na vsebino

Nastavitve piškotkov

Za vsako vrsto izberite, katere piškotke dovolite. Svojo izbiro lahko kadar koli spremenite prek povezave Nastavitve piškotkov na dnu vsake strani. Izjava o zasebnosti

Nujni

Vedno vklopljeno

Potrebni so za prijavo, shranjevanje košarice in pomnjenje Vaših izbir. Vedno so vklopljeni.

Kateri piškotki?
  • weboke_sessie, weboke_klant, weboke_remember: Vaša seja in ohranjanje prijave
  • weboke_basket: Vaša košarica
  • wkBtwIncl: prikaz cen z DDV ali brez DDV
  • wok_cookies: Vaša izbira glede piškotkov, 12 mesecev

Meri, kateri oglas vodi do obiska ali naročila, da ne plačujemo za oglase, ki ne prinesejo ničesar.

Kateri piškotki?
  • Google Ads prek Google Tag Manager (_gcl_au, _gcl_aw), do 90 dni
  • OpenAI Ads, oglasi v ChatGPT
  • wok_aff: prek katerega partnerja ste prišli k nam (partnerski program), 60 dni

4,6

Država in jezik

Vsaka država ima svojo spletno stran, s cenami in DDV za to državo.

Prikaži

Recepti: Uptime Kuma in Vaultwarden

Modul 9: Docker in docker compose · Čas branja: 13 minut

Učni cilj: Po tej lekciji boste znali z docker compose zagnati Uptime Kuma in Vaultwarden za Caddy, s https, zaprto registracijo, varnostno kopijo nosilcev (volumes) in ustaljenim načinom posodabljanja.

Ključni pojmi: vsebnik obratnega posrednika (reverse proxy), Caddyfile, samodejni https, Uptime Kuma, Vaultwarden, DOMAIN, SIGNUPS_ALLOWED, ADMIN_TOKEN, Argon2, .env, websocketi, varnostno kopiranje nosilcev, docker compose pull, lastna glava

Kaj bomo zgradili

Dve uporabni storitvi na Vašem lastnem strežniku, vsaka na svoji poddomeni:

  • Uptime Kuma na status.example.com: program za nadzor s spletnim vmesnikom, ki spremlja Vaša spletna mesta, vrata in certifikate ter Vam pošlje obvestilo, ko kaj izpade (lekcija 8.3). Pozor: nadzor, ki teče na istem strežniku kot to, kar nadzira, ne opazi, da je izpadel celoten strežnik. Uporabljajte ga torej za svoja druga spletna mesta in storitve ali pa ga namestite na drug strežnik.
  • Vaultwarden na kluis.example.com: lahka, neodvisna strežniška različica, ki deluje z aplikacijami in razširitvami brskalnika Bitwarden. Trezor gesel je občutljiva programska oprema: lotite se ga le, če ste ga pripravljeni skrbno vzdrževati in varnostno kopirati. Povsem v redu je tudi, če preprosto uporabljate upravitelja gesel ponudnika.

Pred njiju postavimo Caddy v vsebniku: ta sprejema promet na vratih 80 in 443, sam ureja certifikate Let's Encrypt (lekciji 7.3 in 7.4) in promet posreduje pravemu vsebniku. Uptime Kuma in Vaultwarden sama ne objavljata nobenih vrat (lekcija 9.3).

internet ──443──> caddy ──> uptime-kuma:3001
                        └─> vaultwarden:80

Predpogoji

  1. Docker Engine z vtičnikom compose (lekcija 9.2).
  2. Dva zapisa DNS, ki kažeta na Vaš strežnik, A in AAAA (lekcija 7.1): status.example.com in kluis.example.com.
  3. Prosta vrata 80 in 443 na strežniku. Če na teh vratih že teče sistemski nginx ali Caddy, ju vsebnik Caddy ne more uporabiti. V tem primeru izberite: ali ustavite sistemski spletni strežnik ali pa mu prepustite delo posrednika in vsebnike objavite na 127.0.0.1 (lekcija 9.3). V tem receptu delo opravi vsebnik Caddy.
  4. V ufw odprite 80/tcp, 443/tcp in za HTTP/3 tudi 443/udp (lekcija 5.2). Strogo vzeto Docker obide ufw, a tako se pregled Vašega požarnega zidu ujema z dejanskim stanjem.

Datoteke

Vse gre v eno mapo, /srv/diensten/:

/srv/diensten/
├── compose.yaml
├── Caddyfile
└── .env

compose.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:

Preden začnete, preverite, katera različica Vaultwardna je najnovejša (izdaje na GitHubu), in jo vpišite v oznako (tag). Vrata objavlja le Caddy; ta morajo biti javna. Nosilca caddy-data (certifikati), uptime-kuma in mapa vw-data vsebujejo vse, kar morate shraniti.

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 za obe imeni samodejno pridobi certifikat in http preusmeri na https. uptime-kuma in vaultwarden sta imeni storitev iz datoteke compose: Caddy ju najde v notranjem omrežju. Blok header doda dodatno glavo v vsak odgovor z status.example.com; to boste v nalogi uporabili kot dokaz, da Vaš vsebnik posrednika deluje. Z defer se glava nastavi, ko je storitev v ozadju že vrnila svoj odgovor. Če želite tudi HSTS in druge varnostne glave iz lekcije 7.4, jih dodajte v isti blok.

Varna nastavitev Vaultwardna

Štiri stvari ločijo varen trezor od nevarnega.

Prvič: samo prek https. Spletni trezor Bitwarden uporablja kriptografijo brskalnika, brskalniki pa jo omogočijo le na straneh https. Brez https torej ne deluje pravilno, in to je tudi prav. Dokumentacija Vaultwardna za https priporoča obratni posrednik, kot je tukaj Caddy. DOMAIN nastavite na celoten naslov https.

Drugič: zaprta registracija. Z SIGNUPS_ALLOWED: "true" lahko vsak, ki najde stran, ustvari račun na Vašem strežniku. Zato zaženite, takoj ustvarite svoj račun oziroma račune, vrednost nastavite na "false" in znova izvedite docker compose up -d. Če želite pozneje koga dodati, uporabite funkcijo povabila v skrbniškem zaslonu.

Tretjič: zgoščeni skrbniški žeton. Skrbniški zaslon (/admin) je zaščiten z ADMIN_TOKEN. Vanj ne vpišite berljivega gesla, temveč zgoščeno vrednost Argon2. To ustvarite kar z Vaultwardnom:

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$...'

To vrstico vpišite v .env (torej VW_ADMIN_TOKEN='$argon2id$...', z enojnimi narekovaji) in datoteko naredite berljivo samo za root: sudo chmod 600 .env. V datoteki .env znakov $ ni treba podvojiti; če pa zgoščeno vrednost vpišete neposredno pod environment: v datoteko compose, jih morate (vsak $ postane $$), sicer jih Compose skuša zapolniti kot spremenljivke. Na /admin se prijavite z geslom, ki ste ga vtipkali, ne z zgoščeno vrednostjo. Pozor: nastavitve, ki jih shranite v skrbniškem zaslonu, se zapišejo v vw-data/config.json in imajo nato prednost pred okoljskimi spremenljivkami.

Četrtič: varnostna kopija in obnovitev. Vse je v vw-data: podatkovna baza, priloge in ključi. To mapo vključite v svojo varnostno kopijo restic (lekcija 8.2), za podatkovno bazo pa upoštevajte navodila za varnostno kopiranje v wikiju Vaultwardna, da ne skopirate napol zapisane datoteke. Preizkusite obnovitev (naloga O8.2): trezor brez delujoče varnostne kopije je tveganje za vsa Vaša gesla.

Obvestila med napravami (websocketi) pri novejših različicah Vaultwardna delujejo prek istih vrat; Caddy jih posreduje brez dodatnih nastavitev.

Nastavitev Uptime Kuma

Po docker compose up -d odprite https://status.example.com. Ob prvem obisku Vas Uptime Kuma prosi, da ustvarite skrbniški račun. To storite takoj: dokler tega računa ni, ga lahko ustvari vsak, ki najde stran. Če tega tveganja sploh ne želite, iz datoteke Caddyfile najprej odstranite blok status, račun ustvarite prek tunela SSH (lekcija 2.3) in blok nato vrnite.

Nato dodajte nadzornike (monitors): nadzornik HTTP za svoje spletno mesto, nadzornik TCP za vrata, opozorilo za certifikat in kanal za obvestila (e-pošta, program za klepet ali storitev potisnih obvestil). V nastavitvah Uptime Kuma vklopite tudi dvostopenjsko preverjanje.

Zagon in preverjanje

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-opdracht

Vrata ima samo Caddy. Če pridobitev certifikata ne uspe, je razlog zapisan v dnevnikih Caddyja: najpogosteje DNS še ne kaže na strežnik ali vrata 80 niso dosegljiva (lekcija 7.3).

Posodabljanje

Vsebnika unattended-upgrades ne posodobi (lekcija 4.2). Določite si stalen termin, na primer vsaka dva tedna:

anna@web1:/srv/diensten$ sudo docker compose pull
anna@web1:/srv/diensten$ sudo docker compose up -d
anna@web1:/srv/diensten$ sudo docker image prune

pull prenese najnovejše slike znotraj oznake, ki ste jo izbrali (torej caddy:2 ostane znotraj različice 2). Pri Vaultwardnu s številko različice najprej preberite opombe ob izdaji (release notes) in nato prilagodite oznako. Pri novi glavni različici vedno preberite opombe ob izdaji: včasih je treba kaj spremeniti v nastavitvah. Pred večjo posodobitvijo naredite varnostno kopijo nosilcev.

Spremljajte tudi varnostna obvestila razvijalcev. Ranljivost v Vaultwardnu ali Caddyju je odpravljena šele, ko sami prenesete novo različico.

V praksi

Ta recept deluje na vsakem VPS z Dockerjem, pri WebOké ali pri drugem ponudniku. Gre za samopomoč: ponudnik Vašega VPS ne upravlja ničesar znotraj Vaših vsebnikov. Preden ga prvič postavite, naredite posnetek stanja (snapshot), tako boste lahko brez skrbi preizkušali.

Povzetek

  • Ena datoteka compose s Caddyjem kot vsebnikom obratnega posrednika; vrata 80 in 443 objavlja samo Caddy, storitve nobenih.
  • Caddy samodejno ureja certifikate in https ter lahko z header nastavi lastne glave.
  • Vaultwarden: https obvezen, DOMAIN na naslovu https, registracija zaprta po ustvarjanju lastnega računa, ADMIN_TOKEN kot zgoščena vrednost Argon2 v .env s pravicami 600.
  • Uptime Kuma: takoj ustvarite skrbniški račun in vklopite dvostopenjsko preverjanje; z njim nadzirajte predvsem druge strežnike in spletna mesta.
  • Varnostno kopirajte nosilce in mapo vw-data ter posodabljajte z docker compose pull in up -d ob stalnem terminu.

Kviz

1. Zakaj Uptime Kuma in Vaultwarden v tem receptu sama ne objavljata vrat?



2. Zakaj spletni trezor Vaultwarden ne deluje pravilno prek navadnega http?



3. Ustvarili ste svoj račun v Vaultwardnu. Kaj je naslednji korak?



4. Zgoščeno vrednost Argon2 skrbniškega žetona vpišete neposredno pod environment: v compose.yaml in dobite opozorila o neznanih spremenljivkah. Zakaj?



5. Kako posodabljate te storitve?



Naloga

Naloga Z9.4: Dokažite, da Vaš vsebnik deluje. V nalogi pridobite svojo osebno kodo in jo v datoteko Caddyfile svojega vsebnika Caddy vpišite kot glavo X-Weboke-Cursus za eno od svojih poddomen (na primer status.<jouwdomein>). Znova naložite Caddy in vpišite ime gostitelja. Program prenese https://<hostnaam>/ in preveri, ali je certifikat veljaven in ali glava vsebuje natanko Vašo kodo. Poleg tega prilepite izpis ukaza docker compose ps in odgovorite, katera storitev edina objavlja vrata.

Naloga Z9.4: Dokažite, da Vaš vsebnik deluje

Kliknite "Prikažite mojo kodo" in v svoj Caddyfile dodajte glavo X-Weboke-Cursus s to kodo, na primer: header { X-Weboke-Cursus "<code>" }. Od zunaj ni mogoče videti, ali nekaj deluje v vsebniku, zato prilepite tudi izpis ukaza docker compose ps (tega ne shranjujemo).




Tega, kar vnesete, in tega, kar najdemo, ne shranjujemo. Vaš brskalnik si zapomni Vaše odgovore in to, ali ste nalogo opravili. Če ste prijavljeni, v Moji tečaji shranimo samo podatek, da ste nalogo (skoraj) pravilno opravili; tudi to lahko tam izbrišete.

Za nadaljnje branje

Trenutek…

Nastavite svoje domene

Za vsako domeno uredite imenske strežnike, povezavo z gostovanjem in kdo bo imetnik.

Nalaganje Vaših domen…