Prvotno je postava mog bloga bila planirana kao čisti IPv6 projekt putem WireGuarda, budući da se cijela stvar pokreće na kućnom poslužitelju (besplatne IPv6 adrese se, usput, mogu dobiti na route64.org). Kako bih povećao dostupnost, sada sam dodao vanjski IPv4 proxy (hvala @Larvitz).
Pritom su se odmah pojavili SSL problemi: Budući da su prvotno i A i AAAA zapisi išli preko proxyja, Let's Encrypt validacija na mom poslužitelju nije uspjela.
Rješenje: „IPv6 hack“
Rješenje je bilo usmjeriti AAAA zapis eksplicitno izravno na WireGuard IP adresu mog poslužitelja, umjesto da ga također vodim preko proxyja.
- Domena:
blog.burningboard.org
- A zapis (Proxy):
194.28.98.217
- AAAA zapis (Poslužitelj):
2a11:6c7:f05:a8::2 (WireGuard)
Ovim izravnim AAAA zapisom na moju WireGuard IP adresu, Let’s Encrypt i dalje izravno pristupa mom poslužitelju putem IPv6 (budući da AAAA zapis ima prioritet prema zadanim postavkama) i izdaje SSL certifikat. IPv4 promet se od proxyja prosljeđuje meni u kriptiranom obliku.
Konačna konfiguracija
Kako bi komunikacija tekla bez poteškoća, morali smo prilagoditi Caddy poslužitelje:
1. Na mom poslužitelju (NixOS, blog.nix)
Kako bi stvarne IP adrese posjetitelja ispravno stizale i kako ih ne bi prepisala IP adresa proxyja, on mora biti označen kao pouzdan:
services.caddy.globalConfig = ''
servers {
trusted_proxies static 2a06:9801:1c:1000::10
}
'';
2. Na vanjskom proxyju (Caddy)
Kako bi proxy ispravno komunicirao s mojim poslužiteljem putem HTTPS-a, mora poslati naziv hosta (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 sada dostupan putem IPv4 i IPv6, sigurno je kriptiran, a moja kućna IP adresa i dalje ostaje privatna! 🚀
Ono najvažnije za početak: uobičajene Markdown datoteke ostaju osnova – jednostavno sam veliki obožavatelj ovog jednostavnog rješenja. No, ispod haube se puno toga promijenilo:
Malo sam doradio postavke:
📂 MD datoteke: Struktura bloga ostaje jednostavna, temeljena na Markdownu.
🌍 Globalnije nego ikad: Moj blog sada podržava prijevode na 43 jezika. Da, uključujući i klingonski! 🖖 (Qapla'!)

Plan je bio imati potpuno automatski prijevod u stvarnom vremenu temeljen na prepoznavanju jezika preglednika. Spoiler: uspjelo je samo djelomično. Primjećuje se: AI je impresivan, ali još nije sasvim "tamo" gdje bismo željeli da bude.
Rješenje: Sada jednostavno unaprijed prevodim svaki članak na sve zadane jezike, što je također puno bolje za tražilice (SEO). Ako automatsko prepoznavanje ponekad ne proradi, možete ručno postaviti željeni jezik putem ikone globusa, koji se zatim jednostavno sprema putem kolačića.
Prijevodi se sada izvode pomoću modela Gemini 3 Flash, koji daje iznenađujuće dobre rezultate. Međutim, AI-ju treba pažljivo gledati kroz prste: u prvom masovnom prolazu pogrešno su prevedeni i tagovi, što naravno nije bilo planirano.
Kod je i dalje dostupan (ako ste zainteresirani, samo mi pošaljite poruku) 👍 No, imajte na umu da sustav sada zahtijeva vlastiti Gemini API ključ 🔑.
Bez puno oklijevanja prebacio sam svoj blog s platforme WriteFreely na vlastito rješenje: MD-Blog (MD, naravno, stoji za Markdown). Povod je bilo neuspjelo ažuriranje starog sustava – no na kraju je to bio savršen poticaj da sve radikalno pojednostavim i dobijem potpunu kontrolu nad dizajnom.
Srž sustava su jednostavne Markdown datoteke u mapi data/, koje se tijekom izvođenja pretvaraju u moderan HTML. Rezultat je munjevito brz, radi bez baze podataka i zahvaljujući vlastitom sustavu dizajna (uključujući tamni način rada) sada izgleda točno onako kako sam zamislio. Čak je i moderan gumb za dijeljenje na Mastodonu sada izravno uključen.
Ako vas zanima kod ili ovo jednostavno postavljanje, slobodno mi se javite putem Mastodona!
Zapravo je ideja iza #Winboata izvrsna, ali se čini da je implementacija trenutno još uvijek pomalo nestabilna. Iako je sustav radio od instalacije početkom godine, softver je danas potpuno prestao raditi.
Image je iznenada prijavio nedovoljno radne memorije (RAM). Pokušao sam ručno riješiti problem, što je nažalost sustav učinilo trajno neupotrebljivim. Umjesto da trošim više vremena na traženje pogrešaka, prešao sam izravno na Dockurr Windows image – on ionako čini tehničku osnovu Winboata.

1. Priprema
Budući da koristim Podman, prvo sam kreirao potrebne direktorije na svom host sustavu. Tako se čuva integritet podataka u slučaju da se kontejner mora ponovno izraditi:
mkdir -p $HOME/Windows/System
mkdir -p $HOME/Windows/Shared
2. Naredba za pokretanje
Važna napomena: U varijablama -e USERNAME i -e PASSWORD zamijenite rezervirana mjesta svojim osobnim pristupnim podacima.
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
Čim kontejner postane aktivan, Windows instanci možete pristupiti izravno putem preglednika:
http://127.0.0.1:8006

3. Sažetak
Gore navedenu naredbu morao sam izvršiti samo jednom. U svakodnevnom radu, Windows okruženjem sada se može vrlo udobno upravljati putem ovih kratkih naredbi:
- Pokretanje:
podman start windows
- Zaustavljanje:
podman stop windows (ili isključivanje izravno unutar Windowsa)
- Provjera statusa:
podman ps -a
Korisne poveznice:
Instalirao sam vlastiti blog — prvenstveno kako bih bolje upoznao #NixOS. Iznenađujuće, sve je prošlo prilično jednostavno.
WriteFreely se savršeno uklapa u to: minimalistički je, brzo se postavlja i nema suvišnog tereta. Savršeno za brzi početak i usputno učenje. Konfiguracija je ugodno pregledna. Postavi se nekoliko opcija, pripremi direktorij, doda reverse proxy — i to je to.
Ovako izgleda moja trenutna NixOS konfiguracija za to:
{ 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";
};
# Popravak za generiranje ActivityPub ključeva: federacija zahtijeva openssl
systemd.services.writefreely.path = [ pkgs.openssl ];
# Automatsko stvaranje direktorija podataka s ispravnim dozvolama
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}
}
'';
}
To je u biti to. NixOS doista olakšava čisto konfiguriranje ovakvih usluga i njihovo održavanje reproducibilnima.