Blogom // Digitális archívum

Gondolatok, projektek és technikai jegyzetek

Eredetileg a blog-beállításomat egy tiszta IPv6-projektnek terveztem WireGuardon keresztül, mivel az egész egy otthoni szerveren fut (ingyenes IPv6-címeket egyébként a route64.org oldalon lehet kapni). Az elérhetőség növelése érdekében most beiktattam egy külső IPv4-proxyt (köszönet @Larvitz-nak).

Ezzel azonban azonnal SSL-problémák adódtak: mivel eredetileg mind az A, mind az AAAA rekord a proxyn keresztül futott, a Let's Encrypt hitelesítés meghiúsult a szerveremen.

A megoldás: Az „IPv6-hack”

A megoldás az volt, hogy az AAAA-bejegyzést kifejezetten a szerverem WireGuard IP-címére irányítottam, ahelyett, hogy azt is a proxyn keresztül vezettem volna.

  • Domain: blog.burningboard.org
  • A-rekord (Proxy): 194.28.98.217
  • AAAA-rekord (Szerver): 2a11:6c7:f05:a8::2 (WireGuard)

Ezzel a közvetlen, a WireGuard IP-mre mutató AAAA-bejegyzéssel a Let’s Encrypt továbbra is közvetlenül eléri a szerveremet IPv6-on keresztül (mivel az AAAA-rekord alapértelmezés szerint prioritást élvez), és kiállítja az SSL-tanúsítványt. Az IPv4-forgalmat a proxy titkosítva továbbítja felém.

A végleges konfiguráció

Annak érdekében, hogy a kommunikáció zökkenőmentesen működjön, módosítanunk kellett a Caddy szervereket:

1. A szerveremen (NixOS, blog.nix)

Annak érdekében, hogy a látogatók valódi IP-címei helyesen érkezzenek meg, és ne a proxy IP-címe írja felül őket, a proxyt megbízhatóként kell megjelölni:

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

2. A külső proxyn (Caddy)

Ahhoz, hogy a proxy megfelelően, HTTPS-en keresztül szólítsa meg a szerveremet, el kell küldenie a gépnevet (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
    }
}

A blog mostantól IPv4-en és IPv6-on is elérhető, biztonságosan titkosított, és az otthoni IP-címem továbbra is privát marad! 🚀

A legfontosabb elöljáróban: A megszokott Markdown fájlok maradnak az alapok – egyszerűen nagy rajongója vagyok ennek a sallangmentes megoldásnak. De a motorháztető alatt sok minden történt:

Csavartam egyet a beállításokon:

📂 MD-fájlok: A blog szerkezete továbbra is egyszerű, Markdown-alapú marad.

🌍 Globálisabb, mint valaha: A blogom mostantól 43 nyelven támogatja a fordításokat. Igen, beleértve a klingont is! 🖖 (Qapla'!)

A terv egy teljesen automatikus, a böngésző nyelvfelismerésén alapuló valós idejű fordítás volt. Spoiler: Csak részben működött. Érezhető: az MI lenyűgöző, de még nincs teljesen „ott”, ahol látni szeretnénk.

A megoldás: Mostantól egyszerűen minden bejegyzést előre lefordítok az összes meghatározott nyelvre, ami a keresőoptimalizálás (SEO) szempontjából is sokkal jobb. Ha az automatikus felismerés esetleg nem működne, a földgömb ikon segítségével manuálisan is beállíthatjátok a preferált nyelvet, amelyet a rendszer egyszerűen, sütik (cookie) segítségével tárol.

A fordításokat mostantól a Gemini 3 Flash végzi, ami meglepően jó eredményeket produkál. Azonban érdemes az MI körmére nézni: az első tömeges futtatás során tévedésből a tageket is lefordította, ami természetesen nem így volt tervezve.

A kód továbbra is elérhető (érdeklődés esetén írjatok üzenetet) 👍 De vegyétek figyelembe, hogy a rendszernek mostantól saját Gemini API kulcsra 🔑 van szüksége.

Rövid úton átállítottam a blogomat WriteFreely-ről egy saját fejlesztésre: ez az MD-Blog (az MD természetesen a Markdown rövidítése). A kiváltó ok a régi rendszer egy sikertelen frissítése volt – végül azonban ez adta meg a tökéletes lökést ahhoz, hogy mindent radikálisan leegyszerűsítsek, és teljes kontrollt szerezzek a dizájn felett.

A rendszer szíve a data/ mappában található egyszerű Markdown-fájlok, amelyek futásidőben alakulnak át modern HTML-kóddá. Az eredmény villámgyors, adatbázis nélkül működik, és a saját dizájnrendszernek köszönhetően (beleértve a sötét módot is) most pontosan úgy néz ki, ahogy elképzeltem. Még egy modern Mastodon megosztás gomb is helyet kapott benne.

Ha érdekel titeket a kód vagy ez a letisztult rendszer, keressetek bátran Mastodonon!

A #Winboat mögötti alapötlet valójában kiváló, de a megvalósítás jelenleg még kissé instabilnak tűnik. Az év eleji telepítés óta a rendszer ugyan működött, de ma a szoftver teljesen felmondta a szolgálatot.

Az image hirtelen kevés memóriát (RAM) jelzett. Megpróbáltam manuálisan orvosolni a problémát, ami azonban sajnos végleg használhatatlanná tette a rendszert. Ahelyett, hogy több időt fektettem volna a hibakeresésbe, közvetlenül a Dockurr Windows-image-re váltottam – ez képezi egyébként is a Winboat technikai alapját.

Fehlermeldung

1. Előkészületek

Mivel Podman-t használok, először létrehoztam a szükséges könyvtárakat a gazdagépen. Így megmarad az adatok integritása, ha a konténert újra kellene hozni:

mkdir -p $HOME/Windows/System
mkdir -p $HOME/Windows/Shared

2. Az indító parancs

Fontos megjegyzés: Cseréld le a -e USERNAME és -e PASSWORD változókban a helyőrzőket a saját hozzáférési adataidra.

podman run -d \
  --name windows \
  -p 8006:8006 \
  --device=/dev/kvm \
  --cap-add NET_ADMIN \
  -e RAM_SIZE="8G" \
  -e USERNAME="Carsten" \
  -e PASSWORD="1234" \
  -e LANGUAGE="German" \
  -v $HOME/Windows/System:/storage:Z \
  -v $HOME/Windows/Shared:/shared:Z \
  --stop-timeout 120 \
  dockurr/windows

Amint a konténer aktív, a Windows-példányt közvetlenül a böngésződből érheted el:

http://127.0.0.1:8006

Laufender Container

3. Összegzés

A fent említett parancsot csak egyszer kellett lefuttatnom. A napi használat során a Windows-környezet mostantól kényelmesen vezérelhető ezekkel a rövid parancsokkal:

  • Indítás: podman start windows
  • Leállítás: podman stop windows (vagy állítsd le közvetlenül a Windowson belül)
  • Állapot ellenőrzése: podman ps -a

További linkek:

Telepítettem egy saját blogot — elsősorban azért, hogy jobban megismerjem a #NixOS-t. Meglepő módon az egész folyamat meglehetősen egyszerű volt.

A WriteFreely tökéletesen megfelel erre a célra: minimalista, gyorsan beállítható és sallangmentes. Ideális ahhoz, hogy egyszerűen belevágjunk, és közben tanuljunk is valamit. A konfiguráció kellemesen átlátható. Pár opció beállítása, a könyvtár előkészítése, egy reverse proxy elé — és kész is.

Így néz ki a jelenlegi NixOS konfigurációm hozzá:

{ config, pkgs, ... }:

{
  services.writefreely = {
    enable = true;
    host = "blog.burningboard.org"; 
    settings = {
      server = {
        port = 8080;
        min_log_level = "debug";
      };
      app = {
        host = "https://blog.burningboard.org";
        single_user = true;
        landing = "/read";
        wf_modesty = true;
        federation = true;
        public_stats = true;
        theme = "write";
      };
    };
    stateDir = "/opt/writefreely";
  };

  # Javítás az ActivityPub kulcsgeneráláshoz: a föderációhoz openssl szükséges
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # Az adatkönyvtár automatikus létrehozása a megfelelő jogosultságokkal
  systemd.tmpfiles.rules = [
    "d /opt/writefreely 0700 writefreely writefreely -"
  ];

  services.caddy.virtualHosts."blog.burningboard.org".extraConfig = ''
    reverse_proxy 127.0.0.1:8080 {
      header_up Host {host}
      header_up X-Real-IP {remote_host}
      header_up X-Forwarded-For {remote_host}
      header_up X-Forwarded-Proto {scheme}
    }
  '';
}

Lényegében ennyi az egész. A NixOS valóban egyszerűvé teszi az ilyen szolgáltatások tiszta konfigurálását és reprodukálhatóságát.