[{"data":1,"prerenderedAt":115},["ShallowReactive",2],{"werk-self-hosting-nl":3},{"id":4,"title":5,"body":6,"date":104,"description":105,"draft":106,"extension":107,"meta":108,"metric":104,"metricLabel":104,"navigation":109,"order":110,"path":111,"seo":112,"stem":113,"__hash__":114},"nl\u002Fwerk\u002Fself-hosting.md","Self-hosting op een NAS",{"type":7,"value":8,"toc":95},"minimark",[9,14,23,27,52,55,59,66,69,73,80,84],[10,11,13],"h2",{"id":12},"probleem","Probleem",[15,16,17,18,22],"p",{},"Ik wilde mijn eigen apps zelf hosten: zelf weten waar de data staat en zelf begrijpen wat er tussen een ",[19,20,21],"code",{},"git push"," en een werkende site gebeurt. Wie zelf host, is ook zelf verantwoordelijk voor wat er aan het internet hangt.",[10,24,26],{"id":25},"wat-ik-deed","Wat ik deed",[28,29,30,34,41,44],"ul",{},[31,32,33],"li",{},"Apps draaien als Docker-containers op een NAS.",[31,35,36,37,40],{},"De code staat op een eigen Forgejo. Deployen is een ",[19,38,39],{},"git pull"," op de NAS en de container opnieuw bouwen.",[31,42,43],{},"Een reverse proxy (Nginx Proxy Manager) verzorgt de domeinen en de certificaten van Let's Encrypt.",[31,45,46,47,51],{},"Daarnaast heb ik wat ervaring met Kubernetes en ArgoCD. ",[48,49,50],"strong",{},"TODO:"," in één of twee zinnen beschrijven waar en waarvoor.",[15,53,54],{},"Deze site draait op dezelfde manier.",[10,56,58],{"id":57},"de-beveiligingsfout","De beveiligingsfout",[15,60,61,62,65],{},"Een van mijn eigen sites werd geserveerd door een nginx-container met de standaardconfiguratie, met de hele repository als webroot. Daardoor waren de ",[19,63,64],{},".git","-map, de README en het compose-bestand voor iedereen te downloaden. Ik vond het zelf bij het nalopen van een melding over een omleidingsfout.",[15,67,68],{},"De oplossing: een eigen nginx-configuratie buiten de webroot, die voor dotfiles en andere niet-sitebestanden een 404 geeft. De omleidingsfout zat in dezelfde standaardconfiguratie en ging in dezelfde wijziging mee.",[10,70,72],{"id":71},"wat-ik-mat","Wat ik mat",[15,74,75,76,79],{},"Na de wijziging van buitenaf gecontroleerd: een verzoek naar ",[19,77,78],{},"\u002F.git\u002Fconfig"," geeft een 404 en een omleiding blijft op https. Bij deze site gaat het een stap verder: de container bevat alleen de build-output, dus de repository staat niet eens op de plek die geserveerd wordt.",[10,81,83],{"id":82},"wat-ik-leerde","Wat ik leerde",[28,85,86,89,92],{},[31,87,88],{},"Een standaardconfiguratie is gemaakt om te werken, niet om veilig te zijn.",[31,90,91],{},"Serveer de build, niet de repository.",[31,93,94],{},"Controleer van buitenaf wat bereikbaar is. Van binnenuit ziet alles er goed uit.",{"title":96,"searchDepth":97,"depth":97,"links":98},"",2,[99,100,101,102,103],{"id":12,"depth":97,"text":13},{"id":25,"depth":97,"text":26},{"id":57,"depth":97,"text":58},{"id":71,"depth":97,"text":72},{"id":82,"depth":97,"text":83},null,"Eigen apps live met Docker, Forgejo en een reverse proxy, plus een beveiligingsfout die ik zelf vond en dichtte.",false,"md",{},true,3,"\u002Fwerk\u002Fself-hosting",{"title":5,"description":105},"werk\u002Fself-hosting","dB0Q8xQD5hhYpDXsJ2lPKxOZ5gOcSduE5H5ekppLE3w",1794307541555]