Minu blogi // Digitaalne arhiiv

Mõtted, projektid ja tehnilised märkmed

Algselt oli minu blogi seadistus planeeritud puhta IPv6-projektina üle WireGuardi, kuna kogu süsteem jookseb koduserveris (tasuta IPv6-aadresse saab muide lehelt route64.org). Kättesaadavuse parandamiseks lisasin nüüd välise IPv4-proksi (tänud @Larvitz).

Sellega tekkisid aga kohe SSL-probleemid: kuna algselt suunati nii A- kui ka AAAA-kirje läbi proksi, ebaõnnestus Let's Encrypti valideerimine minu serveris.

Lahendus: „IPv6-häkk“

Lahendus oli suunata AAAA-kirje selgesõnaliselt otse minu serveri WireGuardi IP-aadressile, selle asemel et juhtida ka see läbi proksi.

  • Domeen: blog.burningboard.org
  • A-kirje (Proksi): 194.28.98.217
  • AAAA-kirje (Server): 2a11:6c7:f05:a8::2 (WireGuard)

Tänu sellele otsesele AAAA-kirjele minu WireGuardi IP-le jõuab Let’s Encrypt minu serverini jätkuvalt otse IPv6 kaudu (kuna AAAA-kirje on vaikimisi prioriteetne) ja väljastab SSL-sertifikaadi. IPv4-liiklus suunatakse proksi poolt krüpteeritult mulle edasi.

Lõplik konfiguratsioon

Sujuva suhtluse tagamiseks pidime Caddy servereid kohandama:

1. Minu serveris (NixOS, blog.nix)

Et külastajate tegelikud IP-aadressid jõuaksid kohale korrektselt ega saaks proksi IP-ga üle kirjutatud, tuleb see märkida usaldusväärseks:

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

2. Välises proksis (Caddy)

Et proksi pöörduks minu serveri poole korrektselt HTTPS-i kaudu, peab see kaasa saatma hostinime (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
    }
}

Blogi on nüüd kättesaadav nii IPv4 kui ka IPv6 kaudu, turvaliselt krüpteeritud ja minu kodu-IP jääb sellegipoolest privaatseks! 🚀

Kõige olulisem kõigepealt: harjumuspärased Markdown-failid jäävad aluseks – olen lihtsalt selle lihtsa lahenduse suur fänn. Kuid kapoti all on palju toimunud:

Olen seadistustega veidi vaeva näinud:

📂 MD-failid: Blogi struktuur jääb lihtsale Markdowni-põhjale.

🌍 Globaalsem kui kunagi varem: Minu blogi toetab nüüd tõlkeid 43 keelde. Jah, sealhulgas klingoni keelde! 🖖 (Qapla'!)

Plaanis oli täisautomaatne reaalajas tõlge, mis põhineb brauseri keeletuvastusel. Spoiler: see töötas vaid osaliselt. On näha: tehisintellekt on muljetavaldav, kuid mitte veel päris "seal", kus me tahaksime, et see oleks.

Lahendus: Tõlgin nüüd lihtsalt iga postituse eelnevalt kõikidesse määratud keeltesse, mis on ka otsingumootorite (SEO) jaoks oluliselt parem. Kui automaatne tuvastamine ei toimi, saate maakera ikooni kaudu oma eelistatud keele käsitsi määrata, mis salvestatakse seejärel mugavalt küpsise (cookie) abil.

Tõlked tehakse nüüd Gemini 3 Flashiga, mis annab hämmastavalt häid tulemusi. Siiski tuleks tehisintellektil täpselt silma peal hoida: esimese hulgiprotsessi käigus tõlgiti ekslikult ka sildid, mis polnud muidugi nii planeeritud.

Kood on endiselt saadaval (huvi korral kirjutage mulle lihtsalt sõnum) 👍 Pange aga tähele, et süsteem vajab nüüd oma Gemini API võtit 🔑.

Viisin oma blogi lühikese etteteatamisega WriteFreely platvormilt üle enda arendatud lahendusele: MD-Blog (MD tähistab loomulikult Markdowni). Ajendiks oli vana süsteemi ebaõnnestunud uuendus – lõpuks oli see aga täiuslik tõuge kõige radikaalseks lihtsustamiseks ja täieliku kontrolli saavutamiseks disaini üle.

Süsteemi tuumaks on lihtsad Markdowni failid kaustas data/, mis muudetakse reaalajas kaasaegseks HTML-iks. Tulemus on välkskiire, toimib ilma andmebaasita ja tänu oma disainisüsteemile (sealhulgas tume režiim) näeb see nüüd välja täpselt selline, nagu ma ette kujutasin. Isegi kaasaegne Mastodoni jagamisnupp on nüüd otse olemas.

Kui teil on huvi koodi või selle lihtsa seadistuse vastu, võtke minuga julgelt Mastodoni kaudu ühendust!

Tegelikult on #Winboat-i idee suurepärane, kuid teostus tundub hetkel veel veidi ebakindel olevat. Alates paigaldamisest aasta alguses süsteem küll töötas, kuid täna keeldus tarkvara täielikult koostööst.

Image teatas äkitselt ebapiisavast mälust (RAM). Üritasin probleemi veel käsitsi lahendada, mis aga muutis süsteemi kahjuks lõplikult kasutuskõlbmatuks. Selle asemel, et kulutada rohkem aega veaotsingule, läksin otse üle Dockurri Windowsi image'ile – see on niikuinii Winboati tehniline alus.

Veateade

1. Ettevalmistus

Kuna kasutan Podmanit, lõin esmalt oma host-süsteemis vajalikud kataloogid. Nii säilib andmete terviklikkus, kui konteiner on vaja uuesti luua:

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

2. Käivitusmäärang

Oluline märkus: Asenda muutujates -e USERNAME ja -e PASSWORD kohatäitjad oma isiklike sisselogimisandmetega.

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

Niipea kui konteiner on aktiivne, saad Windowsi instantsi avada otse oma brauseris:

http://127.0.0.1:8006

Töötav konteiner

3. Kokkuvõte

Ülaltoodud käsku pidin täitma vaid ühe korra. Igapäevases töös saab Windowsi keskkonda nüüd mugavalt juhtida järgmiste lühikäskudega:

  • Käivitamine: podman start windows
  • Peatamine: podman stop windows (või lülita välja otse Windowsi seest)
  • Oleku kontrollimine: podman ps -a

Kasulikud lingid:

Paigaldasin endale oma blogi — eelkõige selleks, et #NixOS-i paremini tundma õppida. Üllataval kombel sujus see kõik üsna lihtsalt.

WriteFreely sobib selleks väga hästi: minimalistlik, kiiresti seadistatav ja ilma liigse pagasita. Ideaalne, et lihtsalt alustada ja samal ajal midagi juurde õppida. Konfiguratsioon on meeldivalt selge. Mõned valikud paika pandud, kataloog ette valmistatud, pöördproksi (reverse proxy) ette — valmis.

Selline näeb välja minu praegune NixOS-i konfiguratsioon:

{ 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";
  };

  # ActivityPubi võtmete genereerimise parandus: föderatsioon nõuab openssl-i
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # Andmekataloogi automaatne loomine korrektsete õigustega
  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}
    }
  '';
}

See ongi sisuliselt kõik. NixOS teeb selliste teenuste puhta seadistamise ja reprodutseeritavuse hoidmise tõesti lihtsaks.