Přejít na obsah

Nastavení cookies

Zvolte, které druhy cookies povolíte. Svou volbu můžete kdykoli změnit přes Nastavení cookies v dolní části každé stránky. Prohlášení o ochraně osobních údajů

Nezbytné

Vždy zapnuté

Potřebné pro přihlášení, uchování košíku a zapamatování vašich voleb. Jsou vždy zapnuté.

Které cookies?
  • weboke_sessie, weboke_klant, weboke_remember: vaše relace a trvalé přihlášení
  • weboke_basket: váš košík
  • wkBtwIncl: zobrazení cen s DPH nebo bez DPH
  • wok_cookies: vaše volba cookies, 12 měsíců

Měří, která reklama vede k návštěvě nebo objednávce, abychom neplatili za reklamy, které nic nepřinášejí.

Které cookies?
  • Google Ads přes Google Tag Manager (_gcl_au, _gcl_aw), až 90 dní
  • OpenAI Ads, reklamy v ChatGPT
  • wok_aff: partner, který vás k nám doporučil (partnerský program), 60 dní

4,6

Země a jazyk

Každá země má vlastní web s cenami a DPH dané země.

Zobrazit

Recepty: Uptime Kuma a Vaultwarden

Modul 9: Docker a docker compose · Doba čtení: 13 min.

Cíl lekce: Po této lekci dokážete provozovat Uptime Kuma a Vaultwarden pomocí docker compose za Caddy, s https, uzavřenou registrací, zálohou svazků a pevně daným způsobem aktualizací.

Klíčové pojmy: kontejner s reverzní proxy, Caddyfile, automatické https, Uptime Kuma, Vaultwarden, DOMAIN, SIGNUPS_ALLOWED, ADMIN_TOKEN, Argon2, .env, websockety, zálohování svazků, docker compose pull, vlastní hlavička

Co budeme stavět

Dvě užitečné služby na Vašem vlastním serveru, každá na vlastní subdoméně:

  • Uptime Kuma na status.example.com: monitorovací program s webovým rozhraním, který hlídá Vaše weby, porty a certifikáty a pošle Vám upozornění, když něco vypadne (lekce 8.3). Pozor: monitoring, který běží na stejném serveru jako to, co hlídá, nepozná, když vypadne celý server. Používejte ho tedy pro své ostatní weby a služby, nebo ho umístěte na druhý server.
  • Vaultwarden na kluis.example.com: odlehčená, nezávislá serverová verze, která funguje s aplikacemi a rozšířeními prohlížeče od Bitwardenu. Trezor hesel je citlivý software: pouštějte se do toho, jen pokud jste ochotni ho pečlivě udržovat a zálohovat. Je také naprosto v pořádku používat obyčejného správce hesel od poskytovatele.

Před ně postavíme Caddy v kontejneru: ten přijímá provoz na portech 80 a 443, sám si zařizuje certifikáty od Let's Encrypt (lekce 7.3 a 7.4) a přeposílá provoz do správného kontejneru. Uptime Kuma a Vaultwarden samy nepublikují žádné porty (lekce 9.3).

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

Předpoklady

  1. Docker Engine s pluginem compose (lekce 9.2).
  2. Dva DNS záznamy, které ukazují na Váš server, A a AAAA (lekce 7.1): status.example.com a kluis.example.com.
  3. Volné porty 80 a 443 na serveru. Pokud na těchto portech už běží systémový nginx nebo Caddy, kontejner s Caddy je nemůže použít. Pak si vyberte: buď systémový webový server zastavíte, nebo mu necháte práci proxy a kontejnery publikujete na 127.0.0.1 (lekce 9.3). V tomto receptu tuto práci dělá kontejner s Caddy.
  4. V ufw otevřete 80/tcp, 443/tcp a pro HTTP/3 také 443/udp (lekce 5.2). Přesně vzato Docker ufw obchází, ale takto bude přehled Vašeho firewallu odpovídat skutečnosti.

Soubory

Vše patří do jedné složky, /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:

Než začnete, zjistěte, která verze Vaultwardenu je nejnovější (releases na GitHubu), a uveďte ji v tagu. Porty publikuje jen Caddy; ty musí být veřejné. Svazky caddy-data (certifikáty), uptime-kuma a složka vw-data obsahují vše, co musíte uchovat.

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 si pro oba názvy sám získá certifikát a přesměruje http na https. uptime-kuma a vaultwarden jsou názvy služeb ze souboru compose: Caddy je najde ve vnitřní síti. Blok header přidá do každé odpovědi z status.example.com hlavičku navíc; tu v úkolu použijete jako důkaz, že Váš kontejner s proxy běží. Díky defer se hlavička nastaví až poté, co služba v pozadí vrátí svou odpověď. Chcete-li také HSTS a další bezpečnostní hlavičky z lekce 7.4, vložte je do stejného bloku.

Bezpečné nastavení Vaultwardenu

Rozdíl mezi bezpečným a nebezpečným trezorem dělají čtyři věci.

Za prvé: pouze přes https. Webový trezor Bitwardenu využívá kryptografii prohlížeče a prohlížeče ji zpřístupňují jen na stránkách s https. Bez https tedy nefunguje správně, a to je jen dobře. Dokumentace Vaultwardenu doporučuje pro https reverzní proxy, jako je zde Caddy. Nastavte DOMAIN na úplnou https adresu.

Za druhé: uzavřená registrace. S SIGNUPS_ALLOWED: "true" si může na Vašem serveru založit účet kdokoli, kdo stránku najde. Spusťte tedy službu, hned si založte vlastní účet (účty), nastavte hodnotu na "false" a znovu spusťte docker compose up -d. Pokud budete chtít později někoho přidat, použijte funkci pozvánek v administraci.

Za třetí: hashovaný administrátorský token. Administrace (/admin) je chráněna pomocí ADMIN_TOKEN. Nevkládejte do ní čitelné heslo, ale hash Argon2. Ten vytvoříte přímo pomocí Vaultwardenu:

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

Tento řádek vložte do .env (tedy VW_ADMIN_TOKEN='$argon2id$...', s jednoduchými uvozovkami) a nastavte soubor tak, aby ho mohl číst jen root: sudo chmod 600 .env. V souboru .env nemusíte znaky $ zdvojovat; pokud ale hash vložíte přímo pod environment: v souboru compose, musíte (každý $ se změní na $$), jinak se je Compose pokusí doplnit jako proměnné. Do /admin se přihlašujete heslem, které jste zadali, nikoli hashem. Pozor: nastavení, která uložíte v administraci, se zapíší do vw-data/config.json a pak mají přednost před proměnnými prostředí.

Za čtvrté: záloha a obnova. Vše je uloženo v vw-data: databáze, přílohy a klíče. Zahrňte tuto složku do své zálohy restic (lekce 8.2) a u databáze se řiďte pokyny k zálohování ve wiki Vaultwardenu, abyste nekopírovali napůl zapsaný soubor. Obnovu vyzkoušejte (úkol O8.2): trezor bez funkční zálohy je riziko pro všechna Vaše hesla.

Oznámení mezi zařízeními (websockety) fungují v novějších verzích Vaultwardenu přes stejný port; Caddy je předá bez dalšího nastavení.

Nastavení Uptime Kuma

Po docker compose up -d otevřete https://status.example.com. Při první návštěvě Vás Uptime Kuma vyzve k vytvoření administrátorského účtu. Udělejte to hned: dokud tento účet neexistuje, může ho vytvořit kdokoli, kdo stránku najde. Pokud nechcete podstoupit ani toto riziko, vynechejte nejprve blok status z Caddyfile, vytvořte účet přes SSH tunel (lekce 2.3) a blok potom vraťte zpět.

Poté přidáte monitory: HTTP monitor pro svůj web, TCP monitor pro port, upozornění na certifikát a kanál pro oznámení (e-mail, chatovací aplikace nebo push služba). V nastavení Uptime Kuma také zapněte dvoufázové ověření.

Spuštění a kontrola

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

Porty má jen Caddy. Pokud se nepodaří získat certifikát, najdete důvod v lozích Caddy: nejčastěji DNS ještě neukazuje na server, nebo není dostupný port 80 (lekce 7.3).

Aktualizace

Kontejner se pomocí unattended-upgrades neaktualizuje (lekce 4.2). Udělejte si z toho pravidelný termín, například každé dva týdny:

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 stáhne nejnovější image v rámci zvoleného tagu (takže caddy:2 zůstane u verze 2). U Vaultwardenu s číslem verze nejprve po přečtení release notes upravte tag. U nové hlavní verze vždy čtěte release notes: někdy je třeba něco změnit ve Vašem nastavení. Před velkou aktualizací zazálohujte svazky.

Sledujte také bezpečnostní oznámení autorů. Zranitelnost ve Vaultwardenu nebo v Caddy se odstraní, jen když si novou verzi stáhnete.

V praxi

Tento recept funguje na každém VPS s Dockerem, u WebOké i u jiného poskytovatele. Jde o svépomoc: poskytovatel Vašeho VPS uvnitř Vašich kontejnerů nic nespravuje. Než recept poprvé nasadíte, vytvořte snapshot, pak můžete experimentovat s klidným svědomím.

Shrnutí

  • Jeden soubor compose s Caddy jako kontejnerem s reverzní proxy; porty 80 a 443 publikuje jen Caddy, služby nepublikují nic.
  • Caddy automaticky zařizuje certifikáty a https a pomocí header umí nastavit vlastní hlavičky.
  • Vaultwarden: https povinné, DOMAIN na https adresu, registrace po založení vlastního účtu uzavřená, ADMIN_TOKEN jako hash Argon2 v .env s oprávněním 600.
  • Uptime Kuma: hned vytvořit administrátorský účet a zapnout dvoufázové ověření; hlídejte jím hlavně jiné servery a weby.
  • Zálohujte svazky a složku vw-data a aktualizujte pomocí docker compose pull a up -d v pravidelném termínu.

Kvíz

1. Proč Uptime Kuma a Vaultwarden v tomto receptu samy nepublikují žádné porty?



2. Proč webový trezor Vaultwardenu nefunguje správně přes obyčejné http?



3. Založili jste si vlastní účet ve Vaultwardenu. Jaký je další krok?



4. Vložíte hash Argon2 administrátorského tokenu přímo pod environment: v compose.yaml a dostanete varování o neznámých proměnných. Proč?



5. Jak tyto služby aktualizujete?



Úkol

Úkol Z9.4: Prokažte, že Váš kontejner běží. V úkolu si vyzvedněte svůj osobní kód a vložte ho do Caddyfile svého kontejneru s Caddy jako hlavičku X-Weboke-Cursus pro některou ze svých subdomén (například status.<jouwdomein>). Znovu načtěte Caddy a vyplňte název hostitele. Program stáhne https://<hostnaam>/ a ověří, že certifikát je platný a že hlavička obsahuje přesně Váš kód. Kromě toho vložte výstup příkazu docker compose ps a odpovězte, která služba jako jediná publikuje porty.

Úkol Z9.4: Prokažte, že Váš kontejner běží

Klikněte na „Zobrazit můj kód“ a vložte do svého Caddyfile hlavičku X-Weboke-Cursus s tímto kódem, například: header { X-Weboke-Cursus "<code>" }. Zvenku nelze poznat, zda něco běží v kontejneru, proto vložte také výstup příkazu docker compose ps (ten neukládáme).




Co vyplníte a co zjistíme, neukládáme. Váš prohlížeč si pamatuje Vaše odpovědi a to, zda jste úkol splnili. Pokud jste přihlášeni, ukládáme v sekci Moje kurzy pouze to, že jste úkol měli (téměř) správně; i to tam můžete odstranit.

Doporučujeme k přečtení

Chvíli strpení…

Nastavení vašich domén

U každé domény nastavte jmenné servery, propojení s hostingem a to, kdo bude držitelem.

Načítání vašich domén…