Alun perin blogini oli suunniteltu puhtaaksi IPv6-projektiksi WireGuardin kautta, koska se pyörii kotipalvelimella (ilmaisia IPv6-osoitteita saa muuten osoitteesta route64.org). Saavutettavuuden parantamiseksi otin nyt käyttöön ulkoisen IPv4-proxyn (kiitos @Larvitz).
Tämän myötä ilmeni kuitenkin heti SSL-ongelmia: Koska alun perin sekä A- että AAAA-tietueet kulkivat proxyn kautta, Let's Encrypt -varmennus epäonnistui palvelimellani.
Ratkaisu: ”IPv6-kikka”
Ratkaisuna oli ohjata AAAA-tietue suoraan palvelimeni WireGuard-IP-osoitteeseen sen sijaan, että sekin kulkisi proxyn kautta.
- Domain:
blog.burningboard.org
- A-tietue (Proxy):
194.28.98.217
- AAAA-tietue (Palvelin):
2a11:6c7:f05:a8::2 (WireGuard)
Tämän suoran WireGuard-IP-osoitteeseen osoittavan AAAA-tietueen ansiosta Let’s Encrypt tavoittaa palvelimeni edelleen suoraan IPv6:n kautta (koska AAAA-tietue on oletuksena ensisijainen) ja myöntää SSL-sertifikaatin. IPv4-liikenne välitetään minulle proxyn kautta salattuna.
Lopullinen konfiguraatio
Jotta viestintä toimisi sujuvasti, meidän piti muokata Caddy-palvelimia:
1. Palvelimellani (NixOS, blog.nix)
Jotta vierailijoiden todelliset IP-osoitteet saapuvat oikein eivätkä korvaudu proxyn IP-osoitteella, proxy on merkittävä luotetuksi:
services.caddy.globalConfig = ''
servers {
trusted_proxies static 2a06:9801:1c:1000::10
}
'';
2. Ulkoisella proxylla (Caddy)
Jotta proxy ottaa yhteyttä palvelimeeni oikein HTTPS-yhteydellä, sen on lähetettävä isäntänimi (SNI) mukana:
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 nyt saavutettavissa sekä IPv4- että IPv6-yhteyksillä, turvallisesti salattuna, ja kotini IP-osoite pysyy silti yksityisenä! 🚀
Tärkeintä ensin: Tutut Markdown-tiedostot pysyvät perustana – olen yksinkertaisesti tämän mutkattoman ratkaisun suuri fani. Konepellin alla on kuitenkin tapahtunut paljon:
Olen viilannut kokoonpanoa melkoisesti:
📂 MD-tiedostot: Blogin rakenne säilyy yksinkertaisena Markdown-pohjaisena.
🌍 Globaalimpi kuin koskaan: Blogini tukee nyt käännöksiä 43 kielelle. Kyllä, mukaan lukien klingoni! 🖖 (Qapla'!)

Suunnitelmana oli täysin automaattinen reaaliaikainen käännös selaimen kielitunnistuksen perusteella. Juonipaljastus: Se toimi vain osittain. Sen huomaa: tekoäly on vaikuttava, mutta ei vielä aivan siellä, missä haluaisimme sen olevan.
Ratkaisu: Käännän nyt jokaisen postauksen etukäteen kaikille määritetyille kielille, mikä on myös huomattavasti parempi hakukoneille (SEO). Jos automaattinen tunnistus ei toimi, voit valita haluamasi kielen manuaalisesti maapallo-kuvakkeen kautta, ja valinta tallennetaan kätevästi evästeen (cookie) avulla.
Käännökset tehdään nyt Gemini 3 Flashilla, joka tuottaa hämmästyttävän hyviä tuloksia. Tekoälyä on kuitenkin syytä vahtia tarkasti: ensimmäisellä massakierroksella myös tagit käännettiin virheellisesti, mikä ei tietenkään ollut tarkoitus.
Koodi on edelleen saatavilla (laita viestiä, jos olet kiinnostunut) 👍 Huomioi kuitenkin, että järjestelmä vaatii nyt oman Gemini API -avaimen 🔑.
Vaihdoin hiljattain blogini WriteFreelystä omaan kehitysprojektiini: MD-Blogiin (MD tarkoittaa tietenkin Markdownia). Syynä oli vanhan järjestelmän epäonnistunut päivitys – loppujen lopuksi se oli kuitenkin täydellinen sysäys yksinkertaistaa kaikki radikaalisti ja ottaa täysi hallinta ulkoasusta.
Ytimenä toimivat yksinkertaiset Markdown-tiedostot data/-kansiossa, jotka muunnetaan ajon aikana nykyaikaiseksi HTML:ksi. Lopputulos on salamannopea, toimii ilman tietokantaa ja näyttää oman design-järjestelmän (mukaan lukien tumma tila) ansiosta juuri siltä, miltä olin kuvitellutkin. Jopa moderni Mastodon-jakopainike on nyt suoraan mukana.
Jos olet kiinnostunut koodista tai tästä kevyestä kokoonpanosta, ota rohkeasti yhteyttä Mastodonissa!
Winboatin taustalla oleva idea on itse asiassa erinomainen, mutta toteutus vaikuttaa tällä hetkellä vielä hieman epävakaalta. Vuoden alussa tehdyn asennuksen jälkeen järjestelmä toimi, mutta tänään ohjelmisto lakkasi kokonaan toimimasta.
Image ilmoitti yllättäen riittämättömästä keskusmuistista (RAM). Yritin vielä korjata ongelman manuaalisesti, mikä kuitenkin valitettavasti teki järjestelmästä lopullisesti käyttökelvottoman. Sen sijaan, että olisin käyttänyt enemmän aikaa vianetsintään, siirryin suoraan Dockurr Windows-imageen – se muodostaa muutenkin Winboatin teknisen perustan.

1. Valmistelu
Koska käytän Podmania, loin ensin tarvittavat hakemistot isäntäjärjestelmääni. Näin tietojen eheys säilyy, jos kontti on luotava uudelleen:
mkdir -p $HOME/Windows/System
mkdir -p $HOME/Windows/Shared
2. Käynnistyskomento
Tärkeä huomautus: Korvaa muuttujien -e USERNAME ja -e PASSWORD paikkamerkit omilla tunnuksillasi.
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
Kun kontti on aktiivinen, voit avata Windows-instanssin suoraan selaimellasi:
http://127.0.0.1:8006

3. Yhteenveto
Yllä mainittu komento piti suorittaa vain kerran. Päivittäisessä käytössä Windows-ympäristöä voi nyt hallita mukavasti näillä lyhytkomennoilla:
- Käynnistäminen:
podman start windows
- Pysäyttäminen:
podman stop windows (tai sammuta suoraan Windowsin sisältä)
- Tilan tarkistaminen:
podman ps -a
Hyödyllisiä linkkejä:
Asensin itselleni oman blogin — ennen kaikkea oppiakseni tuntemaan #NixOS:n paremmin. Yllättäen kaikki sujui melko mutkattomasti.
WriteFreely sopii tähän tarkoitukseen todella hyvin: se on minimalistinen, nopea ottaa käyttöön ja vailla turhaa painolastia. Täydellinen tapa aloittaa ja oppia samalla jotain uutta. Konfiguraatio on miellyttävän selkeä. Muutama asetus kohdilleen, hakemiston valmistelu, käänteinen välityspalvelin eteen — ja valmista tuli.
Tältä näyttää nykyinen NixOS-konfiguraationi sitä varten:
{ 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";
};
# Korjaus ActivityPub-avainten luontiin: federaatio vaatii openssl:n
systemd.services.writefreely.path = [ pkgs.openssl ];
# Datahakemiston automaattinen luonti oikeilla käyttöoikeuksilla
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}
}
'';
}
Siinä se oikeastaan olikin. NixOS tekee tällaisten palveluiden siististä konfiguroinnista ja toistettavuudesta todella helppoa.