Môj blog // Digitálny archív

Myšlienky, projekty a technické poznámky

Zobraziť príspevky so značkou: #md-blog Zobraziť všetko ×

Pôvodne bol môj blog nastavený ako čisto IPv6 projekt cez WireGuard, keďže celý beží na domácom serveri (mimochodom, bezplatné IPv6 adresy môžete získať na route64.org). Aby som zvýšil dostupnosť, pridal som teraz externý IPv4 proxy (vďaka @Larvitz).

Okamžite sa však vyskytli problémy so SSL: Keďže pôvodne cez proxy prechádzal záznam A aj AAAA, overenie Let's Encrypt na mojom serveri zlyhalo.

Riešenie: „IPv6 hack“

Riešením bolo nasmerovať AAAA záznam explicitne priamo na WireGuard IP adresu môjho servera, namiesto toho, aby bol tiež vedený cez proxy.

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

Vďaka tomuto priamemu AAAA záznamu na moju WireGuard IP adresu sa Let’s Encrypt naďalej dostane k môjmu serveru priamo cez IPv6 (keďže záznam AAAA je štandardne prioritizovaný) a vystaví SSL certifikát. IPv4 prevádzka je z proxy servera posielaná ku mne v šifrovanej podobe.

Finálna konfigurácia

Aby komunikácia prebiehala hladko, museli sme upraviť Caddy servery:

1. Na mojom serveri (NixOS, blog.nix)

Aby sa skutočné IP adresy návštevníkov prenášali správne a neboli prepísané IP adresou proxy servera, musí byť tento proxy označený ako dôveryhodný:

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

2. Na externom proxy (Caddy)

Aby proxy správne komunikoval s mojím serverom cez HTTPS, musí posielať aj názov hostiteľa (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 teraz dostupný cez IPv4 aj IPv6, je bezpečne zašifrovaný a moja domáca IP adresa napriek tomu zostáva súkromná! 🚀

To najdôležitejšie na úvod: Základom zostávajú známe Markdown súbory – som jednoducho veľkým fanúšikom tohto nekomplikovaného riešenia. Pod kapotou sa však udialo veľa zmien:

Trochu som sa pohral s nastavením:

📂 MD súbory: Štruktúra blogu zostáva jednoduchá, založená na Markdowne.

🌍 Globálnejší než kedykoľvek predtým: Môj blog teraz podporuje preklady do 43 jazykov. Áno, vrátane klingončiny! 🖖 (Qapla'!)

Plánom bol plne automatický preklad v reálnom čase na základe rozpoznania jazyka v prehliadači. Spoiler: Fungovalo to len čiastočne. Je vidieť, že AI je pôsobivá, ale ešte nie je úplne „tam“, kde by sme ju chceli mať.

Riešenie: Teraz jednoducho vopred prekladám každý príspevok do všetkých stanovených jazykov, čo je tiež oveľa lepšie pre vyhľadávače (SEO). Ak by automatické rozpoznávanie náhodou nezafungovalo, môžete si preferovaný jazyk nastaviť manuálne cez ikonu zemegule, čo sa následne jednoducho uloží prostredníctvom cookie.

Preklady sa teraz vykonávajú pomocou Gemini 3 Flash, čo prináša prekvapivo dobré výsledky. Treba však na AI dávať pozor: V prvom hromadnom kole boli omylom preložené aj tagy, čo samozrejme nebolo v pláne.

Kód je naďalej k dispozícii (v prípade záujmu mi stačí napísať správu) 👍 Upozorňujem však, že systém teraz vyžaduje vlastný Gemini API kľúč 🔑.

Svoj blog som bez dlhého váhania prepol z WriteFreely na vlastné riešenie: MD-Blog (skratka MD samozrejme znamená Markdown). Spúšťačom bola neúspešná aktualizácia starého systému – nakoniec to však bol ideálny impulz na radikálne zjednodušenie všetkého a získanie plnej kontroly nad dizajnom.

Základom sú jednoduché Markdown súbory v priečinku data/, ktoré sa počas behu konvertujú do moderného HTML. Výsledok je bleskurýchly, zaobíde sa bez databázy a vďaka vlastnému dizajn systému (vrátane tmavého režimu) teraz vyzerá presne tak, ako som si predstavoval. Dokonca je teraz priamo súčasťou aj moderné tlačidlo na zdieľanie cez Mastodon.

Ak máte záujem o kód alebo toto štíhle nastavenie, pokojne sa mi ozvite cez Mastodon!