Mano tinklaraštis // Skaitmeninis archyvas

Mintys, projektai ir techninės pastabos

Iš pradžių mano tinklaraščio sąranka buvo planuojama kaip grynas IPv6 projektas per „WireGuard“, nes viskas veikia namų serveryje (beje, nemokamus IPv6 adresus galite gauti route64.org). Norėdamas padidinti pasiekiamumą, pridėjau išorinį IPv4 tarpinį serverį (proxy) (ačiū @Larvitz).

Tačiau iškart iškilo SSL problemų: kadangi iš pradžių tiek A, tiek AAAA įrašai buvo nukreipti per tarpinį serverį, „Let's Encrypt“ patvirtinimas mano serveryje nepavyko.

Sprendimas: „IPv6-Hack“

Sprendimas buvo nukreipti AAAA įrašą tiesiogiai į mano serverio „WireGuard“ IP adresą, užuot jį taip pat leidus per tarpinį serverį.

  • Domenas: blog.burningboard.org
  • A įrašas (Proxy): 194.28.98.217
  • AAAA įrašas (Serveris): 2a11:6c7:f05:a8::2 („WireGuard“)

Dėl šio tiesioginio AAAA įrašo į mano „WireGuard“ IP adresą, „Let’s Encrypt“ ir toliau pasiekia mano serverį tiesiogiai per IPv6 (nes AAAA įrašui pagal numatytuosius nustatymus teikiama pirmenybė) ir išduoda SSL sertifikatą. IPv4 srautas yra užšifruojamas tarpinio serverio ir perduodamas man.

Galutinė konfigūracija

Kad komunikacija vyktų sklandžiai, turėjome pakoreguoti „Caddy“ serverius:

1. Mano serveryje („NixOS“, blog.nix)

Kad tikrieji lankytojų IP adresai būtų gauti teisingai ir nebūtų perrašyti tarpinio serverio IP adresu, šis turi būti pažymėtas kaip patikimas:

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

2. Išoriniame tarpiniame serveryje („Caddy“)

Kad tarpinis serveris teisingai kreiptųsi į mano serverį per HTTPS, jis turi nusiųsti mazgo pavadinimą (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
    }
}

Tinklaraštis dabar pasiekiamas per IPv4 ir IPv6, saugiai užšifruotas, o mano namų IP adresas vis tiek išlieka privatus! 🚀

Svarbiausia informacija: įprasti Markdown failai išlieka pagrindu – tiesiog esu didelis šio paprasto sprendimo gerbėjas. Tačiau „po kapotu“ daug kas pasikeitė:

Šiek tiek pakoregavau nustatymus:

📂 MD failai: tinklaraščio struktūra išlieka paprasta, pagrįsta Markdown.

🌍 Globaliau nei bet kada anksčiau: mano tinklaraštis dabar palaiko vertimus į 43 kalbas. Taip, įskaitant klingonų! 🖖 (Qapla'!)

Buvo planuotas visiškai automatinis vertimas realiuoju laiku, pagrįstas naršyklės kalbos atpažinimu. Spoileris: tai suveikė tik iš dalies. Galima pastebėti: DI yra įspūdingas, bet dar ne visai ten, kur norėtume.

Sprendimas: dabar tiesiog iš anksto išverčiu kiekvieną įrašą į visas nustatytas kalbas, o tai taip pat daug geriau paieškos sistemoms (SEO). Jei automatinis atpažinimas nesuveiktų, per gaublio piktogramą galite rankiniu būdu pasirinkti pageidaujamą kalbą, kuri vėliau paprastai išsaugoma naudojant slapuką (cookie).

Vertimai dabar atliekami naudojant „Gemini 3 Flash“, kuris pateikia stebėtinai gerus rezultatus. Tačiau DI reikia atidžiai stebėti: pirmojo masinio vykdymo metu per klaidą buvo išverstos ir žymos, o tai, žinoma, nebuvo planuota.

Kodas vis dar prieinamas (jei domina, tiesiog parašykite man žinutę) 👍 Tačiau atkreipkite dėmesį, kad sistemai dabar reikalingas nuosavas „Gemini“ API raktas 🔑.

Nieko nelaukęs pakeičiau savo tinklaraštį iš WriteFreely į savo sukurtą sprendimą: MD-Blog (MD, žinoma, reiškia Markdown). Priežastis buvo nepavykęs senosios sistemos atnaujinimas – tačiau galiausiai tai tapo puikiu impulsu viską radikaliai supaprastinti ir įgyti visišką dizaino kontrolę.

Pagrindas yra paprasti Markdown failai data/ aplanke, kurie vykdymo metu paverčiami šiuolaikišku HTML. Rezultatas yra žaibiškas, veikia be duomenų bazės ir dėl nuosavos dizaino sistemos (įskaitant tamsųjį režimą) dabar atrodo būtent taip, kaip ir įsivaizdavau. Netgi šiuolaikiškas Mastodon bendrinimo mygtukas dabar yra integruotas.

Jei domitės kodu ar šia paprasta sąranka, susisiekite su manimi per Mastodon!

Iš tikrųjų #Winboat idėja yra puiki, tačiau įgyvendinimas šiuo metu atrodo šiek tiek nestabilus. Nuo įdiegimo metų pradžioje sistema veikė, tačiau šiandien programinė įranga visiškai nustojo veikti.

Atvaizdas staiga pranešė apie atminties (RAM) trūkumą. Bandžiau problemą išspręsti rankiniu būdu, tačiau tai, deja, galutinai sugadino sistemą. Užuot gaišęs laiką klaidų paieškai, iškart perėjau prie Dockurr Windows atvaizdo – jis ir taip yra techninis Winboat pagrindas.

Klaidos pranešimas

1. Pasiruošimas

Kadangi naudoju Podman, pirmiausia savo pagrindinėje sistemoje (host) sukūriau reikiamus katalogus. Taip išsaugomas duomenų vientisumas, jei konteinerį tektų sukurti iš naujo:

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

2. Paleidimo komanda

Svarbi pastaba: Kintamuosiuose -e USERNAME ir -e PASSWORD pakeiskite vietos užpildus savo asmeniniais prisijungimo duomenimis.

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

Kai tik konteineris taps aktyvus, Windows instanciją galėsite pasiekti tiesiogiai per naršyklę:

http://127.0.0.1:8006

Veikiantis konteineris

3. Apibendrinimas

Aukščiau nurodytą komandą man tereikėjo paleisti vieną kartą. Kasdien naudojant, Windows aplinką dabar galima patogiai valdyti šiomis trumpomis komandomis:

  • Paleidimas: podman start windows
  • Stabdymas: podman stop windows (arba išjungimas tiesiogiai per Windows)
  • Būsenos patikra: podman ps -a

Naudingos nuorodos:

Įsidiegiau savo asmeninį tinklaraštį – pirmiausia tam, kad geriau susipažinčiau su #NixOS. Keista, bet viskas vyko gana paprastai.

„WriteFreely“ tam puikiai tinka: minimalistiška, greitai sukonfigūruojama ir be jokio nereikalingo balasto. Puikus pasirinkimas norint tiesiog pradėti ir kartu ko nors išmokti. Konfigūracija maloniai aiški. Nustatote kelias parinktis, paruošiate katalogą, pridedate atvirkštinį įgaliotąjį serverį (reverse proxy) – ir viskas.

Štai kaip atrodo mano dabartinė „NixOS“ konfigūracija:

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

  # ActivityPub raktų generavimo pataisymas: federacijai reikalingas openssl
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # Automatinis duomenų katalogo sukūrimas su teisingais leidimais
  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}
    }
  '';
}

Iš esmės tai ir viskas. „NixOS“ leidžia tikrai paprastai ir švariai konfigūruoti tokias paslaugas bei užtikrinti jų atkuriamumą.