Můj blog // Digitální archiv

Myšlenky, projekty a technické poznámky

Zobrazit příspěvky se štítkem: #md-blog Zobrazit vše ×

Původně bylo nastavení mého blogu plánováno jako čistě IPv6 projekt přes WireGuard, protože celý běží na domácím serveru (mimochodem, bezplatné IPv6 adresy získáte na route64.org). Abych zvýšil dostupnost, přidal jsem nyní externí IPv4 proxy (díky @Larvitz).

Okamžitě se však objevily problémy s SSL: Protože původně přes proxy procházely jak záznamy typu A, tak AAAA, selhalo ověření Let's Encrypt na mém serveru.

Řešení: „IPv6 hack“

Řešením bylo nasměrovat AAAA záznam explicitně přímo na WireGuard IP adresu mého serveru, namísto toho, aby byl také veden přes proxy.

  • Doména: blog.burningboard.org
  • A záznam (Proxy): 194.28.98.217
  • AAAA záznam (Server): 2a11:6c7:f05:a8::2 (WireGuard)

Díky tomuto přímému AAAA záznamu na mou WireGuard IP adresu se Let’s Encrypt i nadále dostane k mému serveru přímo přes IPv6 (protože záznam AAAA je standardně upřednostňován) a vystaví SSL certifikát. IPv4 provoz je pak šifrovaně předáván z proxy ke mně.

Finální konfigurace

Aby komunikace probíhala hladce, museli jsme upravit servery Caddy:

1. Na mém serveru (NixOS, blog.nix)

Aby skutečné IP adresy návštěvníků přicházely správně a nebyly přepsány IP adresou proxy serveru, musí být tento server označen jako důvěryhodný:

services.caddy.globalConfig = ''
  servers {
      trusted_proxies static 2a06:9801:1c:1000::10
  }
'';

2. Na externí proxy (Caddy)

Aby proxy správně komunikovala s mým serverem přes HTTPS, musí odesílat název hostitele (SNI):

reverse_proxy [https://[2a11:6c7:f05:a8::2]:443](https://[2a11:6c7:f05:a8::2]:443) {
    header_up Host {host}
    transport http {
        tls_server_name blog.burningboard.org
    }
}

Blog je nyní dostupný přes IPv4 i IPv6, bezpečně zašifrovaný a moje domácí IP adresa přesto zůstává soukromá! 🚀

To nejdůležitější na úvod: Základem zůstávají obvyklé Markdown soubory – jsem prostě velkým fanouškem tohoto jednoduchého řešení. Pod kapotou se toho ale hodně změnilo:

Trochu jsem si pohrál s nastavením:

📂 MD-Files: Struktura blogu zůstává jednoduchá na bázi Markdownu.

🌍 Globálnější než kdy dříve: Můj blog nyní podporuje překlady do 43 jazyků. Ano, včetně klingonštiny! 🖖 (Qapla'!)

V plánu byl plně automatický překlad v reálném čase založený na rozpoznání jazyka prohlížeče. Spoiler: Fungovalo to jen částečně. Je vidět, že AI je sice působivá, ale ještě není úplně „tam“, kde bychom ji chtěli mít.

Řešení: Teď prostě každý příspěvek předem přeložím do všech stanovených jazyků, což je také mnohem lepší pro vyhledávače (SEO). Pokud by automatické rozpoznání náhodou nezafungovalo, můžete si preferovaný jazyk nastavit ručně pomocí ikony zeměkoule, což se pak jednoduše uloží do cookie.

Překlady se nyní provádějí pomocí Gemini 3 Flash, což přináší překvapivě dobré výsledky. Člověk by ale měl AI bedlivě hlídat: V prvním hromadném průchodu byly omylem přeloženy i tagy, což samozřejmě nebylo v plánu.

Kód je i nadále k dispozici (v případě zájmu mi prostě napište zprávu) 👍 Mějte však na paměti, že systém nyní vyžaduje vlastní Gemini API klíč 🔑.

Bez dlouhého rozmýšlení jsem svůj blog převedl z WriteFreely na vlastní řešení: MD-Blog (MD samozřejmě znamená Markdown). Spouštěčem byla neúspěšná aktualizace starého systému – nakonec to ale byl dokonalý impuls k tomu, abych vše radikálně zjednodušil a získal plnou kontrolu nad designem.

Jádrem jsou jednoduché Markdown soubory ve složce data/, které se za běhu převádějí do moderního HTML. Výsledek je bleskově rychlý, obejde se bez databáze a díky vlastnímu designovému systému (včetně tmavého režimu) vypadá přesně tak, jak jsem si představoval. Dokonce i moderní tlačítko pro sdílení na Mastodonu je nyní přímo součástí.

Pokud máte zájem o kód nebo toto štíhlé nastavení, neváhejte se mi ozvat přes Mastodon!