[{"data":1,"prerenderedAt":1506},["ShallowReactive",2],{"navigation-de":3,"content-urls":13,"pagesContext-de-2":153,"pagesContext-de-3":179,"authorsContext-de-jeroenbach":199,"postsContext-de-2-undefined":216},[4,7,10],{"label":5,"to":6},"Blog","\u002Fposts",{"label":8,"to":9},"Portfolio","\u002Fde\u002Fcontent\u002F20-portfolio",{"label":11,"to":12},"Über mich","\u002Fde\u002Fcontent\u002F30-uber-mich",{"page":14,"blogPost":76,"blog":152},{"1":15,"10":32,"20":42,"30":52,"404":63},{"en":16,"nl":26,"de":29},{"title":17,"path":18,"stem":19,"contentId":20,"url":21,"dateModified":22,"slug":23,"locale":24,"type":25},"Home","\u002Fcontent\u002Fhome","content\u002F1.home",1,"","2025-11-02T18:00:00",null,"en","page",{"title":17,"path":18,"stem":19,"contentId":20,"url":27,"dateModified":22,"slug":23,"locale":28,"type":25},"\u002Fnl","nl",{"title":17,"path":18,"stem":19,"contentId":20,"url":30,"dateModified":22,"slug":23,"locale":31,"type":25},"\u002Fde","de",{"en":33,"nl":38,"de":40},{"title":5,"path":34,"stem":35,"contentId":36,"url":6,"dateModified":37,"slug":23,"locale":24,"type":25},"\u002Fcontent\u002Fposts","content\u002F10.posts",10,"2025-10-26T18:00:00",{"title":5,"path":34,"stem":35,"contentId":36,"url":39,"dateModified":37,"slug":23,"locale":28,"type":25},"\u002Fnl\u002Fposts",{"title":5,"path":34,"stem":35,"contentId":36,"url":41,"dateModified":37,"slug":23,"locale":31,"type":25},"\u002Fde\u002Fposts",{"en":43,"nl":49,"de":51},{"title":8,"path":44,"stem":45,"contentId":46,"url":47,"dateModified":48,"slug":23,"locale":24,"type":25},"\u002Fcontent\u002Fportfolio","content\u002F20.portfolio",20,"\u002Fcontent\u002F20-portfolio","2026-07-12T18:00:00",{"title":8,"path":44,"stem":45,"contentId":46,"url":50,"dateModified":48,"slug":23,"locale":28,"type":25},"\u002Fnl\u002Fcontent\u002F20-portfolio",{"title":8,"path":44,"stem":45,"contentId":46,"url":9,"dateModified":48,"slug":23,"locale":31,"type":25},{"en":53,"nl":59,"de":62},{"title":54,"path":55,"stem":56,"contentId":57,"url":58,"dateModified":48,"slug":23,"locale":24,"type":25},"About","\u002Fcontent\u002Fabout","content\u002F30.about",30,"\u002Fcontent\u002F30-about",{"title":60,"path":55,"stem":56,"contentId":57,"url":61,"dateModified":48,"slug":23,"locale":28,"type":25},"Over","\u002Fnl\u002Fcontent\u002F30-over",{"title":11,"path":55,"stem":56,"contentId":57,"url":12,"dateModified":48,"slug":23,"locale":31,"type":25},{"en":64,"nl":70,"de":73},{"title":65,"path":66,"stem":67,"contentId":68,"url":69,"dateModified":22,"slug":23,"locale":24,"type":25},"Page not found","\u002Fcontent\u002Fpage-not-found","content\u002F404.page-not-found",404,"\u002Fcontent\u002F404-page-not-found",{"title":71,"path":66,"stem":67,"contentId":68,"url":72,"dateModified":22,"slug":23,"locale":28,"type":25},"Pagina niet gevonden","\u002Fnl\u002Fcontent\u002F404-pagina-niet-gevonden",{"title":74,"path":66,"stem":67,"contentId":68,"url":75,"dateModified":22,"slug":23,"locale":31,"type":25},"Seite nicht gefunden","\u002Fde\u002Fcontent\u002F404-seite-nicht-gefunden",{"1":77,"2":91,"3":106,"4":123,"5":138},{"en":78,"nl":85,"de":88},{"title":79,"path":80,"stem":81,"contentId":20,"dateModified":82,"slug":23,"url":83,"locale":24,"type":84},"Mastering Conditional Property Types with Vue 3.3 Generics","\u002Fposts\u002F1","posts\u002F1","2025-05-27T11:30:00","\u002Fposts\u002F1-mastering-conditional-property-types-with-vue-3_3-generics","blogPost",{"title":86,"path":80,"stem":81,"contentId":20,"dateModified":82,"slug":23,"url":87,"locale":28,"type":84},"Conditionele Property Types beheersen met Vue 3.3 Generics","\u002Fnl\u002Fposts\u002F1-conditionele-property-types-beheersen-met-vue-3_3-generics",{"title":89,"path":80,"stem":81,"contentId":20,"dateModified":82,"slug":23,"url":90,"locale":31,"type":84},"Bedingte Property-Typen mit Vue 3.3 Generics meistern","\u002Fde\u002Fposts\u002F1-bedingte-property-typen-mit-vue-3_3-generics-meistern",{"en":92,"nl":99,"de":102},{"title":93,"path":94,"stem":95,"contentId":96,"dateModified":97,"slug":23,"url":98,"locale":24,"type":84},"Ditching the Cookie Banners: Run Plausible Analytics on Azure Kubernetes","\u002Fposts\u002F2","posts\u002F2",2,"2025-10-04T13:00:00","\u002Fposts\u002F2-ditching-the-cookie-banners:-run-plausible-analytics-on-azure-kubernetes",{"title":100,"path":94,"stem":95,"contentId":96,"dateModified":97,"slug":23,"url":101,"locale":28,"type":84},"Afscheid van Cookie Banners: Draai Plausible Analytics op Azure Kubernetes","\u002Fnl\u002Fposts\u002F2-afscheid-van-cookie-banners:-draai-plausible-analytics-op-azure-kubernetes",{"title":103,"path":94,"stem":95,"contentId":96,"dateModified":97,"slug":104,"url":105,"locale":31,"type":84},"Abschied von Cookie-Bannern: Plausible Analytics auf Azure Kubernetes betreiben","plausible-analytics-azure-kubernetes-ohne-cookie-banner","\u002Fde\u002Fposts\u002F2-plausible-analytics-azure-kubernetes-ohne-cookie-banner",{"en":107,"nl":115,"de":119},{"title":108,"path":109,"stem":110,"contentId":111,"dateModified":112,"slug":113,"url":114,"locale":24,"type":84},"Track how many people read your articles, using Plausible.io, Vue.js and Azure functions","\u002Fposts\u002F3","posts\u002F3",3,"2025-08-03T15:45:00","track-article-reads-plausible-vue-azure-functions","\u002Fposts\u002F3-track-article-reads-plausible-vue-azure-functions",{"title":116,"path":109,"stem":110,"contentId":111,"dateModified":112,"slug":117,"url":118,"locale":28,"type":84},"Volg hoeveel mensen je artikelen lezen, met Plausible.io, Vue.js en Azure functions","artikel-lezingen-volgen-plausible-vue-azure-functions","\u002Fnl\u002Fposts\u002F3-artikel-lezingen-volgen-plausible-vue-azure-functions",{"title":120,"path":109,"stem":110,"contentId":111,"dateModified":112,"slug":121,"url":122,"locale":31,"type":84},"Verfolgen Sie, wie viele Menschen Ihre Artikel lesen, mit Plausible.io, Vue.js und Azure Functions","artikel-aufrufe-verfolgen-plausible-vue-azure-functions","\u002Fde\u002Fposts\u002F3-artikel-aufrufe-verfolgen-plausible-vue-azure-functions",{"en":124,"nl":131,"de":134},{"title":125,"path":126,"stem":127,"contentId":128,"dateModified":129,"slug":23,"url":130,"locale":24,"type":84},"Deploy a production-ready Kubernetes Cluster on Azure with Terraform","\u002Fposts\u002F4","posts\u002F4",4,"2025-12-06T21:00:00","\u002Fposts\u002F4-deploy-a-production-ready-kubernetes-cluster-on-azure-with-terraform",{"title":132,"path":126,"stem":127,"contentId":128,"dateModified":129,"slug":23,"url":133,"locale":28,"type":84},"Implementeer een productie-klaar Kubernetes Cluster op Azure met Terraform","\u002Fnl\u002Fposts\u002F4-implementeer-een-productie-klaar-kubernetes-cluster-op-azure-met-terraform",{"title":135,"path":126,"stem":127,"contentId":128,"dateModified":129,"slug":136,"url":137,"locale":31,"type":84},"Einen produktionsreifen Kubernetes-Cluster auf Azure mit Terraform bereitstellen","produktionsreifer-kubernetes-cluster-azure-terraform","\u002Fde\u002Fposts\u002F4-produktionsreifer-kubernetes-cluster-azure-terraform",{"en":139,"nl":146,"de":149},{"title":140,"path":141,"stem":142,"contentId":143,"dateModified":144,"slug":23,"url":145,"locale":24,"type":84},"Array to Map conversion in Typescript, with type safety","\u002Fposts\u002F5","posts\u002F5",5,"2025-09-29T21:00:00","\u002Fposts\u002F5-array-to-map-conversion-in-typescript-with-type-safety",{"title":147,"path":141,"stem":142,"contentId":143,"dateModified":144,"slug":23,"url":148,"locale":28,"type":84},"Array naar Map conversie in Typescript, met type veiligheid","\u002Fnl\u002Fposts\u002F5-array-naar-map-conversie-in-typescript-met-type-veiligheid",{"title":150,"path":141,"stem":142,"contentId":143,"dateModified":144,"slug":23,"url":151,"locale":31,"type":84},"Array zu Map Konvertierung in TypeScript, mit Typsicherheit","\u002Fde\u002Fposts\u002F5-array-zu-map-konvertierung-in-typescript-mit-typsicherheit",{},{"id":154,"title":155,"body":156,"canonicalUrl":23,"company":23,"contentId":96,"dateModified":23,"datePublished":23,"description":162,"draft":165,"enableProse":165,"excludeFromNavigation":165,"extension":166,"imageAlt":23,"imageUrl":23,"meta":167,"navigation":173,"partial":173,"path":174,"seo":175,"slug":23,"stem":176,"url":177,"__hash__":178},"pages_de\u002Fcontent\u002F_footer.md","Über Jeroen Bach",{"type":157,"value":158,"toc":163},"minimark",[159],[160,161,162],"p",{},"Entworfen in Figma und erstellt mit Vue.js, Nuxt.js und Tailwind CSS.\nBereitgestellt über Cloudflare Pages und Cloudflare Workers, wobei die API auf Azure Kubernetes Service läuft.\nWebsite-Analysen werden von Plausible Analytics betrieben, ebenfalls bereitgestellt mit Azure Kubernetes Service.",{"title":21,"searchDepth":96,"depth":96,"links":164},[],false,"md",{"readingTime":168},{"text":169,"minutes":170,"time":171,"words":172},"1 min read",0.19,11400,38,true,"\u002Fcontent\u002F_footer",{"title":155,"description":162},"content\u002F_footer","\u002Fde\u002Fcontent\u002F2-uber-jeroen-bach","BLLqEovxxJ3L4C_b_KvMwzx1PlCKy3d9WRuX4SHlvHU",{"id":180,"title":181,"body":182,"canonicalUrl":23,"company":23,"contentId":111,"dateModified":23,"datePublished":23,"description":186,"draft":165,"enableProse":165,"excludeFromNavigation":165,"extension":166,"imageAlt":23,"imageUrl":23,"meta":189,"navigation":173,"partial":173,"path":194,"seo":195,"slug":23,"stem":196,"url":197,"__hash__":198},"pages_de\u002Fcontent\u002F_footer-about.md","Footer About",{"type":157,"value":183,"toc":187},[184],[160,185,186],{},"Ich bin Engineering Manager mit 15 Jahren Erfahrung in der Kombination von praktischer Ingenieursarbeit und Menschenführung.\nDie größte Zufriedenheit finde ich darin, die Bedingungen zu schaffen, unter denen ein Team seine beste Arbeit leisten kann.\nDieser Blog ist der Ort, an dem ich Techniken und Erkenntnisse zum Erstellen großartiger Software teile, inspiriert von realen Projekten.",{"title":21,"searchDepth":96,"depth":96,"links":188},[],{"readingTime":190},{"text":169,"minutes":191,"time":192,"words":193},0.275,16500,55,"\u002Fcontent\u002F_footer-about",{"description":186},"content\u002F_footer-about","\u002Fde\u002Fcontent\u002F3-footer-about","JvPnDX3b8uiLVBqSdJwhE9Pd7OW34Wst9X3a36HtVTs",{"id":200,"company":201,"extension":205,"fullName":206,"github":207,"homePage":208,"imageUrl":204,"linkedIn":209,"meta":210,"role":211,"stem":212,"twitter":213,"userName":214,"__hash__":215},"authors_de\u002Fautoren\u002Fjeroenbach.yaml",{"name":202,"url":203,"imageUrl":204},"Bach.Software","https:\u002F\u002Fbach.software","\u002FJEROEN-4238-SQUARE-zoom.jpeg","yaml","Jeroen Bach","https:\u002F\u002Fgithub.com\u002Fjeroenbach","https:\u002F\u002Fbach.software\u002Fpages\u002Fabout","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fjeroenbach\u002F",{},"Engineering Manager","autoren\u002Fjeroenbach","https:\u002F\u002Fx.com\u002Fjeroenbach","jeroenbach","LAWAl6OxkIQenUN8NiVc-wx8Lal_pDP10NTrZa6s78o",{"id":217,"title":103,"authorName":214,"body":218,"canonicalUrl":23,"category":1483,"contentId":96,"dateModified":97,"datePublished":1484,"description":1485,"draft":165,"excerpt":1486,"extension":166,"imageAlt":1490,"imagePosition":1491,"imageUrl":1492,"keywords":1493,"meta":1495,"navigation":173,"path":94,"readingTime":1496,"seo":1501,"slug":104,"stem":95,"url":105,"__hash__":1502,"author":1503},"posts_de\u002Fposts\u002F2.md",{"type":157,"value":219,"toc":1477},[220,223,234,253,258,261,264,274,278,281,284,288,291,294,301,307,310,338,343,350,361,364,367,634,648,1034,1041,1056,1063,1086,1365,1375,1380,1384,1414,1417,1444,1451,1465,1468,1473],[160,221,222],{},"Seit geraumer Zeit suche ich nach Möglichkeiten, Website-Analysen zu erfassen, ohne diese lästigen Einwilligungsbanner anzeigen zu müssen.\nWenn Sie schon immer Website-Analysen ohne Kompromisse bei Datenschutz oder Benutzererfahrung wollten, ist dieser Artikel genau richtig für Sie.",[160,224,225,226,233],{},"In diesem Leitfaden stelle ich Ihnen ",[227,228,232],"a",{"href":229,"rel":230},"https:\u002F\u002Fplausible.io\u002F",[231],"nofollow","Plausible Analytics"," vor - eine leichtgewichtige, quelloffene, datenschutzorientierte Alternative zu Google Analytics -\nund führe Sie durch die Einrichtung auf einem kostengünstigen Kubernetes-Cluster in Azure.",[235,236,237],"blockquote",{},[160,238,239,243,244,248,249,252],{},[240,241,242],"strong",{},"Update (Aug 2025):"," Azure hat die ",[245,246,247],"em",{},"Basic Load Balancer"," SKU ausgemustert. Wenn Sie diesem Leitfaden folgen, stellen Sie sicher, dass Sie stattdessen den ",[240,250,251],{},"Standard Load Balancer"," verwenden.\nDie Standard SKU fügt Ihren monatlichen Kosten rund 18,- Euro hinzu, ist aber jetzt die einzige unterstützte Option für AKS-Cluster.",[254,255,257],"h2",{"id":256},"was-ist-plausibleio","Was ist Plausible.io?",[160,259,260],{},"Plausible.io ist ein einfaches, aber leistungsstarkes Analysetool, das mit Fokus auf Datenschutz entwickelt wurde. Im Gegensatz zu Google Analytics\nverwendet Plausible keine Cookies und sammelt keine personenbezogenen Daten. Dadurch können Sie den Cookie-Einwilligungsbanner komplett weglassen\nund bleiben dennoch konform mit der DSGVO und anderen Datenschutzgesetzen.",[160,262,263],{},"Es ist eine großartige Option für Websites, denen Benutzerfreundlichkeit, Performance und der Respekt vor der Privatsphäre der Besucher wichtig sind.",[160,265,266,267,273],{},"Das Beste daran? Sie können es selbst betreiben. Sie können mit ihrer ",[227,268,272],{"href":269,"rel":270,":target":271},"https:\u002F\u002Fplausible.io\u002F#pricing",[231],"\\_blank","gehosteten Cloud-Version"," beginnen, die mit einer kostenlosen Testversion kommt -\nperfekt, wenn Sie es ohne Einrichtungsaufwand testen möchten. Wenn Ihnen gefällt, was Sie sehen, können Sie entweder bei ihrem Abonnement bleiben oder die volle Kontrolle durch Self-Hosting übernehmen.",[254,275,277],{"id":276},"self-hosting-vs-gehostete-lösung","Self-Hosting vs. Gehostete Lösung",[160,279,280],{},"Self-Hosting ist ideal, wenn Sie wie ich Entwickler sind und zufällig noch etwas Azure-Guthaben übrig haben.\nEs gibt Ihnen volle Kontrolle und kann sehr kosteneffektiv sein. Aber wenn das nicht Ihre Situation ist, ist die gehostete Lösung wahrscheinlich die wirtschaftlichere und problemlosere Wahl.",[160,282,283],{},"In jedem Fall macht es Plausible leicht, loszulegen - und in diesem Artikel zeige ich Ihnen, wie Sie es selbst mit Docker und Kubernetes auf Azure einrichten.",[254,285,287],{"id":286},"kostengünstiges-plausibleio-hosting-mit-azure-kubernetes","Kostengünstiges Plausible.io-Hosting mit Azure Kubernetes",[160,289,290],{},"In diesem Artikel zeige ich Ihnen die günstigste Möglichkeit, Plausible.io auf Azure Kubernetes Service (AKS) zu hosten.",[160,292,293],{},"Um Ihnen eine Vorstellung zu geben, was Sie erwarten können: Der Betrieb dieses Setups für einen vollen Monat kostet mich rund 35 € und das beinhaltet tägliche inkrementelle Backups.",[235,295,296],{},[160,297,298,300],{},[240,299,242],{}," Aufgrund der Kosten des Standard Load Balancers werden dies jetzt etwa 53 € sein.",[302,303],"post-image",{"alt":304,"caption":304,"css-class":305,"src":306},"Azure Kubernetes Kosten für Plausible.io","aspect-[735\u002F560]","posts\u002F2\u002Fplausible-costs.jpg",[160,308,309],{},"Dieses Setup umfasst die folgenden Hauptkomponenten:",[311,312,313,320,326,332],"ul",{},[314,315,316,319],"li",{},[240,317,318],{},"cert-manager"," - zur automatischen Verwaltung von SSL\u002FTLS-Zertifikaten",[314,321,322,325],{},[240,323,324],{},"Let's Encrypt"," - zur Ausstellung kostenloser, vertrauenswürdiger SSL-Zertifikate",[314,327,328,331],{},[240,329,330],{},"NGINX Ingress Controller"," - zur Verarbeitung des Routings und zur Bereitstellung von Plausible im Internet",[314,333,334,337],{},[240,335,336],{},"Plausible.io"," - die datenschutzfreundliche Analyseplattform, die wir bereitstellen",[339,340,342],"h4",{"id":341},"speicher-tipp-verwenden-sie-ephemeral-disks-für-kosteneinsparungen","Speicher-Tipp: Verwenden Sie Ephemeral Disks für Kosteneinsparungen",[160,344,345,346,349],{},"Bei der Erstellung eines AKS-Clusters entstehen die Hauptzusatzkosten durch die ",[240,347,348],{},"persistente OS-Disk",", die standardmäßig für jeden Knoten erstellt wird.",[160,351,352,353,356,357,360],{},"Um Kosten zu reduzieren, können Sie stattdessen ",[240,354,355],{},"ephemere OS-Disks"," verwenden. Diese werden direkt im lokalen Speicher der VM gespeichert und verursachen ",[240,358,359],{},"keine zusätzlichen Kosten",".\nSie sind ideal für zustandslose Workloads oder Setups, bei denen persistenter Speicher separat verwaltet wird - wie in diesem Fall, wo\nwir die Daten von Plausible auf einem angehängten Volume speichern.",[160,362,363],{},"Wenn Sie diesen Weg gehen, stellen Sie sicher, dass Sie die maximal zulässige Disk-Größe für Ihre ausgewählte VM-Größe überprüfen.\nZum Beispiel unterstützt die VM-Größe Standard_B2s bis zu 30 GB ephemeren Speicher - was mehr als ausreichend ist, um die notwendigen Docker-Images zu speichern.",[160,365,366],{},"In der Schritt-für-Schritt-Anleitung unten können Sie die Befehle direkt in der Azure Cloud Shell ausführen.",[368,369,370],"code-group",{},[371,372,377],"pre",{"className":373,"code":374,"filename":375,"language":376,"meta":21,"style":21},"language-sh shiki shiki-themes github-light github-dark","# Ressourcengruppe und Cluster-Namen festlegen\nRESOURCEGROUP=rg-plausible-westeu-prod\nCLUSTERNAME=aks-plausible-westeu-prod\nLOCATION=westeurope\nVMSIZE=Standard_B2s\nVMDISKSIZE=30 # Behalten Sie dies bei der maximalen Größe, die die VM erlaubt (dies ist das Maximum von Standard_B2s)\n\n# Ressourcengruppe erstellen\naz group create --name $RESOURCEGROUP --location $LOCATION\n\n# AKS-Cluster erstellen - mit dem Standard Loadbalancer\naz aks create --resource-group $RESOURCEGROUP --name $CLUSTERNAME \\\n  --node-vm-size $VMSIZE \\\n  --node-count 1 \\\n  --node-resource-group ${RESOURCEGROUP}-nodes \\\n  --load-balancer-sku standard \\\n  --generate-ssh-keys \\\n  --location $LOCATION \\\n  --node-osdisk-type Ephemeral \\\n  --node-osdisk-size $VMDISKSIZE\n\n# Credentials für den AKS-Cluster abrufen (für die folgenden Schritte)\naz aks get-credentials --resource-group $RESOURCEGROUP --name $CLUSTERNAME\n","Cluster erstellen","sh",[378,379,380,388,402,412,422,432,446,452,458,484,488,494,518,529,541,555,566,574,585,596,604,609,615],"code",{"__ignoreMap":21},[381,382,384],"span",{"class":383,"line":20},"line",[381,385,387],{"class":386},"sJ8bj","# Ressourcengruppe und Cluster-Namen festlegen\n",[381,389,390,394,398],{"class":383,"line":96},[381,391,393],{"class":392},"sVt8B","RESOURCEGROUP",[381,395,397],{"class":396},"szBVR","=",[381,399,401],{"class":400},"sZZnC","rg-plausible-westeu-prod\n",[381,403,404,407,409],{"class":383,"line":111},[381,405,406],{"class":392},"CLUSTERNAME",[381,408,397],{"class":396},[381,410,411],{"class":400},"aks-plausible-westeu-prod\n",[381,413,414,417,419],{"class":383,"line":128},[381,415,416],{"class":392},"LOCATION",[381,418,397],{"class":396},[381,420,421],{"class":400},"westeurope\n",[381,423,424,427,429],{"class":383,"line":143},[381,425,426],{"class":392},"VMSIZE",[381,428,397],{"class":396},[381,430,431],{"class":400},"Standard_B2s\n",[381,433,435,438,440,443],{"class":383,"line":434},6,[381,436,437],{"class":392},"VMDISKSIZE",[381,439,397],{"class":396},[381,441,442],{"class":400},"30",[381,444,445],{"class":386}," # Behalten Sie dies bei der maximalen Größe, die die VM erlaubt (dies ist das Maximum von Standard_B2s)\n",[381,447,449],{"class":383,"line":448},7,[381,450,451],{"emptyLinePlaceholder":173},"\n",[381,453,455],{"class":383,"line":454},8,[381,456,457],{"class":386},"# Ressourcengruppe erstellen\n",[381,459,461,465,468,471,475,478,481],{"class":383,"line":460},9,[381,462,464],{"class":463},"sScJk","az",[381,466,467],{"class":400}," group",[381,469,470],{"class":400}," create",[381,472,474],{"class":473},"sj4cs"," --name",[381,476,477],{"class":392}," $RESOURCEGROUP ",[381,479,480],{"class":473},"--location",[381,482,483],{"class":392}," $LOCATION\n",[381,485,486],{"class":383,"line":36},[381,487,451],{"emptyLinePlaceholder":173},[381,489,491],{"class":383,"line":490},11,[381,492,493],{"class":386},"# AKS-Cluster erstellen - mit dem Standard Loadbalancer\n",[381,495,497,499,502,504,507,509,512,515],{"class":383,"line":496},12,[381,498,464],{"class":463},[381,500,501],{"class":400}," aks",[381,503,470],{"class":400},[381,505,506],{"class":473}," --resource-group",[381,508,477],{"class":392},[381,510,511],{"class":473},"--name",[381,513,514],{"class":392}," $CLUSTERNAME ",[381,516,517],{"class":473},"\\\n",[381,519,521,524,527],{"class":383,"line":520},13,[381,522,523],{"class":473},"  --node-vm-size",[381,525,526],{"class":392}," $VMSIZE ",[381,528,517],{"class":473},[381,530,532,535,538],{"class":383,"line":531},14,[381,533,534],{"class":473},"  --node-count",[381,536,537],{"class":473}," 1",[381,539,540],{"class":473}," \\\n",[381,542,544,547,550,553],{"class":383,"line":543},15,[381,545,546],{"class":473},"  --node-resource-group",[381,548,549],{"class":392}," ${RESOURCEGROUP}",[381,551,552],{"class":400},"-nodes",[381,554,540],{"class":473},[381,556,558,561,564],{"class":383,"line":557},16,[381,559,560],{"class":473},"  --load-balancer-sku",[381,562,563],{"class":400}," standard",[381,565,540],{"class":473},[381,567,569,572],{"class":383,"line":568},17,[381,570,571],{"class":473},"  --generate-ssh-keys",[381,573,540],{"class":473},[381,575,577,580,583],{"class":383,"line":576},18,[381,578,579],{"class":473},"  --location",[381,581,582],{"class":392}," $LOCATION ",[381,584,517],{"class":473},[381,586,588,591,594],{"class":383,"line":587},19,[381,589,590],{"class":473},"  --node-osdisk-type",[381,592,593],{"class":400}," Ephemeral",[381,595,540],{"class":473},[381,597,598,601],{"class":383,"line":46},[381,599,600],{"class":473},"  --node-osdisk-size",[381,602,603],{"class":392}," $VMDISKSIZE\n",[381,605,607],{"class":383,"line":606},21,[381,608,451],{"emptyLinePlaceholder":173},[381,610,612],{"class":383,"line":611},22,[381,613,614],{"class":386},"# Credentials für den AKS-Cluster abrufen (für die folgenden Schritte)\n",[381,616,618,620,622,625,627,629,631],{"class":383,"line":617},23,[381,619,464],{"class":463},[381,621,501],{"class":400},[381,623,624],{"class":400}," get-credentials",[381,626,506],{"class":473},[381,628,477],{"class":392},[381,630,511],{"class":473},[381,632,633],{"class":392}," $CLUSTERNAME\n",[160,635,636,637,640,641,644,645,647],{},"Mit dem laufenden Cluster besteht der nächste Schritt darin, einen ",[240,638,639],{},"ClusterIssuer"," zu erstellen, der die Ausstellung von ",[240,642,643],{},"TLS-Zertifikaten"," mit\n",[240,646,324],{}," automatisiert, und einen Ingress einzurichten, der den externen Verkehr verarbeitet und ihn zum richtigen Service innerhalb des Clusters leitet.",[368,649,650],{},[371,651,656],{"className":652,"code":653,"filename":654,"language":655,"meta":21,"style":21},"language-bash shiki shiki-themes github-light github-dark","# E-Mail-Adresse für Let's Encrypt festlegen\nLETSENCRYPTEMAIL=your@email.com # \u003C--- Ändern Sie dies zu Ihrer E-Mail-Adresse\n\n# Letsencrypt Cluster Issuer erstellen\nhelm repo add jetstack https:\u002F\u002Fcharts.jetstack.io\nhelm repo update\nhelm install cert-manager jetstack\u002Fcert-manager \\\n  --namespace cert-manager \\\n  --create-namespace \\\n  --set crds.enabled=true\nkubectl create -f - \u003C\u003CEOF\n---\napiVersion: cert-manager.io\u002Fv1\nkind: ClusterIssuer\nmetadata:\n  name: letsencrypt-production\n  namespace: cert-manager\nspec:\n  acme:\n    # Die ACME-Server-URL\n    server: https:\u002F\u002Facme-v02.api.letsencrypt.org\u002Fdirectory\n    # E-Mail-Adresse für die ACME-Registrierung\n    email: ${LETSENCRYPTEMAIL}\n    # Name eines Secrets zum Speichern des privaten ACME-Kontoschlüssels\n    privateKeySecretRef:\n      name: letsencrypt-production\n    # HTTP-01 Challenge Provider aktivieren\n    solvers:\n    - http01:\n        ingress:\n          class: nginx\nEOF\n\n# NGINX Ingress Controller installieren\nhelm repo add ingress-nginx https:\u002F\u002Fkubernetes.github.io\u002Fingress-nginx\nhelm repo update\nhelm upgrade --install \\\n  ingress-nginx ingress-nginx\u002Fingress-nginx \\\n  --namespace ingress-nginx \\\n  --set controller.service.type=LoadBalancer \\\n  --set controller.service.annotations.\"service\\.beta\\.kubernetes\\.io\u002Fazure-load-balancer-health-probe-request-path\"=\u002Fhealthz \\\n  --set controller.service.externalTrafficPolicy=Local \\\n  --create-namespace\n\necho \"Warte darauf, dass die externe IP dem Ingress Controller zugewiesen wird. Sobald sie verfügbar ist, können Sie dieses Skript stoppen\"\nkubectl get service --namespace ingress-nginx ingress-nginx-controller --output wide --watch\n","Ingress und TLS-Zertifikate konfigurieren","bash",[378,657,658,663,676,680,685,702,711,726,735,742,753,772,777,782,787,792,797,802,807,812,817,822,827,837,843,849,855,861,867,873,878,884,889,894,900,915,924,937,947,956,966,976,986,992,997,1006],{"__ignoreMap":21},[381,659,660],{"class":383,"line":20},[381,661,662],{"class":386},"# E-Mail-Adresse für Let's Encrypt festlegen\n",[381,664,665,668,670,673],{"class":383,"line":96},[381,666,667],{"class":392},"LETSENCRYPTEMAIL",[381,669,397],{"class":396},[381,671,672],{"class":400},"your@email.com",[381,674,675],{"class":386}," # \u003C--- Ändern Sie dies zu Ihrer E-Mail-Adresse\n",[381,677,678],{"class":383,"line":111},[381,679,451],{"emptyLinePlaceholder":173},[381,681,682],{"class":383,"line":128},[381,683,684],{"class":386},"# Letsencrypt Cluster Issuer erstellen\n",[381,686,687,690,693,696,699],{"class":383,"line":143},[381,688,689],{"class":463},"helm",[381,691,692],{"class":400}," repo",[381,694,695],{"class":400}," add",[381,697,698],{"class":400}," jetstack",[381,700,701],{"class":400}," https:\u002F\u002Fcharts.jetstack.io\n",[381,703,704,706,708],{"class":383,"line":434},[381,705,689],{"class":463},[381,707,692],{"class":400},[381,709,710],{"class":400}," update\n",[381,712,713,715,718,721,724],{"class":383,"line":448},[381,714,689],{"class":463},[381,716,717],{"class":400}," install",[381,719,720],{"class":400}," cert-manager",[381,722,723],{"class":400}," jetstack\u002Fcert-manager",[381,725,540],{"class":473},[381,727,728,731,733],{"class":383,"line":454},[381,729,730],{"class":473},"  --namespace",[381,732,720],{"class":400},[381,734,540],{"class":473},[381,736,737,740],{"class":383,"line":460},[381,738,739],{"class":473},"  --create-namespace",[381,741,540],{"class":473},[381,743,744,747,750],{"class":383,"line":36},[381,745,746],{"class":473},"  --set",[381,748,749],{"class":400}," crds.enabled=",[381,751,752],{"class":473},"true\n",[381,754,755,758,760,763,766,769],{"class":383,"line":490},[381,756,757],{"class":463},"kubectl",[381,759,470],{"class":400},[381,761,762],{"class":473}," -f",[381,764,765],{"class":400}," -",[381,767,768],{"class":396}," \u003C\u003C",[381,770,771],{"class":400},"EOF\n",[381,773,774],{"class":383,"line":496},[381,775,776],{"class":400},"---\n",[381,778,779],{"class":383,"line":520},[381,780,781],{"class":400},"apiVersion: cert-manager.io\u002Fv1\n",[381,783,784],{"class":383,"line":531},[381,785,786],{"class":400},"kind: ClusterIssuer\n",[381,788,789],{"class":383,"line":543},[381,790,791],{"class":400},"metadata:\n",[381,793,794],{"class":383,"line":557},[381,795,796],{"class":400},"  name: letsencrypt-production\n",[381,798,799],{"class":383,"line":568},[381,800,801],{"class":400},"  namespace: cert-manager\n",[381,803,804],{"class":383,"line":576},[381,805,806],{"class":400},"spec:\n",[381,808,809],{"class":383,"line":587},[381,810,811],{"class":400},"  acme:\n",[381,813,814],{"class":383,"line":46},[381,815,816],{"class":400},"    # Die ACME-Server-URL\n",[381,818,819],{"class":383,"line":606},[381,820,821],{"class":400},"    server: https:\u002F\u002Facme-v02.api.letsencrypt.org\u002Fdirectory\n",[381,823,824],{"class":383,"line":611},[381,825,826],{"class":400},"    # E-Mail-Adresse für die ACME-Registrierung\n",[381,828,829,832,834],{"class":383,"line":617},[381,830,831],{"class":400},"    email: ${",[381,833,667],{"class":392},[381,835,836],{"class":400},"}\n",[381,838,840],{"class":383,"line":839},24,[381,841,842],{"class":400},"    # Name eines Secrets zum Speichern des privaten ACME-Kontoschlüssels\n",[381,844,846],{"class":383,"line":845},25,[381,847,848],{"class":400},"    privateKeySecretRef:\n",[381,850,852],{"class":383,"line":851},26,[381,853,854],{"class":400},"      name: letsencrypt-production\n",[381,856,858],{"class":383,"line":857},27,[381,859,860],{"class":400},"    # HTTP-01 Challenge Provider aktivieren\n",[381,862,864],{"class":383,"line":863},28,[381,865,866],{"class":400},"    solvers:\n",[381,868,870],{"class":383,"line":869},29,[381,871,872],{"class":400},"    - http01:\n",[381,874,875],{"class":383,"line":57},[381,876,877],{"class":400},"        ingress:\n",[381,879,881],{"class":383,"line":880},31,[381,882,883],{"class":400},"          class: nginx\n",[381,885,887],{"class":383,"line":886},32,[381,888,771],{"class":400},[381,890,892],{"class":383,"line":891},33,[381,893,451],{"emptyLinePlaceholder":173},[381,895,897],{"class":383,"line":896},34,[381,898,899],{"class":386},"# NGINX Ingress Controller installieren\n",[381,901,903,905,907,909,912],{"class":383,"line":902},35,[381,904,689],{"class":463},[381,906,692],{"class":400},[381,908,695],{"class":400},[381,910,911],{"class":400}," ingress-nginx",[381,913,914],{"class":400}," https:\u002F\u002Fkubernetes.github.io\u002Fingress-nginx\n",[381,916,918,920,922],{"class":383,"line":917},36,[381,919,689],{"class":463},[381,921,692],{"class":400},[381,923,710],{"class":400},[381,925,927,929,932,935],{"class":383,"line":926},37,[381,928,689],{"class":463},[381,930,931],{"class":400}," upgrade",[381,933,934],{"class":473}," --install",[381,936,540],{"class":473},[381,938,939,942,945],{"class":383,"line":172},[381,940,941],{"class":400},"  ingress-nginx",[381,943,944],{"class":400}," ingress-nginx\u002Fingress-nginx",[381,946,540],{"class":473},[381,948,950,952,954],{"class":383,"line":949},39,[381,951,730],{"class":473},[381,953,911],{"class":400},[381,955,540],{"class":473},[381,957,959,961,964],{"class":383,"line":958},40,[381,960,746],{"class":473},[381,962,963],{"class":400}," controller.service.type=LoadBalancer",[381,965,540],{"class":473},[381,967,969,971,974],{"class":383,"line":968},41,[381,970,746],{"class":473},[381,972,973],{"class":400}," controller.service.annotations.\"service\\.beta\\.kubernetes\\.io\u002Fazure-load-balancer-health-probe-request-path\"=\u002Fhealthz",[381,975,540],{"class":473},[381,977,979,981,984],{"class":383,"line":978},42,[381,980,746],{"class":473},[381,982,983],{"class":400}," controller.service.externalTrafficPolicy=Local",[381,985,540],{"class":473},[381,987,989],{"class":383,"line":988},43,[381,990,991],{"class":473},"  --create-namespace\n",[381,993,995],{"class":383,"line":994},44,[381,996,451],{"emptyLinePlaceholder":173},[381,998,1000,1003],{"class":383,"line":999},45,[381,1001,1002],{"class":473},"echo",[381,1004,1005],{"class":400}," \"Warte darauf, dass die externe IP dem Ingress Controller zugewiesen wird. Sobald sie verfügbar ist, können Sie dieses Skript stoppen\"\n",[381,1007,1009,1011,1014,1017,1020,1022,1025,1028,1031],{"class":383,"line":1008},46,[381,1010,757],{"class":463},[381,1012,1013],{"class":400}," get",[381,1015,1016],{"class":400}," service",[381,1018,1019],{"class":473}," --namespace",[381,1021,911],{"class":400},[381,1023,1024],{"class":400}," ingress-nginx-controller",[381,1026,1027],{"class":473}," --output",[381,1029,1030],{"class":400}," wide",[381,1032,1033],{"class":473}," --watch\n",[160,1035,1036,1037,1040],{},"Warten Sie, bis die ",[240,1038,1039],{},"externe IP"," verfügbar wird. Sobald sie erscheint, können Sie das Skript stoppen -\nIhr Cluster ist jetzt vollständig eingerichtet, um Dienste auszuführen und sie über diese öffentliche IP-Adresse bereitzustellen.",[160,1042,1043,1044,1047,1048,1051,1052,1055],{},"Als Nächstes gehen Sie zu Ihrem ",[240,1045,1046],{},"DNS-Provider"," und erstellen einen ",[240,1049,1050],{},"DNS-Eintrag",", der auf diese IP verweist.\nZum Beispiel könnten Sie eine Subdomain wie ",[378,1053,1054],{},"plausible.ihredomain.com"," erstellen.",[160,1057,1058,1059,1062],{},"Jetzt werden wir ",[240,1060,1061],{},"Plausible auf dem Cluster installieren",". In der nachfolgenden Konfiguration sehen Sie, dass wir:",[311,1064,1065,1071,1080],{},[314,1066,1067,1070],{},[240,1068,1069],{},"Den Speicher persistent machen"," für sowohl PostgreSQL als auch ClickHouse - hier werden alle Ihre Analysedaten gespeichert. Auf diese Weise können Sie\nIhre Daten einfach sichern und bei Bedarf wiederherstellen. Es ermöglicht auch die Verwaltung der Container, ohne Daten zu verlieren.",[314,1072,1073,1076,1077,1079],{},[240,1074,1075],{},"Den Ingress annotieren"," mit dem ",[240,1078,639],{},", den wir zuvor erstellt haben, damit er automatisch TLS-Zertifikate für uns anfordern und erneuern kann.",[314,1081,1082,1085],{},[240,1083,1084],{},"Plausible mit dem Ingress verbinden"," und den DNS-Namen für den öffentlichen Zugriff angeben.",[368,1087,1088],{},[371,1089,1092],{"className":652,"code":1090,"filename":1091,"language":655,"meta":21,"style":21},"# DNS-Namen für Plausible festlegen\nPLAUSIBLE_DNS=plausible.ihredomain.com\n\n# Plausible Analytics mit Helm bereitstellen\nhelm repo add imio https:\u002F\u002Fimio.github.io\u002Fhelm-charts\nhelm repo update\nhelm upgrade --install plausible-analytics imio\u002Fplausible-analytics \\\n  --namespace plausible-analytics \\\n  --create-namespace \\\n  --version 0.4.2 \\\n  --set baseURL=\"http:\u002F\u002F${PLAUSIBLE_DNS}\" \\\n  --set postgresql.primary.persistence.enabled=true \\\n  --set postgresql.primary.persistence.size=1Gi \\\n  --set clickhouse.persistence.enabled=true \\\n  --set clickhouse.persistence.size=8Gi \\\n  --set ingress.enabled=true \\\n  --set ingress.annotations.\"cert-manager\\.io\u002Fcluster-issuer\"=\"letsencrypt-production\" \\\n  --set ingress.annotations.\"kubernetes\\.io\u002Fingress\\.class\"=nginx \\\n  --set ingress.annotations.\"kubernetes\\.io\u002Ftls-acme\"=\"\\\"true\\\"\" \\\n  --set ingress.className=nginx \\\n  --set ingress.hosts[0]=${PLAUSIBLE_DNS} \\\n  --set ingress.paths.path=\u002F \\\n  --set ingress.tls[0].secretName=letsencrypt-production \\\n  --set ingress.tls[0].hosts[0]=${PLAUSIBLE_DNS}\n\n# Bereitstellungsfortschritt überwachen\necho \"Überwache Bereitstellungsfortschritt...\"\nkubectl get pods -n plausible-analytics -w\n\n","CloudShell",[378,1093,1094,1099,1109,1113,1118,1132,1140,1156,1164,1170,1180,1194,1206,1215,1226,1235,1246,1255,1264,1283,1292,1304,1313,1322,1332,1336,1341,1348],{"__ignoreMap":21},[381,1095,1096],{"class":383,"line":20},[381,1097,1098],{"class":386},"# DNS-Namen für Plausible festlegen\n",[381,1100,1101,1104,1106],{"class":383,"line":96},[381,1102,1103],{"class":392},"PLAUSIBLE_DNS",[381,1105,397],{"class":396},[381,1107,1108],{"class":400},"plausible.ihredomain.com\n",[381,1110,1111],{"class":383,"line":111},[381,1112,451],{"emptyLinePlaceholder":173},[381,1114,1115],{"class":383,"line":128},[381,1116,1117],{"class":386},"# Plausible Analytics mit Helm bereitstellen\n",[381,1119,1120,1122,1124,1126,1129],{"class":383,"line":143},[381,1121,689],{"class":463},[381,1123,692],{"class":400},[381,1125,695],{"class":400},[381,1127,1128],{"class":400}," imio",[381,1130,1131],{"class":400}," https:\u002F\u002Fimio.github.io\u002Fhelm-charts\n",[381,1133,1134,1136,1138],{"class":383,"line":434},[381,1135,689],{"class":463},[381,1137,692],{"class":400},[381,1139,710],{"class":400},[381,1141,1142,1144,1146,1148,1151,1154],{"class":383,"line":448},[381,1143,689],{"class":463},[381,1145,931],{"class":400},[381,1147,934],{"class":473},[381,1149,1150],{"class":400}," plausible-analytics",[381,1152,1153],{"class":400}," imio\u002Fplausible-analytics",[381,1155,540],{"class":473},[381,1157,1158,1160,1162],{"class":383,"line":454},[381,1159,730],{"class":473},[381,1161,1150],{"class":400},[381,1163,540],{"class":473},[381,1165,1166,1168],{"class":383,"line":460},[381,1167,739],{"class":473},[381,1169,540],{"class":473},[381,1171,1172,1175,1178],{"class":383,"line":36},[381,1173,1174],{"class":473},"  --version",[381,1176,1177],{"class":473}," 0.4.2",[381,1179,540],{"class":473},[381,1181,1182,1184,1187,1189,1192],{"class":383,"line":490},[381,1183,746],{"class":473},[381,1185,1186],{"class":400}," baseURL=\"http:\u002F\u002F${",[381,1188,1103],{"class":392},[381,1190,1191],{"class":400},"}\"",[381,1193,540],{"class":473},[381,1195,1196,1198,1201,1204],{"class":383,"line":496},[381,1197,746],{"class":473},[381,1199,1200],{"class":400}," postgresql.primary.persistence.enabled=",[381,1202,1203],{"class":473},"true",[381,1205,540],{"class":473},[381,1207,1208,1210,1213],{"class":383,"line":520},[381,1209,746],{"class":473},[381,1211,1212],{"class":400}," postgresql.primary.persistence.size=1Gi",[381,1214,540],{"class":473},[381,1216,1217,1219,1222,1224],{"class":383,"line":531},[381,1218,746],{"class":473},[381,1220,1221],{"class":400}," clickhouse.persistence.enabled=",[381,1223,1203],{"class":473},[381,1225,540],{"class":473},[381,1227,1228,1230,1233],{"class":383,"line":543},[381,1229,746],{"class":473},[381,1231,1232],{"class":400}," clickhouse.persistence.size=8Gi",[381,1234,540],{"class":473},[381,1236,1237,1239,1242,1244],{"class":383,"line":557},[381,1238,746],{"class":473},[381,1240,1241],{"class":400}," ingress.enabled=",[381,1243,1203],{"class":473},[381,1245,540],{"class":473},[381,1247,1248,1250,1253],{"class":383,"line":568},[381,1249,746],{"class":473},[381,1251,1252],{"class":400}," ingress.annotations.\"cert-manager\\.io\u002Fcluster-issuer\"=\"letsencrypt-production\"",[381,1254,540],{"class":473},[381,1256,1257,1259,1262],{"class":383,"line":576},[381,1258,746],{"class":473},[381,1260,1261],{"class":400}," ingress.annotations.\"kubernetes\\.io\u002Fingress\\.class\"=nginx",[381,1263,540],{"class":473},[381,1265,1266,1268,1271,1274,1276,1278,1281],{"class":383,"line":587},[381,1267,746],{"class":473},[381,1269,1270],{"class":400}," ingress.annotations.\"kubernetes\\.io\u002Ftls-acme\"=\"",[381,1272,1273],{"class":473},"\\\"",[381,1275,1203],{"class":400},[381,1277,1273],{"class":473},[381,1279,1280],{"class":400},"\"",[381,1282,540],{"class":473},[381,1284,1285,1287,1290],{"class":383,"line":46},[381,1286,746],{"class":473},[381,1288,1289],{"class":400}," ingress.className=nginx",[381,1291,540],{"class":473},[381,1293,1294,1296,1299,1302],{"class":383,"line":606},[381,1295,746],{"class":473},[381,1297,1298],{"class":400}," ingress.hosts[0]=",[381,1300,1301],{"class":392},"${PLAUSIBLE_DNS} ",[381,1303,517],{"class":473},[381,1305,1306,1308,1311],{"class":383,"line":611},[381,1307,746],{"class":473},[381,1309,1310],{"class":400}," ingress.paths.path=\u002F",[381,1312,540],{"class":473},[381,1314,1315,1317,1320],{"class":383,"line":617},[381,1316,746],{"class":473},[381,1318,1319],{"class":400}," ingress.tls[0].secretName=letsencrypt-production",[381,1321,540],{"class":473},[381,1323,1324,1326,1329],{"class":383,"line":839},[381,1325,746],{"class":473},[381,1327,1328],{"class":400}," ingress.tls[0].hosts[0]=",[381,1330,1331],{"class":392},"${PLAUSIBLE_DNS}\n",[381,1333,1334],{"class":383,"line":845},[381,1335,451],{"emptyLinePlaceholder":173},[381,1337,1338],{"class":383,"line":851},[381,1339,1340],{"class":386},"# Bereitstellungsfortschritt überwachen\n",[381,1342,1343,1345],{"class":383,"line":857},[381,1344,1002],{"class":473},[381,1346,1347],{"class":400}," \"Überwache Bereitstellungsfortschritt...\"\n",[381,1349,1350,1352,1354,1357,1360,1362],{"class":383,"line":863},[381,1351,757],{"class":463},[381,1353,1013],{"class":400},[381,1355,1356],{"class":400}," pods",[381,1358,1359],{"class":473}," -n",[381,1361,1150],{"class":400},[381,1363,1364],{"class":473}," -w\n",[160,1366,1367,1368,1371,1372,1374],{},"Nachdem das Skript abgeschlossen ist, sollten Sie in der Lage sein, auf ",[240,1369,1370],{},"Plausible"," unter dem von Ihnen konfigurierten DNS-Namen zuzugreifen - zum Beispiel\n",[378,1373,1054],{},".",[302,1376],{"alt":1377,"caption":1377,"css-class":1378,"src":1379},"Plausible.io Community-Setup-Bildschirm","aspect-[735\u002F580]","posts\u002F2\u002Fplausible-installed.jpg",[254,1381,1383],{"id":1382},"fazit","Fazit",[160,1385,1386,1387,1390,1391,1393,1394,1397,1398,1401,1402,1405,1406,1409,1410,1413],{},"In diesem Artikel haben wir eine ",[240,1388,1389],{},"kosteneffektive und datenschutzfreundliche Analyselösung"," mit ",[240,1392,336],{}," auf\n",[240,1395,1396],{},"Azure Kubernetes Service (AKS)"," eingerichtet.\nDurch die Nutzung von Kubernetes können wir unsere Analyseplattform ",[240,1399,1400],{},"skalieren",", ",[240,1403,1404],{},"verwalten"," und ",[240,1407,1408],{},"absichern",", während wir konform mit\nDatenschutzbestimmungen bleiben - alles ",[240,1411,1412],{},"ohne"," lästige Cookie-Einwilligungsbanner.",[160,1415,1416],{},"Sie haben gelernt, wie Sie:",[311,1418,1419,1430,1439],{},[314,1420,1421,1422,1425,1426,1429],{},"Den ",[240,1423,1424],{},"günstigstmöglichen AKS-Cluster"," mit Ihrem ",[240,1427,1428],{},"Azure-Guthaben"," konfigurieren",[314,1431,1432,1405,1435,1438],{},[240,1433,1434],{},"Ingress",[240,1436,1437],{},"TLS-Zertifikat-Automatisierung"," mit cert-manager und Let's Encrypt einrichten",[314,1440,1441,1443],{},[240,1442,336],{}," mit persistentem Speicher für PostgreSQL und ClickHouse bereitstellen und betreiben",[160,1445,1446,1447,1450],{},"Dieses Setup bietet ",[240,1448,1449],{},"wertvolle Einblicke in den Website-Traffic",", respektiert die Privatsphäre der Benutzer\nund gibt Ihnen volle Kontrolle über Ihre Daten - alles zu niedrigen monatlichen Kosten.",[160,1452,1453,1454,1401,1457,1460,1461,1464],{},"Wenn Sie nach einer ",[240,1455,1456],{},"leichtgewichtigen",[240,1458,1459],{},"quelloffenen Alternative"," zu ",[240,1462,1463],{},"Google Analytics"," suchen,\nist Plausible.io definitiv eine Überlegung wert.",[160,1466,1467],{},"Wenn Sie Fragen haben oder unterwegs Hilfe benötigen, können Sie sich gerne melden.",[160,1469,1470],{},[240,1471,1472],{},"Viel Erfolg beim Tracking!",[1474,1475,1476],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":21,"searchDepth":96,"depth":96,"links":1478},[1479,1480,1481,1482],{"id":256,"depth":96,"text":257},{"id":276,"depth":96,"text":277},{"id":286,"depth":96,"text":287},{"id":1382,"depth":96,"text":1383},"Kubernetes","2025-04-06T16:11:24","Erfahren Sie, wie Sie einen Azure Kubernetes Cluster einrichten und Plausible.io betreiben. Ein quelloffenes, leichtgewichtiges und datenschutzorientiertes Analysetool, das der EU-DSGVO entspricht und keine Cookie-Einwilligungsbanner erfordert.",{"type":157,"value":1487},[1488],[160,1489,222],{},"Plausible.io, Kubernetes und Azure Logos","object-top","\u002Fposts\u002F2\u002Fcover.jpeg",[1483,1494,336],"Azure",{},{"text":1497,"minutes":1498,"time":1499,"words":1500},"6 min read",5.99,359400,1198,{"title":103,"description":1485},"qThUbMVBPVJJcn6S9M6SS77oyHWG6a2KDzP_gjaV5HI",{"id":200,"company":1504,"extension":205,"fullName":206,"github":207,"homePage":208,"imageUrl":204,"linkedIn":209,"meta":1505,"role":211,"stem":212,"twitter":213,"userName":214,"__hash__":215},{"name":202,"url":203,"imageUrl":204},{},1786173071328]