[{"data":1,"prerenderedAt":345},["ShallowReactive",2],{"post-\u002Fde\u002Fwarum-ich-camiler-org-auf-einem-einzigen-vps-betreibe":3},{"page":4,"translations":199,"nav":207,"related":332,"random":340},{"id":5,"title":6,"body":7,"categories":173,"category":175,"changeHistory":175,"date":176,"description":177,"disclosures":175,"draft":178,"extension":179,"image":180,"imageAlt":181,"kind":182,"lang":183,"meta":184,"navigation":185,"path":186,"publishedAt":175,"readingTime":187,"rights":175,"seo":188,"seoTitle":189,"slug":190,"sources":175,"stem":191,"tags":192,"translationKey":195,"type":196,"updated":197,"__hash__":198},"postsDe\u002Fde\u002Fwarum-ich-camiler-org-auf-einem-einzigen-vps-betreibe.md","Warum ich camiler.org auf einem einzigen VPS betreibe",{"type":8,"value":9,"toc":164},"minimark",[10,34,49,52,60,65,68,79,82,85,89,92,95,98,101,105,108,111,115,118,121,125,128,131,134,138,141,158,161],[11,12,13,21],"blockquote",{},[14,15,16,17],"p",{},"💡 ",[18,19,20],"strong",{},"Kurzfassung:",[22,23,24,28,31],"ul",{},[25,26,27],"li",{},"Statt für jede Aufgabe einen eigenen verwalteten Dienst zu kaufen, habe ich die Dienste mit Docker getrennt und auf einem kleinen VPS gehalten.",[25,29,30],{},"Redis reduziert wiederholtes Rendern von Seiten und Datenbankarbeit. Cloudflare bedient einen großen Teil der statischen Inhalte und Bilder, bevor der Ursprung erreicht wird.",[25,32,33],{},"Die direkte Infrastrukturrechnung bleibt niedrig, aber Wartungsarbeit und das Ausfallrisiko einer einzelnen Maschine bleiben bei mir.",[14,35,36,37,48],{},"Ich entwickle und betreibe ",[38,39,47],"a",{"href":40,"className":41,"rel":43,"target":46},"https:\u002F\u002Fcamiler.org",[42],"dofollow",[44,45],"nofollow","noopener","_blank","camiler.org"," selbst. Als ich das Projekt begann, kostete der VPS ungefähr fünf US-Dollar im Monat.",[14,50,51],{},"Bei diesem Budget ergab ein separater verwalteter Dienst für jedes Thema wenig Sinn. Es ging aber nicht nur um die Rechnung. Jeder zusätzliche Dienst bringt ein weiteres Dashboard, eine weitere Abhängigkeit und einen weiteren Ort, an dem man bei einem Fehler suchen muss.",[14,53,54,55,59],{},"Die Infrastruktur sollte für eine einzelne Person verständlich bleiben: Wo beginne ich bei einem Ausfall, wo liegen dauerhafte Daten und wie verhält sich die Website ohne Cache? Diese Grenzen prägten die Architektur. Die Such- und Inhaltsseite des Projekts behandle ich in ",[38,56,58],{"href":57},"\u002Fde\u002Fcamiler-org-ein-programmatisches-seo-experiment-mit-google-maps-und-openai","camiler.org aufbauen: Ein programmatisches SEO-Experiment mit Google Maps und OpenAI",". Hier geht es darum, wie die Website online bleibt und welche Verantwortung eine geringe Infrastrukturrechnung mit sich bringt.",[61,62,64],"h2",{"id":63},"das-system-in-kürze","Das System in Kürze",[14,66,67],{},"Das gesamte System läuft auf einem VPS; jeder Dienst hat seinen eigenen Docker-Container.",[69,70,76],"pre",{"className":71,"code":73,"language":74,"meta":75},[72],"language-text","Seitenanfrage: User -> Cloudflare -> Traefik -> Nuxt -> Redis\nAPI-Anfrage:    User -> Cloudflare -> Traefik -> Fastify -> Redis \u002F MariaDB\nBildanfrage:    User -> Cloudflare-Cache -> imgproxy -> Cloudflare R2\nBereitstellung: GitHub Actions -> privates Registry -> Bereitstellungs-Webhook -> Container\n","text","",[77,78,73],"code",{"__ignoreMap":75},[14,80,81],{},"Traefik empfängt die Anfragen, die den Server erreichen. Es liest Docker-Labels, um Hostnamen Containern zuzuordnen, erneuert Let's-Encrypt-Zertifikate und beschränkt den IP-Zugriff auf interne Werkzeuge wie Portainer und phpMyAdmin.",[14,83,84],{},"Diese Docker-Integration war der praktische Grund für Traefik: Beim Hinzufügen eines Dienstes kann ich das Routing neben dem Container definieren, statt eine separate Reverse-Proxy-Konfiguration zu pflegen und neu zu laden. Ein wiederkehrender Schritt entfällt. Vor einem falschen Label schützt Traefik jedoch nicht; ich muss weiterhin prüfen, welche Dienste im Internet sichtbar sind und welche Netzwerke jeder Container erreichen kann.",[61,86,88],{"id":87},"auf-einem-kleinen-server-reduzierte-ich-zuerst-wiederholungen","Auf einem kleinen Server reduzierte ich zuerst Wiederholungen",[14,90,91],{},"Das Frontend läuft auf Nuxt 3 mit serverseitigem Rendering. Dieselbe Moscheeseite bei jeder Anfrage neu zu erzeugen, würde begrenzte CPU- und Speicherressourcen für bereits geleistete Arbeit verbrauchen.",[14,93,94],{},"Eine Middleware legt gerendertes HTML komprimiert in Redis ab; ETags vermeiden zusätzlich das Senden unveränderter Inhalte. Ein einfacher Zeit-Cache genügt nicht: Ändert sich ein Moschee-Datensatz, müssen auch zusammenhängende Seiten wie „Moscheen in der Nähe“ ungültig werden. Deshalb unterstützt der Cache tagbasierte Invalidierung.",[14,96,97],{},"Bei einem Redis-Ausfall rendert die Website ohne Cache. Der Server leistet dann mehr Arbeit, aber dauerhafte Daten gehen nicht verloren. Redis ist ein Beschleuniger, keine maßgebliche Datenquelle.",[14,99,100],{},"Das Backend nutzt Fastify, Prisma und MariaDB. Redis hält außerdem häufig verwendete Abfrageergebnisse und Zähler für Ratenbegrenzungen vor. Die verfügbaren Pakete deckten nicht die gewünschte Kombination aus Routen-, Nutzer-, Gruppen- und globalen Limits ab; dafür schrieb ich eine kleine Middleware. Sie gibt Kontrolle, macht aber auch die Wartung zu meiner Verantwortung.",[61,102,104],{"id":103},"bildverkehr-vom-vps-fernhalten","Bildverkehr vom VPS fernhalten",[14,106,107],{},"Moscheebilder müssen in verschiedenen Größen und Formaten ausgeliefert werden. Die Originale liegen in Cloudflare R2; imgproxy erzeugt bei Bedarf Größe und Format. Cloudflare kann das Ergebnis am Netzwerkrand zwischenspeichern. Wiederholte Anfragen erreichen damit oft weder VPS noch imgproxy oder R2.",[14,109,110],{},"Das senkt Rechen- und Netzwerklast auf dem kleinen Server. Die S3-kompatible Schnittstelle von R2 eröffnet zudem einen Weg zu einem anderen S3-Anbieter oder MinIO. Kompatibilität macht den Umzug aber nicht mühelos: Dateien zu kopieren wäre womöglich der einfache Teil; Zugangsdaten, Cache-Regeln und der Dateifluss der Anwendung müssten sich weiterhin ändern.",[61,112,114],{"id":113},"bereitstellung-bewusst-klein-halten","Bereitstellung bewusst klein halten",[14,116,117],{},"Bei einem Push in den Hauptbranch erstellt GitHub Actions das relevante Docker-Image und lädt es in eine private Registry. Anschließend ruft es einen kleinen Webhook auf dem Server auf, der den betreffenden Container mit dem neuen Image neu startet.",[14,119,120],{},"Diese Pipeline ist nicht ambitioniert. Sie erspart mir, mich auf dem Server anzumelden und Bereitstellungsbefehle von Hand auszuführen, lässt jeden Schritt aber sichtbar. Für ein Ein-Personen-Projekt genügt das. Portainer nutze ich für Containerstatus und Protokolle, phpMyAdmin für gelegentliche Datenbankprüfungen. Beide sind per IP eingeschränkt und liegen nicht im normalen Anfragepfad.",[61,122,124],{"id":123},"niedrige-monatsrechnung-aber-keine-einfache-gesamtkostenrechnung","Niedrige Monatsrechnung, aber keine einfache Gesamtkostenrechnung",[14,126,127],{},"Ein einzelner kleiner VPS hält die direkte Rechnung niedrig. Es wäre verführerisch, den Unterschied zu verwalteten Diensten vollständig als Ersparnis zu bezeichnen. Ich aktualisiere aber auch den Server, beobachte Container, behebe fehlgeschlagene Bereitstellungen und kontrolliere die Cache-Invalidierung. Einen Teil der Ersparnis bezahle ich mit meiner Zeit.",[14,129,130],{},"Das größere Risiko ist Ausfallzeit. Docker trennt Dienste, aber Nuxt, Fastify, Redis und MariaDB laufen trotzdem auf derselben Maschine. Fällt der Host aus, halten getrennte Container die Website nicht online.",[14,132,133],{},"Dieses Risiko akzeptiere ich heute: camiler.org erzielt keinen Umsatz, und ich betreibe es allein. Unter diesen Bedingungen gibt es keinen wirtschaftlichen Grund für eine teurere Hochverfügbarkeitsarchitektur. Ändern sich die Bedingungen, gibt es keinen Grund, der jetzigen Architektur treu zu bleiben.",[61,135,137],{"id":136},"wann-ich-den-einzelnen-vps-verlassen-würde","Wann ich den einzelnen VPS verlassen würde",[14,139,140],{},"Ich würde die Entscheidung überdenken, bevor der Server schlicht keine Kapazität mehr hat. Klare Auslöser wären:",[22,142,143,146,149,152,155],{},[25,144,145],{},"wenn die Kosten eines Ausfalls höher werden als ein zweiter Host und automatisierte Wiederherstellung;",[25,147,148],{},"wenn Datenbank-, Bildverarbeitungs- oder SSR-Last andere Dienste stört;",[25,150,151],{},"wenn mehr als eine Person oder ein Team unabhängige Kontrolle über die Infrastruktur braucht;",[25,153,154],{},"wenn Anforderungen an Sicherung, Wiederherstellung, Audit oder Compliance die aktuelle Lösung übersteigen;",[25,156,157],{},"wenn meine Wartungszeit teurer wird als die verwalteten Dienste, die sie ersetzt.",[14,159,160],{},"Dann müsste nicht alles neu geschrieben werden. Datenbank, Anwendung oder Bildverarbeitung könnten auf getrennte Kapazität umziehen; Cloudflare und R2 könnten bleiben oder ersetzt werden. Genau hier ist Docker für mich nützlich: Die Dienste können heute eine Maschine teilen, ohne einen praktischen Weg zur späteren Trennung zu schließen.",[14,162,163],{},"camiler.org auf einem VPS zu betreiben ist kein technischer Kunstgriff. So erfülle ich die heutigen Anforderungen ohne unnötige Rechnungen und Wartungsarbeit. Der Preis ist niedrig, die Grenzen sind bekannt, und ich weiß, wo ich bei einem Fehler suchen muss. Die Entscheidung ändert sich, wenn Ausfallrisiko, Verkehrslast oder Wartungskosten ein Niveau erreichen, das ich nicht mehr akzeptieren kann.",{"title":75,"searchDepth":165,"depth":165,"links":166},2,[167,168,169,170,171,172],{"id":63,"depth":165,"text":64},{"id":87,"depth":165,"text":88},{"id":103,"depth":165,"text":104},{"id":113,"depth":165,"text":114},{"id":123,"depth":165,"text":124},{"id":136,"depth":165,"text":137},[174],"engineering",null,"2025-07-02","Wie ich Docker, Redis und Cloudflare einsetze, um camiler.org auf einem kleinen VPS zu betreiben, welche Probleme das löst und welche Risiken bei mir bleiben.",false,"md","\u002Fimages\u002Fhero\u002Fcamiler-infra.avif","In einer Serverablage liegen modulare Dienstbausteine unter einer Cloud-Schicht mit blauen Elementen.","Building","de",{},true,"\u002Fde\u002Fwarum-ich-camiler-org-auf-einem-einzigen-vps-betreibe",5,{"title":6,"description":177},"Einen Produktions-Web-Stack mit Docker und Cloudflare auf einem VPS betreiben","warum-ich-camiler-org-auf-einem-einzigen-vps-betreibe","de\u002Fwarum-ich-camiler-org-auf-einem-einzigen-vps-betreibe",[193,194],"projects","infrastructure","camiler-infra","post","2026-08-27","7Lx2OITHZv5jD4WUwMrUmG23lLoXjvmDIK9L_O8fPKo",{"de":200,"en":201,"tr":204},{"path":186,"title":6},{"path":202,"title":203},"\u002Fhow-i-built-a-modern-infrastructure-using-open-source-tools-and-the-power-of-cloudflare","Why I Run camiler.org on a Single VPS",{"path":205,"title":206},"\u002Ftr\u002Fcloudflare-docker-ve-acik-kaynak-araclarla-bir-altyapi-kurmak-camiler-orgun-teknik-hikayesi","Camiler.org'u Neden Tek VPS Üzerinde Çalıştırıyorum?",{"prev":208,"next":211,"others":214,"lucky":331,"readingTime":187},{"path":209,"title":210},"\u002Fde\u002Flead-management-im-medizintourismus-echtzeit-vertriebssystem","Lead-Management im Medizintourismus: Von der manuellen Zuordnung zum Echtzeit-Vertriebssystem",{"path":212,"title":213},"\u002Fde\u002Fwas-wir-beim-aufbau-eines-gesundheits-chatbots-fuer-internationale-patienten-gelernt-haben","Was wir beim Aufbau eines Gesundheits-Chatbots für internationale Patienten gelernt haben",[215,218,221,224,227,230,233,236,239,242,245,248,249,252,255,258,261,264,267,270,273,276,279,282,285,288,291,294,295,298,301,304,307,310,313,316,319,322,325,328],{"path":216,"title":217},"\u002Fde\u002Fwann-reicht-ein-ki-modell","Wann reicht ein KI-Modell?",{"path":219,"title":220},"\u002Fde\u002Fvom-fragenstellen-zum-delegieren-was-die-codex-studie-zeigt","Vom Fragenstellen zum Delegieren: Was die Codex-Studie zeigt",{"path":222,"title":223},"\u002Fde\u002Fwer-schoepft-die-produktivitaetsgewinne-aus-ki-ab","Wer schöpft die Produktivitätsgewinne aus KI ab?",{"path":225,"title":226},"\u002Fde\u002Fknow-how-abzurufen-ist-nicht-dasselbe-wie-es-aufzubauen","Know-how abzurufen ist nicht dasselbe, wie es aufzubauen",{"path":228,"title":229},"\u002Fde\u002Fist-ihre-datenbasis-bereit-fuer-ki","Ist Ihre Datenbasis bereit für KI? Beginnen Sie mit der Entscheidung",{"path":231,"title":232},"\u002Fde\u002Fbankkonto-api-integration-warum-skalierung-teuer-wird","Eine Bank anzubinden ist einfach. Vierzig am Laufen zu halten nicht.",{"path":234,"title":235},"\u002Fde\u002F1m-impressionen-pro-monat-0-umsatz-programmatische-seo-nachbetrachtung","1 Mio. Impressionen pro Monat, 0 $ Umsatz: Eine programmatische SEO-Nachbetrachtung",{"path":237,"title":238},"\u002Fde\u002Fredar-ki-gestuetzte-zusammenfassungen-fuer-kap-meldungen-und-offene-quellen","Redar: KI-gestützte Zusammenfassungen für KAP-Meldungen und offene Quellen",{"path":240,"title":241},"\u002Fde\u002Fki-hat-code-billig-gemacht-pruefung-ist-weiterhin-teuer","KI hat Code billig gemacht. Prüfung ist weiterhin teuer.",{"path":243,"title":244},"\u002Fde\u002Fwas-ist-aus-rankextension-geworden","Was ist aus RankExtension geworden?",{"path":246,"title":247},"\u002Fde\u002Fproductlog-die-plattform-die-ich-zuerst-fuer-mich-selbst-gebaut-habe","ProductLog: Die Plattform, die ich zuerst für mich selbst gebaut habe",{"path":209,"title":210},{"path":250,"title":251},"\u002Fde\u002Fdie-illusion-der-ki-sichtbarkeit-was-bings-citation-share-daten-wirklich-zeigen","Die Illusion der KI-Sichtbarkeit: Was Bings Citation-Share-Daten wirklich zeigen",{"path":253,"title":254},"\u002Fde\u002Fbuild-in-public-im-ki-zeitalter-was-sie-teilen-und-was-privat-bleiben-sollte","Build in Public im KI-Zeitalter: Was Sie teilen und was privat bleiben sollte",{"path":256,"title":257},"\u002Fde\u002Fdie-schwelle-ist-auf-null-gefallen","Die Schwelle ist auf null gefallen: Was ProductLog mich über öffentliches Bauen gelehrt hat",{"path":259,"title":260},"\u002Fde\u002Fvon-wordpress-zu-nuxt-eine-ki-gestuetzte-content-pipeline","Von WordPress zu Nuxt: Eine KI-gestützte Content-Pipeline bauen",{"path":262,"title":263},"\u002Fde\u002Fmit-dem-geschaeftsproblem-beginnen-nicht-mit-dem-ki-modell","Mit dem Geschäftsproblem beginnen, nicht mit dem KI-Modell",{"path":265,"title":266},"\u002Fde\u002Ferzielt-ihr-ki-system-tatsaechlich-geschaeftsergebnisse","Erzielt Ihr KI-System tatsächlich Geschäftsergebnisse?",{"path":268,"title":269},"\u002Fde\u002Fwie-viel-befugnis-sollte-ein-ki-system-haben","Wie viel Befugnis sollte ein KI-System haben?",{"path":271,"title":272},"\u002Fde\u002Fki-verringert-einstellungen-ohne-entlassungen","KI verringert Einstellungen ohne Entlassungen",{"path":274,"title":275},"\u002Fde\u002Fzufriedene-kunden-zu-haben-reicht-nicht-sie-muessen-nachfassen","Zufriedene Kunden zu haben reicht nicht. Sie müssen nachfassen.",{"path":277,"title":278},"\u002Fde\u002Ftechnologie-verwalten-und-das-unternehmen-veraendern-sind-nicht-dasselbe","Technologie verwalten und das Unternehmen verändern sind nicht dasselbe",{"path":280,"title":281},"\u002Fde\u002Fdie-ki-produktivitaetsbasis-verschiebt-sich-schneller-als-wir-denken","KI war nicht immer so gut. Wir haben uns nur daran gewöhnt.",{"path":283,"title":284},"\u002Fde\u002Fwissen-sie-wie-abhaengig-ihr-unternehmen-von-ki-ist","Wissen Sie, wie abhängig Ihr Unternehmen von KI ist?",{"path":286,"title":287},"\u002Fde\u002Fllms-txt-war-nie-der-punkt","llms.txt war nie der Punkt",{"path":289,"title":290},"\u002Fde\u002Ftuerkeis-erste-echtzeit-mystery-shopping-berichtsplattform","Türkeis erste Echtzeit-Berichtsplattform für Mystery Shopping",{"path":292,"title":293},"\u002Fde\u002Fdie-aera-des-vorherigen-vibe-coders-beginnt","Die Ära des ‚vorherigen Vibe Coders‘ beginnt",{"path":212,"title":213},{"path":296,"title":297},"\u002Fde\u002Frest-api-qualitaet-in-ki-gestuetzter-entwicklung-sichern","REST-API-Qualität in KI-gestützter Entwicklung sichern",{"path":299,"title":300},"\u002Fde\u002Fwebsite-relaunch-schrittweise-steuern","Einen Button testen, einen kompletten Website-Relaunch als sicher ansehen",{"path":302,"title":303},"\u002Fde\u002Fki-sichtbarkeit-sank-vor-der-suche-die-google-daten-die-meine-theorie-aenderten","KI-Sichtbarkeit sank vor der Suche: Die Google-Daten, die meine Theorie änderten",{"path":305,"title":306},"\u002Fde\u002Fwann-braucht-unternehmens-ki-tatsaechlich-rag","Wann braucht Unternehmens-KI tatsächlich RAG?",{"path":308,"title":309},"\u002Fde\u002Fwarum-vertrieb-und-andere-abteilungen-aneinandergeraten","Warum Vertrieb und andere Abteilungen immer wieder aneinandergeraten",{"path":311,"title":312},"\u002Fde\u002Fende-des-programmierens-oder-neue-renaissance","Ende des Programmierens oder neue Renaissance? Die unsichtbare Krise der KI",{"path":314,"title":315},"\u002Fde\u002Fcontent-pruning-eine-fallstudie-aus-der-praxis","Content Pruning: Eine Fallstudie aus der Praxis",{"path":317,"title":318},"\u002Fde\u002Fwann-brauchen-sie-tatsaechlich-einen-ki-agenten","Wann brauchen Sie tatsächlich einen KI-Agenten?",{"path":320,"title":321},"\u002Fde\u002Ffunktionieren-ki-sichtbarkeits-tools-wirklich","Funktionieren KI-Sichtbarkeits-Tools wirklich? Was sie tatsächlich messen",{"path":323,"title":324},"\u002Fde\u002Fbar-oder-raten-die-geschichte-hinter-pesintaksit","Bar oder Raten? Die Geschichte hinter PeşinTaksit",{"path":326,"title":327},"\u002Fde\u002Fbraucht-unternehmens-ki-wirklich-fine-tuning","Braucht Unternehmens-KI wirklich Fine-Tuning?",{"path":329,"title":330},"\u002Fde\u002Fwann-braucht-prozessautomatisierung-tatsaechlich-ki","Wann braucht Prozessautomatisierung tatsächlich KI?",{"path":243,"title":244},[333,335,337,338],{"path":234,"title":235,"date":334},"2026-06-21",{"path":237,"title":238,"date":336},"2025-10-30",{"path":323,"title":324,"date":336},{"path":243,"title":244,"date":339},"2025-06-05",[341,342,344],{"path":57,"title":58,"date":339},{"path":209,"title":210,"date":343},"2025-06-26",{"path":296,"title":297,"date":197},1788263959242]