Van kantoor naar apps
Ons hele kantoor draait op één kleine server achter onze eigen Viaalink Relay: projectbeheer, inloggen, wachtwoorden, mail, statistieken, een lokaal AI-model. Hoe het in elkaar zit, waarom de Relay de webserver is, en waarom we er via apps van maken.
TL;DR: Ons kantoor draait op één mini-pc met onze eigen Viaalink Relay ervoor. Elke dienst krijgt een HTTPS-adres onder ons domein, zonder dat er op de router van de machine die hem draait ook maar één poort open hoeft. Omdat de Relay de webserver is, verhuizen we een dienst in een paar minuten naar een andere machine, zonder DNS-wijziging en zonder nieuw certificaat. Nu brengen we deze apps samen als via apps, in een openbare repository.
Eén klein kastje, een heel kantoor
Alles wat we dagelijks gebruiken draait op één mini-pc op kantoor: een Ryzen AI 9 HX 470 met Radeon 890M-graphics en 58 GB geheugen, met Proxmox, dag en nacht aan. Daarop:
| Wat | Waarvoor |
|---|---|
| Onze interne kantoorapplicatiesuite, met een eigen MCP-server en OAuth 2.1-login | Plannen, tickets en sessies, leesbaar voor AI-assistenten |
| Authentik | Eén login voor alles |
| Vaultwarden | Wachtwoorden, alleen via die login |
| Gitea | Pakketten en container-images |
| Redmine en Zammad | Issues en de helpdesk |
| n8n | Automatiseringen tussen al het bovenstaande |
| Umami | Websitestatistieken, zonder cookies |
| Postal en een mailserver die alleen verstuurt | Mail van elke app, via één gateway |
| Firecrawl | Een eigen webcrawler |
| llama.cpp met Open WebUI | Een lokaal AI-model (Gemma) op de ingebouwde grafische chip |
| De contentstudio van Digitale Kraamzorg (CMS, MCP-server en website) en de pijplijn achter vacaturesite nuttigwerk.nl | Werk voor klanten, gebouwd en geserveerd vanaf hetzelfde kastje |
Containers kunnen de grafische chip delen, dus het AI-model en het werk dat het nodig heeft draaien in containers in plaats van volledige virtuele machines.
Hoe een verzoek zijn app vindt
Onze Relay draait op een NAS op hetzelfde kantoor. Die beheert ons domein, het wildcardcertificaat en elke naam. De machine met de apps maakt zelf verbinding met de Relay; er komt niets binnen.
browser
│ https://projects.office.example.com
▼
DNS: *.office.example.com → onze Relay
▼
Relay: HTTPS, certificaat, kiest de machine op naam
▼
de verbinding die die machine met de Relay opende
▼
Caddy op die machine → de app op 127.0.0.1Elk project heeft een via.yaml. Een dienst met public: true krijgt een naam op de Relay; alles zonder die markering heeft helemaal geen route en is dus ook niet per ongeluk van buiten te bereiken. Als de machine opstart, publiceert hij zijn diensten vanzelf opnieuw. Voor iets snels publiceert via expose <poort> één enkele poort.
De Relay is de webserver
Dit is het deel dat vaak gemist wordt. In de meeste opstellingen is de machine die een app draait ook de plek van het certificaat, van de webserverconfiguratie en waar DNS naartoe wijst. Verhuis de app en alle drie verhuizen mee.
Met een Relay blijven alle drie op de Relay. De machine erachter draait alleen de app en houdt één verbinding open. Dat heeft twee gevolgen die we elke week gebruiken.
Een dienst verhuizen kost minuten
Op 31 oktober verhuisden we de contentstudio van Digitale Kraamzorg van een ontwikkelwerkplek naar een container op de kantoorserver. De stappen: stoppen met publiceren op de oude machine, een laatste databasedump, terugzetten op de nieuwe, de aantallen rijen vergelijken, dezelfde namen publiceren vanaf de nieuwe machine. Een paar minuten “niet gevonden”, daarna dezelfde pagina’s als voorheen. Geen DNS-record gewijzigd, geen certificaat uitgegeven, en de AI-assistenten die met de MCP-server praten bleven werken, omdat het adres nooit veranderde.
Eén les: zet de oude publicatie echt uit. Een vergeten ontwikkelkopie op de oude machine publiceerde later dezelfde namen opnieuw en nam de route terug.
Eén naam, meerdere machines
Een Relay kan meerdere machines dezelfde naam laten houden en verzoeken om de beurt over ze verdelen (round-robin). Een machine die steeds faalt krijgt minder verzoeken tot hij hersteld is. Wordt een dienst druk, of wil je een tweede exemplaar ergens anders, dan start je hem op een andere machine onder dezelfde naam. Voor wie hem gebruikt verandert er niets. Zet HTTP load balancer aan onder Network in het dashboard van de Relay; standaard staat die uit. Zie Relay-configuratie.
Via apps
Wat begon als ons eigen kantoor wordt een product. Onze interne kantoorapplicatiesuite bevat 66 verpakte apps, en die zetten we om naar via apps: elk een pakket met een eigen via.yaml, klaar om op je eigen machine te starten en via je eigen Relay te publiceren. Ze verhuizen naar een nieuwe openbare repository, viaalink/apps, met een appcatalogus op viaalink.com en installatie vanuit de Viaalink CLI. De suite waarop ons eigen kantoor draait blijft intern en installeert uit diezelfde catalogus. Zodra de repository open is, linken we hem hier.
Een Relay op je eigen NAS
Onze Relay draait op een NAS, en de jouwe kan dat ook. Het Viaalink Relay-pakket voor ASUSTOR ligt ter beoordeling bij App Central en het Synology-pakket bij Package Center, dus binnenkort zijn ze allebei te downloaden in hun appwinkels. Tot die tijd: Relay op ASUSTOR, en op Synology met Docker.
Alles hierboven werkt vandaag al met een Relay en de Viaalink CLI.
Lees de quick start