Kantoor aan huis (maar dan echt)
Er zat nog één gat in het principe waar deze hele setup op draait (dus: ‘lokaal als het kan, online als het moet’). Mijn bestanden staan al lang niet meer in een Big Tech-datacenter. Die staan netjes geordend in mijn Nextcloud, gewoon op een Raspberry Pi in de trapkast. Maar zodra ik zo’n bestand wilde gaan bewerken, hield dat ‘lekker-vanuit-huis’-gevoel nog op. Dan werd het downloaden, openen in iets lokaals, opslaan en weer terugzetten. Werkbaar, maar het voelde alsof ik steeds bij de buren moest gaan koken.
Sinds kort is er Euro-Office: een Europese fork van de ONLYOFFICE-documentserver, opgezet in het Nextcloud-ecosysteem, netjes als AGPL-gelicenseerd. Precies het soort legoblokje waar deze stack groot mee is geworden. Dus die ging ergens op het kasteel.
Maar wáár zet je zoiets neer…
Mijn eerste reflex was: bij Nextcloud, dus op de Pi. Maar een documentserver is niet bepaald een lichtgewicht: het image alleen al is ruim zeven gigabyte, en de server rendert en converteert er flink op los. De Pi heeft het al druk genoeg met Nextcloud, Pi-hole en het thuisnetwerk zelf. Dus werd het de tweedehands Lenovo ThinkCentre die hier al draait voor de lokale AI: genoeg geheugen, en Fietje & EuroLLM vinden het vast gezellig, zo’n buurman die de hele dag spreadsheets zit te lezen.
Dat is meteen ook de nettere architectuur: de opslag (Nextcloud) en de bewerking (Euro-Office) zijn twee losse onderdelen op twee aparte machines. Valt de één om, dan staat de ander er nog.
De documentatie klopt (niet helemaal)
De installatie zelf is een container en een koppel-app in Nextcloud. Lekker easy, zou je denken. De officiële documentatie noemt netjes een versienummer om op vast te pinnen - alleen bestaat dat versienummer niet in de registry. De echte tags dragen een v-prefix die de docs vergeten zijn. Klein dingetje, snel gevonden, maar het bevestigt een huisregel die we na een eerder Nextcloud-incident strak aanhouden: versies pin je vast, en een documentserver houd je buiten elke automatische update. Een editor die door zo’n automatische update stukgaat terwijl ik bijvoorbeeld twee weken op vakantie ben, betekent twee weken geen documenten. In de vakantie werk je niet, dat klopt maar updates doe ik voortaan als ik er zelf bij ben, met een kop koffie en de logs open om de voortgang te checken.
Drie adressen en een geheim
Het venijn zat, zoals meestal, in de staart. Of in dit geval niet in de container maar in de verbindingen ermee. Zo’n koppeling heeft namelijk niet één adres, maar drie. Nextcloud moet de documentserver makkelijk kunnen vinden (intern netwerk). De documentserver moet de bestanden bij Nextcloud kunnen ophalen (ook intern, al moet je hem expliciet toestemming geven om überhaupt met interne adressen te praten - een verstandige default, die eerst even dwarszit). En dan de derde, de verraderlijke: de browser praat rechtstreeks met de documentserver. Niet via Nextcloud, maar zelf.
En omdat Nextcloud hier over https loopt, weigert elke browser een editor die over een ‘kale’ http binnenkomt - dat heet gemengde content, dus wordt terecht geblokkeerd. De oplossing was gelukkig al bekend: weer even een subdomein erbij, de Caddy op de VPS als voordeur gebruiken en veilig via de WireGuard-tunnel naar binnen. Zelfde patroon als de lokale AI al gebruikt. Zelfs de valkuil was al bekend: de editor leunt zwaar op websockets, en voor precies die combinatie was hier al een workaround van gedocumenteerd uit een vorig deelproject. Dat alles opschrijven blijkt dan toch wel weer handig. Die ezel loopt netjes om de tweede steen heen…
De drie adressen delen verder één geheim (letterlijk, een JWT-sleutel), zodat niet iedereen die het subdomein weet te vinden ook meteen documenten kan bewerken.
Poort 8095, twee keer
Eerlijkheidshalve ook de kruimel die deze klus blootlegde: poort 8095 bleek hier inmiddels twee levens te leiden. Op de Pi serveert hij de nieuwslezer, op de Lenovo nu de documentserver. Geen conflict - want andere machines - maar wel iets wat over een half jaar misschien hoofdpijn kost, als het niet gedocumenteerd was geworden. Een opgeruimde poort-lijst is ook infrastructuur, zeg maar.
De test die er toe doet
De echte test kwam onverwacht een dag later, vanaf een terras in Valencia. Brakke hotelwifi op mijn telefoon, de Nextcloud-app, en een oude spreadsheet - zo oud dat er nog 19% btw in de totaalregel staat, dus die stamt van vóór oktober 2012. Even wachten (de eerste keer laden trekt de hele editor binnen), en daar stond hij: een vijftien jaar oud rekenblad, bewerkbaar in de browser, geserveerd vanaf een tweedehands pc thuis, via een tunnel en een voordeur die allebei van mezelf zijn. Er zijn vast strakkere manieren om het voor elkaar te krijgen, maar dit voelde wel erg lekker.
Wat dit wel en niet is
Even voor de eerlijkheid, Euro-Office is een fork, en een fork erft zijn codebasis van elders. De soevereiniteitswinst zit dit keer niet in de bron, maar in de licentie en de exit: AGPL, eigen hardware, eigen data, en als het Euro-Office project morgen zou stoppen (liever niet!), draait mijn container gewoon door tot ik iets anders gevonden heb. Dat is geen onafhankelijkheid van de hele keten - die bestaat in dit soort setups niet - maar het is wel het verschil tussen huren en hebben. Mijn documenten stonden al thuis. Nu wordt er ook vanuit huis aan gewerkt. Maar dan echt.
--JB
Gebruikte onderdelen: Euro-Office documentserver (v9.3.2, Docker, gepind) op de Lenovo M920s (pilab), Nextcloud met de eurooffice-koppelapp op de Pi, Caddy op de Hetzner-VPS als voordeur, WireGuard als tunnel. De klus is grotendeels door Claude uitgevoerd via MCP - de beslissingen en gemaakte keuzes zijn van mij. Oftewel: het betere teamwerk!