Il-Blog tiegħi // Arkivju Diġitali

Ħsibijiet, proġetti u noti tekniċi

Oriġinarjament, is-setup tal-blog tiegħi kien ippjanat bħala proġett IPv6 biss permezz ta' WireGuard, peress li kollox qed jaħdem fuq homeserver (indirizzi IPv6 b'xejn tista' ġġibhom minn route64.org). Biex inżid l-aċċessibbiltà, issa żidt proxy IPv4 estern (Grazzi @Larvitz).

Madankollu, kien hemm problemi tal-SSL immedjatament: Peress li oriġinarjament kemm ir-record A kif ukoll ir-record AAAA kienu għaddejjin mill-proxy, il-validazzjoni ta' Let's Encrypt fuq is-server tiegħi falliet.

Is-soluzzjoni: L-„IPv6-Hack“

Is-soluzzjoni kienet li l-entrata AAAA tiġi ppuntata b'mod espliċitu direttament lejn l-IP tal-WireGuard tas-server tiegħi, minflok ma tgħaddi wkoll mill-proxy.

  • Dominju: blog.burningboard.org
  • A-Record (Proxy): 194.28.98.217
  • AAAA-Record (Server): 2a11:6c7:f05:a8::2 (WireGuard)

Permezz ta' din l-entrata AAAA diretta lejn l-IP tal-WireGuard tiegħi, Let’s Encrypt xorta jilħaq is-server tiegħi direttament permezz tal-IPv6 (peress li r-record AAAA jingħata prijorità b'mod awtomatiku) u joħroġ iċ-ċertifikat SSL. It-traffiku IPv4 jiġi mgħoddi lili mill-proxy b'mod ikkriptat.

Il-konfigurazzjoni finali

Biex il-komunikazzjoni taħdem bla xkiel, kellna naġġustaw is-servers Caddy:

1. Fuq is-server tiegħi (NixOS, blog.nix)

Biex l-IPs reali tal-viżitaturi jaslu b'mod korrett u ma jiġux miktuba fuqhom bl-IP tal-proxy, dan tal-aħħar irid jiġi mmarkat bħala fdat:

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

2. Fuq il-proxy estern (Caddy)

Biex il-proxy jikkomunika mas-server tiegħi b'mod korrett permezz tal-HTTPS, irid jibgħat il-hostname (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
    }
}

Il-blog issa huwa aċċessibbli permezz tal-IPv4 u l-IPv6, ikkriptat b'mod sigur u l-IP tad-dar tiegħi xorta jibqa' privat! 🚀

L-iktar ħaġa importanti l-ewwel: Il-fajls Markdown tas-soltu jibqgħu l-bażi – jien sempliċement dilettant kbir ta' din is-soluzzjoni sempliċi. Iżda taħt il-kappa, inbidlu ħafna affarijiet:

Għamilt xi tibdiliet fis-setup:

📂 MD-Files: L-istruttura tal-blog tibqa' sempliċi fuq bażi ta' Markdown.

🌍 Aktar globali minn qatt qabel: Il-blog tiegħi issa jappoġġja traduzzjonijiet f'43 lingwa. Iva, inkluż il-Klingon! 🖖 (Qapla'!)

Il-pjan kien traduzzjoni f'ħin reali kompletament awtomatika bbażata fuq ir-rikonoxximent tal-lingwa tal-browser. Spoiler: Ħadem biss parzjalment. Wieħed jinnota: L-IA hija impressjonanti, iżda għadha mhix eżattament "hemm" fejn nixtiequha.

Is-soluzzjoni: Issa sempliċement nittraduċi kull post minn qabel fil-lingwi kollha stabbiliti, li huwa wkoll ħafna aħjar għall-magni tat-tiftix (SEO). Jekk ir-rikonoxximent awtomatiku ma jaħdimx, tistgħu tissettjaw il-lingwa preferuta tagħkom manwalment permezz tal-ikona tal-globu, li mbagħad tiġi ffrankata b'mod sempliċi permezz ta' cookie.

It-traduzzjonijiet issa qed isiru b'Gemini 3 Flash, li qed jagħti riżultati tajbin b'mod tal-għaġeb. Madankollu, wieħed għandu joqgħod attent ħafna għall-IA: Fl-ewwel prova bl-ingrossa (bulk), it-tags ġew tradotti bi żball ukoll, li ovvjament ma kienx ippjanat hekk.

Il-kodiċi għadu disponibbli (sempliċement ibagħtuli messaġġ jekk intom interessati) 👍 Imma nnutaw li s-sistema issa teħtieġ Gemini API Key 🔑 tagħha stess.

Biddilt il-blog tiegħi minn WriteFreely għal żvilupp tiegħi stess: MD-Blog (l-MD ovvjament tfisser Markdown). Il-kausa kienet aġġornament li falla tas-sistema l-antika – iżda fl-aħħar mill-aħħar kienet l-ispinta perfetta biex nissimplifika kollox b'mod radikali u nikseb kontroll sħiħ fuq id-disinn.

Il-qalba tas-sistema huma fajls Markdown sempliċi fil-folder data/, li jinqalbu f'HTML modern waqt li s-sit ikun qed jaħdem. Ir-riżultat huwa veloċi ħafna, jaħdem mingħajr database u, grazzi għas-sistema tad-disinn tiegħi stess (inkluż id-Dark Mode), issa jidher eżattament kif immaġinajtu. Anke buttuna moderna biex taqsam fuq Mastodon issa hija inkluża direttament.

Jekk għandkom interess fil-kodiċi jew fis-setup sempliċi, ikkuntattjawni fuq Mastodon!

Fil-verità, l-idea wara #Winboat hija eċċellenti, iżda l-implimentazzjoni tidher li għadha xi ftit instabbli bħalissa. Mill-installazzjoni fil-bidu tas-sena s-sistema kienet qed taħdem, iżda llum is-softwer waqaf jaħdem kompletament.

L-image f'daqqa waħda rrapportat nuqqas ta' memorja (RAM). Ippruvajt nirranġa l-problema manwalment, iżda sfortunatament dan għamel is-sistema inutilizzabbli għal kollox. Minflok ma nħela aktar ħin fit-tfittxija għall-iżbalji, qlibt direttament għad-Dockurr Windows-Image – dan xorta waħda jifforma l-bażi teknika ta' Winboat.

Messaġġ ta' żball

1. Preparazzjoni

Peress li nuża Podman, l-ewwel ħloqt id-direttorji meħtieġa fuq is-sistema host tiegħi. B'dan il-mod, l-integrità tad-dejta tiġi ppreservata f'każ li l-container ikollu jerġa' jinħoloq:

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

2. Il-kmand tal-bidu

Nota importanti: Fil-varjabbli -e USERNAME u -e PASSWORD, ibdel il-placeholder bid-dettalji tal-login personali tiegħek.

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

Ladarba l-container ikun attiv, tista' taċċessa l-istanza tal-Windows direttament permezz tal-browser tiegħek:

http://127.0.0.1:8006

Container jaħdem

3. Sommarju

Il-kmand imsemmi hawn fuq kelli neżegwixxih darba biss. Fl-operat ta' kuljum, l-ambjent tal-Windows issa jista' jiġi kkontrollat b'mod komdu ħafna permezz ta' dawn il-kmandi qosra:

  • Ibda: podman start windows
  • Waqqaf: podman stop windows (jew itfi direttament minn ġo Windows)
  • Iċċekkja l-istatus: podman ps -a

Links addizzjonali:

Installajt il-blog tiegħi stess — l-aktar biex insir naf lil #NixOS aħjar. B'sorpriża, kollox kien pjuttost sempliċi.

WriteFreely huwa tajjeb ħafna għal dan: minimalista, jiġi kkonfigurat malajr u mingħajr ħafna piż żejjed. Perfett biex tibda mill-ewwel u titgħallem xi ħaġa fl-istess ħin. Il-konfigurazzjoni hija ċara u pjaċevoli. Issettjajt ftit għażliet, ippreparajt id-direttorju, poġġejt reverse proxy quddiemu — u lest.

Hekk tidher il-konfigurazzjoni attwali tiegħi ta' NixOS għal dan:

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

  # Fix għall-ġenerazzjoni taċ-ċwievet ActivityPub: Il-federazzjoni teħtieġ openssl
  systemd.services.writefreely.path = [ pkgs.openssl ];

  # Ħolqien awtomatiku tad-direttorju tad-dejta bil-permessi korretti
  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}
    }
  '';
}

Dak kien kollox, bażikament. NixOS jagħmilha verament faċli biex tikkonfigura servizzi bħal dawn b'mod nadif u żżommhom riproduċibbli.