[{"data":1,"prerenderedAt":5071},["ShallowReactive",2],{"navigation_docs_de":3,"-de-self-hosting-kubernetes":427,"-de-self-hosting-kubernetes-surround":5066},[4,31,117,188,238,271,310,369,378],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":30},"Erste Schritte","i-hugeicons-rocket-01","\u002Fde\u002Fgetting-started","de\u002F01.getting-started",[10,15,20,25],{"title":11,"path":12,"stem":13,"icon":14},"Was ist DDM?","\u002Fde\u002Fgetting-started\u002Fwhat-is-ddm","de\u002F01.getting-started\u002F01.what-is-ddm","i-hugeicons-information-circle",{"title":16,"path":17,"stem":18,"icon":19},"Konto und Anmeldung","\u002Fde\u002Fgetting-started\u002Fsign-in","de\u002F01.getting-started\u002F02.sign-in","i-hugeicons-key-01",{"title":21,"path":22,"stem":23,"icon":24},"KI in DDM","\u002Fde\u002Fgetting-started\u002Fai-in-ddm","de\u002F01.getting-started\u002F03.ai-in-ddm","i-hugeicons-ai-magic",{"title":26,"path":27,"stem":28,"icon":29},"Systemstatus","\u002Fde\u002Fgetting-started\u002Fsystem-status","de\u002F01.getting-started\u002F04.system-status","i-hugeicons-activity-03",false,{"title":32,"icon":33,"path":34,"stem":35,"children":36,"page":30},"CMS","i-hugeicons-dashboard-square-01","\u002Fde\u002Fcms","de\u002F02.cms",[37,42,47,52,57,62,67,72,77,82,87,92,97,102,107,112],{"title":38,"path":39,"stem":40,"icon":41},"Das CMS im Überblick","\u002Fde\u002Fcms\u002Foverview","de\u002F02.cms\u002F01.overview","i-hugeicons-compass-01",{"title":43,"path":44,"stem":45,"icon":46},"Dokumente hochladen","\u002Fde\u002Fcms\u002Fupload","de\u002F02.cms\u002F02.upload","i-hugeicons-upload-01",{"title":48,"path":49,"stem":50,"icon":51},"Kategorien","\u002Fde\u002Fcms\u002Fcategories","de\u002F02.cms\u002F03.categories","i-hugeicons-folder-tree",{"title":53,"path":54,"stem":55,"icon":56},"Dokumente bearbeiten","\u002Fde\u002Fcms\u002Fdocuments","de\u002F02.cms\u002F04.documents","i-hugeicons-file-edit",{"title":58,"path":59,"stem":60,"icon":61},"Suchen und filtern","\u002Fde\u002Fcms\u002Fsearch-and-filters","de\u002F02.cms\u002F05.search-and-filters","i-hugeicons-search-01",{"title":63,"path":64,"stem":65,"icon":66},"Gruppen und Rechte","\u002Fde\u002Fcms\u002Fgroups-and-permissions","de\u002F02.cms\u002F06.groups-and-permissions","i-hugeicons-user-multiple",{"title":68,"path":69,"stem":70,"icon":71},"Benutzer","\u002Fde\u002Fcms\u002Fusers","de\u002F02.cms\u002F07.users","i-hugeicons-user-add-01",{"title":73,"path":74,"stem":75,"icon":76},"Freigaben","\u002Fde\u002Fcms\u002Fapprovals","de\u002F02.cms\u002F08.approvals","i-hugeicons-checkmark-badge-01",{"title":78,"path":79,"stem":80,"icon":81},"Märkte und Übersetzungen","\u002Fde\u002Fcms\u002Fmarkets-and-translations","de\u002F02.cms\u002F09.markets-and-translations","i-hugeicons-globe-02",{"title":83,"path":84,"stem":85,"icon":86},"Notizvorlagen","\u002Fde\u002Fcms\u002Fnote-templates","de\u002F02.cms\u002F10.note-templates","i-hugeicons-layout-01",{"title":88,"path":89,"stem":90,"icon":91},"Nutzung und Audit-Log","\u002Fde\u002Fcms\u002Fusage-and-audit","de\u002F02.cms\u002F11.usage-and-audit","i-hugeicons-chart-column",{"title":93,"path":94,"stem":95,"icon":96},"KI-Assistent","\u002Fde\u002Fcms\u002Fassistant","de\u002F02.cms\u002F12.assistant","i-hugeicons-sparkles",{"title":98,"path":99,"stem":100,"icon":101},"Einstellungen","\u002Fde\u002Fcms\u002Fsettings","de\u002F02.cms\u002F13.settings","i-hugeicons-settings-02",{"title":103,"path":104,"stem":105,"icon":106},"Tarife","\u002Fde\u002Fcms\u002Fplans","de\u002F02.cms\u002F14.plans","i-hugeicons-package",{"title":108,"path":109,"stem":110,"icon":111},"Feature-Wünsche","\u002Fde\u002Fcms\u002Ffeature-requests","de\u002F02.cms\u002F15.feature-requests","i-hugeicons-idea-01",{"title":113,"path":114,"stem":115,"icon":116},"Fehler melden","\u002Fde\u002Fcms\u002Fbug-reports","de\u002F02.cms\u002F16.bug-reports","i-hugeicons-bug-01",{"title":118,"icon":119,"path":120,"stem":121,"children":122,"page":30},"App","i-hugeicons-smart-phone-01","\u002Fde\u002Fapp","de\u002F03.app",[123,128,133,138,143,147,152,157,162,167,170,173,176,179,184],{"title":124,"path":125,"stem":126,"icon":127},"Anmelden und zurechtfinden","\u002Fde\u002Fapp\u002Foverview","de\u002F03.app\u002F01.overview","i-hugeicons-login-03",{"title":129,"path":130,"stem":131,"icon":132},"Tabs und geteilte Ansicht","\u002Fde\u002Fapp\u002Ftabs","de\u002F03.app\u002F02.tabs","i-hugeicons-layout-2-column",{"title":134,"path":135,"stem":136,"icon":137},"Dokumente finden und lesen","\u002Fde\u002Fapp\u002Fdocuments","de\u002F03.app\u002F03.documents","i-hugeicons-file-01",{"title":139,"path":140,"stem":141,"icon":142},"Favoriten","\u002Fde\u002Fapp\u002Ffavorites","de\u002F03.app\u002F04.favorites","i-hugeicons-favourite",{"title":144,"path":145,"stem":146,"icon":61},"Suchen","\u002Fde\u002Fapp\u002Fsearch","de\u002F03.app\u002F05.search",{"title":148,"path":149,"stem":150,"icon":151},"Notizen","\u002Fde\u002Fapp\u002Fnotes","de\u002F03.app\u002F06.notes","i-hugeicons-note-edit",{"title":153,"path":154,"stem":155,"icon":156},"Kalender und Termine","\u002Fde\u002Fapp\u002Fcalendar","de\u002F03.app\u002F07.calendar","i-hugeicons-calendar-03",{"title":158,"path":159,"stem":160,"icon":161},"An Kunden senden","\u002Fde\u002Fapp\u002Foutbox","de\u002F03.app\u002F08.outbox","i-hugeicons-sent",{"title":163,"path":164,"stem":165,"icon":166},"Offline arbeiten","\u002Fde\u002Fapp\u002Foffline","de\u002F03.app\u002F09.offline","i-hugeicons-wifi-off-01",{"title":93,"path":168,"stem":169,"icon":96},"\u002Fde\u002Fapp\u002Fassistant","de\u002F03.app\u002F10.assistant",{"title":98,"path":171,"stem":172,"icon":101},"\u002Fde\u002Fapp\u002Fsettings","de\u002F03.app\u002F11.settings",{"title":108,"path":174,"stem":175,"icon":111},"\u002Fde\u002Fapp\u002Ffeature-requests","de\u002F03.app\u002F12.feature-requests",{"title":113,"path":177,"stem":178,"icon":116},"\u002Fde\u002Fapp\u002Fbug-reports","de\u002F03.app\u002F13.bug-reports",{"title":180,"path":181,"stem":182,"icon":183},"Desktop-App","\u002Fde\u002Fapp\u002Fdesktop-app","de\u002F03.app\u002F14.desktop-app","i-hugeicons-computer",{"title":185,"path":186,"stem":187,"icon":119},"Mobile App","\u002Fde\u002Fapp\u002Fmobile-app","de\u002F03.app\u002F15.mobile-app",{"title":189,"icon":190,"path":191,"stem":192,"children":193,"page":30},"Anmeldung & Verzeichnisse","i-hugeicons-security-check","\u002Fde\u002Fsign-in-and-directories","de\u002F04.sign-in-and-directories",[194,198,202,207,212,217,222,226,230,234],{"title":195,"path":196,"stem":197,"icon":19},"Anmeldeverfahren","\u002Fde\u002Fsign-in-and-directories\u002Fsign-in-methods","de\u002F04.sign-in-and-directories\u002F01.sign-in-methods",{"title":199,"path":200,"stem":201,"icon":190},"Single Sign-on","\u002Fde\u002Fsign-in-and-directories\u002Fsingle-sign-on","de\u002F04.sign-in-and-directories\u002F02.single-sign-on",{"title":203,"path":204,"stem":205,"icon":206},"Verzeichnisdienste (LDAP)","\u002Fde\u002Fsign-in-and-directories\u002Fdirectory-services","de\u002F04.sign-in-and-directories\u002F03.directory-services","i-hugeicons-hierarchy",{"title":208,"path":209,"stem":210,"icon":211},"Abgleich und Anmeldung","\u002Fde\u002Fsign-in-and-directories\u002Fdirectory-sync","de\u002F04.sign-in-and-directories\u002F04.directory-sync","i-hugeicons-refresh",{"title":213,"path":214,"stem":215,"icon":216},"Microsoft Entra ID","\u002Fde\u002Fsign-in-and-directories\u002Fmicrosoft-entra-id","de\u002F04.sign-in-and-directories\u002F05.microsoft-entra-id","i-hugeicons-building-03",{"title":218,"path":219,"stem":220,"icon":221},"Okta","\u002Fde\u002Fsign-in-and-directories\u002Fokta","de\u002F04.sign-in-and-directories\u002F06.okta","i-hugeicons-finger-print",{"title":223,"path":224,"stem":225,"icon":81},"Google Workspace","\u002Fde\u002Fsign-in-and-directories\u002Fgoogle-workspace","de\u002F04.sign-in-and-directories\u002F07.google-workspace",{"title":227,"path":228,"stem":229,"icon":119},"Zwei-Faktor-Authentifizierung","\u002Fde\u002Fsign-in-and-directories\u002Ftwo-factor-authentication","de\u002F04.sign-in-and-directories\u002F08.two-factor-authentication",{"title":231,"path":232,"stem":233,"icon":221},"Passkeys","\u002Fde\u002Fsign-in-and-directories\u002Fpasskeys","de\u002F04.sign-in-and-directories\u002F09.passkeys",{"title":235,"path":236,"stem":237,"icon":156},"Kalender-Freigabe","\u002Fde\u002Fsign-in-and-directories\u002Fcalendar-access","de\u002F04.sign-in-and-directories\u002F10.calendar-access",{"title":239,"icon":240,"path":241,"stem":242,"children":243,"page":30},"MCP-Server","i-hugeicons-ai-network","\u002Fde\u002Fmcp-server","de\u002F05.mcp-server",[244,248,253,257,262,266],{"title":245,"path":246,"stem":247,"icon":240},"Überblick","\u002Fde\u002Fmcp-server\u002Foverview","de\u002F05.mcp-server\u002F01.overview",{"title":249,"path":250,"stem":251,"icon":252},"Einrichten","\u002Fde\u002Fmcp-server\u002Fsetup","de\u002F05.mcp-server\u002F02.setup","i-hugeicons-plug-socket",{"title":254,"path":255,"stem":256,"icon":111},"Was Sie damit tun können","\u002Fde\u002Fmcp-server\u002Fuse-cases","de\u002F05.mcp-server\u002F03.use-cases",{"title":258,"path":259,"stem":260,"icon":261},"Werkzeuge","\u002Fde\u002Fmcp-server\u002Ftools","de\u002F05.mcp-server\u002F04.tools","i-hugeicons-wrench-01",{"title":263,"path":264,"stem":265,"icon":76},"Änderungen freigeben","\u002Fde\u002Fmcp-server\u002Fapproving-changes","de\u002F05.mcp-server\u002F05.approving-changes",{"title":267,"path":268,"stem":269,"icon":270},"Verwaltung & Sicherheit","\u002Fde\u002Fmcp-server\u002Fadmin-and-security","de\u002F05.mcp-server\u002F06.admin-and-security","i-hugeicons-shield-key",{"title":272,"icon":273,"path":274,"stem":275,"children":276,"page":30},"Externe Quellen","i-hugeicons-database-sync","\u002Fde\u002Fexternal-sources","de\u002F06.external-sources",[277,280,285,290,295,300,305],{"title":245,"path":278,"stem":279,"icon":273},"\u002Fde\u002Fexternal-sources\u002Foverview","de\u002F06.external-sources\u002F01.overview",{"title":281,"path":282,"stem":283,"icon":284},"SharePoint","\u002Fde\u002Fexternal-sources\u002Fsharepoint","de\u002F06.external-sources\u002F02.sharepoint","i-hugeicons-microsoft",{"title":286,"path":287,"stem":288,"icon":289},"OneDrive","\u002Fde\u002Fexternal-sources\u002Fonedrive","de\u002F06.external-sources\u002F03.onedrive","i-hugeicons-folder-cloud",{"title":291,"path":292,"stem":293,"icon":294},"Google Drive","\u002Fde\u002Fexternal-sources\u002Fgoogle-drive","de\u002F06.external-sources\u002F04.google-drive","i-hugeicons-google-drive",{"title":296,"path":297,"stem":298,"icon":299},"FTP \u002F SFTP","\u002Fde\u002Fexternal-sources\u002Fftp-sftp","de\u002F06.external-sources\u002F05.ftp-sftp","i-hugeicons-server-stack-01",{"title":301,"path":302,"stem":303,"icon":304},"REST-Schnittstelle","\u002Fde\u002Fexternal-sources\u002Frest","de\u002F06.external-sources\u002F06.rest","i-hugeicons-api",{"title":306,"path":307,"stem":308,"icon":309},"SOAP-Schnittstelle","\u002Fde\u002Fexternal-sources\u002Fsoap","de\u002F06.external-sources\u002F07.soap","i-hugeicons-source-code",{"title":311,"icon":304,"path":312,"stem":313,"children":314,"page":30},"Integrations-API","\u002Fde\u002Fintegration-api","de\u002F07.integration-api",[315,318,322,327,332,337,341,346,350,354,359,364],{"title":245,"path":316,"stem":317,"icon":14},"\u002Fde\u002Fintegration-api\u002Foverview","de\u002F07.integration-api\u002F01.overview",{"title":319,"path":320,"stem":321,"icon":19},"Authentifizierung","\u002Fde\u002Fintegration-api\u002Fauthentication","de\u002F07.integration-api\u002F02.authentication",{"title":323,"path":324,"stem":325,"icon":326},"Konventionen","\u002Fde\u002Fintegration-api\u002Fconventions","de\u002F07.integration-api\u002F03.conventions","i-hugeicons-book-open-01",{"title":328,"path":329,"stem":330,"icon":331},"Dokumente einspielen","\u002Fde\u002Fintegration-api\u002Fpushing-documents","de\u002F07.integration-api\u002F04.pushing-documents","i-hugeicons-upload-02",{"title":333,"path":334,"stem":335,"icon":336},"Inhalte abrufen","\u002Fde\u002Fintegration-api\u002Fconsuming-content","de\u002F07.integration-api\u002F05.consuming-content","i-hugeicons-download-02",{"title":338,"path":339,"stem":340,"icon":137},"Referenz: Dokumente","\u002Fde\u002Fintegration-api\u002Freference-documents","de\u002F07.integration-api\u002F06.reference-documents",{"title":342,"path":343,"stem":344,"icon":345},"Referenz: Kategorien, Schlagwörter, Märkte","\u002Fde\u002Fintegration-api\u002Freference-categories-tags","de\u002F07.integration-api\u002F07.reference-categories-tags","i-hugeicons-folder-01",{"title":347,"path":348,"stem":349,"icon":211},"Referenz: Abgleich-Manifest","\u002Fde\u002Fintegration-api\u002Freference-sync","de\u002F07.integration-api\u002F08.reference-sync",{"title":351,"path":352,"stem":353,"icon":309},"OpenAPI","\u002Fde\u002Fintegration-api\u002Fopenapi","de\u002F07.integration-api\u002F09.openapi",{"title":355,"path":356,"stem":357,"icon":358},"Änderungsprotokoll","\u002Fde\u002Fintegration-api\u002Fchangelog","de\u002F07.integration-api\u002F10.changelog","i-hugeicons-time-schedule",{"title":360,"path":361,"stem":362,"icon":363},"Referenz: Gruppen, Märkte, Zugriff","\u002Fde\u002Fintegration-api\u002Freference-groups-access","de\u002F07.integration-api\u002F11.reference-groups-access","i-hugeicons-user-lock-01",{"title":365,"path":366,"stem":367,"icon":368},"Umstieg von CMWS","\u002Fde\u002Fintegration-api\u002Fcmws","de\u002F07.integration-api\u002F12.cmws","i-hugeicons-arrow-reload-horizontal",{"title":370,"icon":371,"path":372,"stem":373,"children":374,"page":30},"Neuigkeiten","i-hugeicons-gift","\u002Fde\u002Fwhats-new","de\u002F08.whats-new",[375],{"title":355,"path":376,"stem":377,"icon":358},"\u002Fde\u002Fwhats-new\u002Fchangelog","de\u002F08.whats-new\u002F01.changelog",{"title":379,"icon":299,"path":380,"stem":381,"children":382,"page":30},"Selbst betreiben","\u002Fde\u002Fself-hosting","de\u002F09.self-hosting",[383,386,390,395,399,404,408,413,418,422],{"title":245,"path":384,"stem":385,"icon":14},"\u002Fde\u002Fself-hosting\u002Foverview","de\u002F09.self-hosting\u002F01.overview",{"title":387,"path":388,"stem":389,"icon":106},"Docker Compose","\u002Fde\u002Fself-hosting\u002Fdocker-compose","de\u002F09.self-hosting\u002F02.docker-compose",{"title":391,"path":392,"stem":393,"icon":394},"Kubernetes","\u002Fde\u002Fself-hosting\u002Fkubernetes","de\u002F09.self-hosting\u002F03.kubernetes","i-hugeicons-cloud",{"title":396,"path":397,"stem":398,"icon":101},"Konfiguration","\u002Fde\u002Fself-hosting\u002Fconfiguration","de\u002F09.self-hosting\u002F04.configuration",{"title":400,"path":401,"stem":402,"icon":403},"Lizenz","\u002Fde\u002Fself-hosting\u002Flicence","de\u002F09.self-hosting\u002F05.licence","i-hugeicons-license",{"title":405,"path":406,"stem":407,"icon":211},"Updates","\u002Fde\u002Fself-hosting\u002Fupdates","de\u002F09.self-hosting\u002F06.updates",{"title":409,"path":410,"stem":411,"icon":412},"Postgres","\u002Fde\u002Fself-hosting\u002Fpostgres","de\u002F09.self-hosting\u002F07.postgres","i-hugeicons-database",{"title":414,"path":415,"stem":416,"icon":417},"Sicherung","\u002Fde\u002Fself-hosting\u002Fbackups","de\u002F09.self-hosting\u002F08.backups","i-hugeicons-database-restore",{"title":419,"path":420,"stem":421,"icon":261},"Fehlerbehebung","\u002Fde\u002Fself-hosting\u002Ftroubleshooting","de\u002F09.self-hosting\u002F09.troubleshooting",{"title":423,"path":424,"stem":425,"icon":426},"Firewall","\u002Fde\u002Fself-hosting\u002Ffirewall","de\u002F09.self-hosting\u002F10.firewall","i-hugeicons-firewall",{"id":428,"title":391,"body":429,"description":5059,"extension":5060,"links":5061,"meta":5062,"navigation":5063,"path":392,"seo":5064,"stem":393,"__hash__":5065},"docs_de\u002Fde\u002F09.self-hosting\u002F03.kubernetes.md",{"type":430,"value":431,"toc":5049},"minimark",[432,450,455,550,554,652,656,669,836,854,931,936,979,983,989,1031,4777,4781,4820,4827,4831,4840,4935,4939,4946,4983,4987,5008,5045],[433,434,435,436,440,441,445,446,449],"p",{},"Für Kubernetes gibt es ",[437,438,439],"strong",{},"eine Datei mit allem",", was die Installation braucht – ",[442,443,444],"code",{},"ddm.yaml"," –, und ",[437,447,448],{},"zwei Dateien mit Ihren Einstellungen",". Alle drei stehen auf dieser Seite.",[451,452,454],"h2",{"id":453},"was-ddmyaml-anlegt","Was ddm.yaml anlegt",[456,457,458,471],"table",{},[459,460,461],"thead",{},[462,463,464,468],"tr",{},[465,466,467],"th",{},"Objekt",[465,469,470],{},"Bemerkung",[472,473,474,486,504,514,524,539],"tbody",{},[462,475,476,483],{},[477,478,479,482],"td",{},[442,480,481],{},"postgres"," (StatefulSet)",[477,484,485],{},"Mit eigenem Volume. Wer schon eine Postgres-Datenbank betreibt, kann stattdessen sie nutzen – siehe unten.",[462,487,488,494],{},[477,489,490,493],{},[442,491,492],{},"cms"," (Deployment)",[477,495,496,499,500,503],{},[437,497,498],{},"Genau eine Instanz",", Aktualisierung mit ",[442,501,502],{},"Recreate",": Das CMS spielt die Migrationen ein und führt die geplanten Aufgaben aus.",[462,505,506,511],{},[477,507,508,493],{},[442,509,510],{},"render-worker",[477,512,513],{},"Kann auf mehrere Instanzen wachsen.",[462,515,516,521],{},[477,517,518,493],{},[442,519,520],{},"client",[477,522,523],{},"Die Leser-App.",[462,525,526,532],{},[477,527,528,531],{},[442,529,530],{},"ddm-data"," (PersistentVolumeClaim)",[477,533,534,535,538],{},"Dokumente und Sicherungen, gemeinsam für CMS und Render-Worker – ",[437,536,537],{},"ReadWriteMany",", außer die Dokumente liegen in einem S3-Bucket.",[462,540,541,547],{},[477,542,543,546],{},[442,544,545],{},"ddm"," (Ingress)",[477,548,549],{},"Beide Hostnamen, für ingress-nginx mit Uploads bis 1 GB.",[451,551,553],{"id":552},"_1-den-namespace-und-das-registry-secret-anlegen","1. Den Namespace und das Registry-Secret anlegen",[555,556,561],"pre",{"className":557,"code":558,"language":559,"meta":560,"style":560},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","kubectl create namespace ddm\nkubectl -n ddm create secret docker-registry ddm-registry \\\n  --docker-server=registry.gitlab.com \\\n  --docker-username=\u003CName des Tokens> --docker-password=\u003CToken>\n","bash","",[442,562,563,582,608,616],{"__ignoreMap":560},[564,565,568,572,576,579],"span",{"class":566,"line":567},"line",1,[564,569,571],{"class":570},"sBMFI","kubectl",[564,573,575],{"class":574},"sfazB"," create",[564,577,578],{"class":574}," namespace",[564,580,581],{"class":574}," ddm\n",[564,583,585,587,590,593,595,598,601,604],{"class":566,"line":584},2,[564,586,571],{"class":570},[564,588,589],{"class":574}," -n",[564,591,592],{"class":574}," ddm",[564,594,575],{"class":574},[564,596,597],{"class":574}," secret",[564,599,600],{"class":574}," docker-registry",[564,602,603],{"class":574}," ddm-registry",[564,605,607],{"class":606},"sTEyZ"," \\\n",[564,609,611,614],{"class":566,"line":610},3,[564,612,613],{"class":574},"  --docker-server=registry.gitlab.com",[564,615,607],{"class":606},[564,617,619,622,626,629,632,635,638,641,644,646,649],{"class":566,"line":618},4,[564,620,621],{"class":574},"  --docker-username=",[564,623,625],{"class":624},"sMK4o","\u003C",[564,627,628],{"class":574},"Name",[564,630,631],{"class":574}," des",[564,633,634],{"class":574}," Token",[564,636,637],{"class":606},"s",[564,639,640],{"class":624},">",[564,642,643],{"class":574}," --docker-password=",[564,645,625],{"class":624},[564,647,648],{"class":574},"Token",[564,650,651],{"class":624},">\n",[451,653,655],{"id":654},"_2-die-einstellungen-anlegen","2. Die Einstellungen anlegen",[433,657,658,663,664,668],{},[437,659,660],{},[442,661,662],{},"config.env"," – Ihre Einstellungen, dieselben wie bei ",[665,666,387],"a",{"href":667},"\u002Fde\u002Fself-hosting\u002Fdocker-compose#3-die-einstellungen-ausf%C3%BCllen",":",[555,670,672],{"className":557,"code":671,"filename":662,"language":559,"meta":560,"style":560},"# The installation's settings, made into the ConfigMap `ddm`:\n#     kubectl -n ddm create configmap ddm --from-env-file=config.env\n# Every setting of the user guide's „Konfiguration\" \u002F „Configuration\" may be\n# added. Secrets go in `secrets.env`.\nDDM_CMS_HOST=cms.example.com\nDDM_APP_HOST=app.example.com\nAUTH_COOKIE_DOMAIN=example.com\nPASSKEY_RP_ID=example.com\n\nMAIL_DRIVER=smtp\nMAIL_FROM=ddm@example.com\nSMTP_HOST=mail.example.com\nSMTP_PORT=587\nSMTP_USER=ddm\n\n# The documents in an S3-compatible bucket instead of the `ddm-data` volume\n# (its keys in `secrets.env`).\n# S3_ENDPOINT=https:\u002F\u002Fs3.example.com\n# S3_BUCKET=ddm\n# S3_REGION=eu-central-1\n",[442,673,674,680,685,690,695,707,718,729,739,746,757,768,779,790,801,806,812,818,824,830],{"__ignoreMap":560},[564,675,676],{"class":566,"line":567},[564,677,679],{"class":678},"sHwdD","# The installation's settings, made into the ConfigMap `ddm`:\n",[564,681,682],{"class":566,"line":584},[564,683,684],{"class":678},"#     kubectl -n ddm create configmap ddm --from-env-file=config.env\n",[564,686,687],{"class":566,"line":610},[564,688,689],{"class":678},"# Every setting of the user guide's „Konfiguration\" \u002F „Configuration\" may be\n",[564,691,692],{"class":566,"line":618},[564,693,694],{"class":678},"# added. Secrets go in `secrets.env`.\n",[564,696,698,701,704],{"class":566,"line":697},5,[564,699,700],{"class":606},"DDM_CMS_HOST",[564,702,703],{"class":624},"=",[564,705,706],{"class":574},"cms.example.com\n",[564,708,710,713,715],{"class":566,"line":709},6,[564,711,712],{"class":606},"DDM_APP_HOST",[564,714,703],{"class":624},[564,716,717],{"class":574},"app.example.com\n",[564,719,721,724,726],{"class":566,"line":720},7,[564,722,723],{"class":606},"AUTH_COOKIE_DOMAIN",[564,725,703],{"class":624},[564,727,728],{"class":574},"example.com\n",[564,730,732,735,737],{"class":566,"line":731},8,[564,733,734],{"class":606},"PASSKEY_RP_ID",[564,736,703],{"class":624},[564,738,728],{"class":574},[564,740,742],{"class":566,"line":741},9,[564,743,745],{"emptyLinePlaceholder":744},true,"\n",[564,747,749,752,754],{"class":566,"line":748},10,[564,750,751],{"class":606},"MAIL_DRIVER",[564,753,703],{"class":624},[564,755,756],{"class":574},"smtp\n",[564,758,760,763,765],{"class":566,"line":759},11,[564,761,762],{"class":606},"MAIL_FROM",[564,764,703],{"class":624},[564,766,767],{"class":574},"ddm@example.com\n",[564,769,771,774,776],{"class":566,"line":770},12,[564,772,773],{"class":606},"SMTP_HOST",[564,775,703],{"class":624},[564,777,778],{"class":574},"mail.example.com\n",[564,780,782,785,787],{"class":566,"line":781},13,[564,783,784],{"class":606},"SMTP_PORT",[564,786,703],{"class":624},[564,788,789],{"class":574},"587\n",[564,791,793,796,798],{"class":566,"line":792},14,[564,794,795],{"class":606},"SMTP_USER",[564,797,703],{"class":624},[564,799,800],{"class":574},"ddm\n",[564,802,804],{"class":566,"line":803},15,[564,805,745],{"emptyLinePlaceholder":744},[564,807,809],{"class":566,"line":808},16,[564,810,811],{"class":678},"# The documents in an S3-compatible bucket instead of the `ddm-data` volume\n",[564,813,815],{"class":566,"line":814},17,[564,816,817],{"class":678},"# (its keys in `secrets.env`).\n",[564,819,821],{"class":566,"line":820},18,[564,822,823],{"class":678},"# S3_ENDPOINT=https:\u002F\u002Fs3.example.com\n",[564,825,827],{"class":566,"line":826},19,[564,828,829],{"class":678},"# S3_BUCKET=ddm\n",[564,831,833],{"class":566,"line":832},20,[564,834,835],{"class":678},"# S3_REGION=eu-central-1\n",[433,837,838,843,844,847,848,853],{},[437,839,840],{},[442,841,842],{},"secrets.env"," – Passwörter, ",[442,845,846],{},"BETTER_AUTH_SECRET"," und ",[437,849,850],{},[442,851,852],{},"LICENCE_KEY",". Diese Datei gehört in keine Versionsverwaltung – oder nur verschlüsselt, etwa mit SOPS.",[555,855,857],{"className":557,"code":856,"filename":842,"language":559,"meta":560,"style":560},"# The installation's secrets, made into the Secret `ddm`:\n#     kubectl -n ddm create secret generic ddm --from-env-file=secrets.env\n# Copy this file to `secrets.env`, fill it in, and keep it out of version\n# control. `openssl rand -base64 32` for each. The database's password is kept by\n# Postgres on its first start; changing it here later locks the cms out.\nPOSTGRES_PASSWORD=\nBETTER_AUTH_SECRET=\nSMTP_PASSWORD=\n# The licence we sent you (`ddm1.…`) — needed from the first start; one\n# entered later under Settings › Licence replaces it.\nLICENCE_KEY=\n# S3_ACCESS_KEY_ID=\n# S3_SECRET_ACCESS_KEY=\n",[442,858,859,864,869,874,879,884,892,898,905,910,915,921,926],{"__ignoreMap":560},[564,860,861],{"class":566,"line":567},[564,862,863],{"class":678},"# The installation's secrets, made into the Secret `ddm`:\n",[564,865,866],{"class":566,"line":584},[564,867,868],{"class":678},"#     kubectl -n ddm create secret generic ddm --from-env-file=secrets.env\n",[564,870,871],{"class":566,"line":610},[564,872,873],{"class":678},"# Copy this file to `secrets.env`, fill it in, and keep it out of version\n",[564,875,876],{"class":566,"line":618},[564,877,878],{"class":678},"# control. `openssl rand -base64 32` for each. The database's password is kept by\n",[564,880,881],{"class":566,"line":697},[564,882,883],{"class":678},"# Postgres on its first start; changing it here later locks the cms out.\n",[564,885,886,889],{"class":566,"line":709},[564,887,888],{"class":606},"POSTGRES_PASSWORD",[564,890,891],{"class":624},"=\n",[564,893,894,896],{"class":566,"line":720},[564,895,846],{"class":606},[564,897,891],{"class":624},[564,899,900,903],{"class":566,"line":731},[564,901,902],{"class":606},"SMTP_PASSWORD",[564,904,891],{"class":624},[564,906,907],{"class":566,"line":741},[564,908,909],{"class":678},"# The licence we sent you (`ddm1.…`) — needed from the first start; one\n",[564,911,912],{"class":566,"line":748},[564,913,914],{"class":678},"# entered later under Settings › Licence replaces it.\n",[564,916,917,919],{"class":566,"line":759},[564,918,852],{"class":606},[564,920,891],{"class":624},[564,922,923],{"class":566,"line":770},[564,924,925],{"class":678},"# S3_ACCESS_KEY_ID=\n",[564,927,928],{"class":566,"line":781},[564,929,930],{"class":678},"# S3_SECRET_ACCESS_KEY=\n",[433,932,933,934,668],{},"Daraus werden die ConfigMap und das Secret ",[442,935,545],{},[555,937,939],{"className":557,"code":938,"language":559,"meta":560,"style":560},"kubectl -n ddm create configmap ddm --from-env-file=config.env\nkubectl -n ddm create secret generic ddm --from-env-file=secrets.env\n",[442,940,941,959],{"__ignoreMap":560},[564,942,943,945,947,949,951,954,956],{"class":566,"line":567},[564,944,571],{"class":570},[564,946,589],{"class":574},[564,948,592],{"class":574},[564,950,575],{"class":574},[564,952,953],{"class":574}," configmap",[564,955,592],{"class":574},[564,957,958],{"class":574}," --from-env-file=config.env\n",[564,960,961,963,965,967,969,971,974,976],{"class":566,"line":584},[564,962,571],{"class":570},[564,964,589],{"class":574},[564,966,592],{"class":574},[564,968,575],{"class":574},[564,970,597],{"class":574},[564,972,973],{"class":574}," generic",[564,975,592],{"class":574},[564,977,978],{"class":574}," --from-env-file=secrets.env\n",[451,980,982],{"id":981},"_3-ddmyaml-anpassen","3. ddm.yaml anpassen",[433,984,985,986,988],{},"Speichern Sie die Datei als ",[442,987,444],{}," und ändern Sie darin zwei Dinge:",[990,991,992,1019],"ul",{},[993,994,995,998,999,1002,1003,1005,1006,847,1008,1010,1011,1014,1015,1018],"li",{},[437,996,997],{},"Die Version:"," ",[442,1000,1001],{},":latest"," bei ",[442,1004,492],{},", ",[442,1007,510],{},[442,1009,520],{}," durch die Version, die Sie betreiben – zum Beispiel ",[442,1012,1013],{},":0.26",". Postgres bleibt bei ",[442,1016,1017],{},":18",".",[993,1020,1021,998,1024,847,1027,1030],{},[437,1022,1023],{},"Ihre Hostnamen:",[442,1025,1026],{},"cms.example.com",[442,1028,1029],{},"app.example.com"," im Ingress am Ende der Datei.",[555,1032,1036],{"className":1033,"code":1034,"filename":444,"language":1035,"meta":560,"style":560},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# DDM on Kubernetes — everything an installation runs, in one file:\n#\n#     kubectl create namespace ddm\n#     kubectl -n ddm create secret docker-registry ddm-registry \\\n#       --docker-server=registry.gitlab.com --docker-username=\u003Ctoken name> --docker-password=\u003Ctoken>\n#     kubectl -n ddm create configmap ddm --from-env-file=config.env\n#     kubectl -n ddm create secret generic ddm --from-env-file=secrets.env\n#     kubectl -n ddm apply -f ddm.yaml\n#\n# Before applying, set in this file:\n#   - the release, the same for cms, render-worker and client: `:latest`\n#     below, e.g. `:0.26` (Postgres stays at its major, 18). The comment\n#     behind each of those lines is where Flux writes a new version, when it\n#     updates the installation (`ddm-updates.yaml`); without Flux it does nothing;\n#   - your two hostnames, for `cms.example.com` and `app.example.com` in the\n#     Ingress at the end.\n#\n# The settings are in the ConfigMap `ddm` and the Secret `ddm`, made from\n# `config.env` and `secrets.env`. After changing them, restart the apps:\n#     kubectl -n ddm rollout restart deployment\n#\n# The cms runs once, and is replaced, not rolled: its scheduled tasks and the\n# migrations it runs on start are one process's. The documents are on a\n# volume the cms and the render worker share (ReadWriteMany), unless the\n# configuration names an S3 bucket.\n\n---\n# Postgres with the German dictionary DDM searches with, by its major — never\n# updated with the rest: a new major needs its data upgraded by hand.\napiVersion: v1\nkind: Service\nmetadata:\n  name: postgres\nspec:\n  selector:\n    app.kubernetes.io\u002Fname: postgres\n  ports:\n    - name: postgres\n      port: 5432\n---\napiVersion: apps\u002Fv1\nkind: StatefulSet\nmetadata:\n  name: postgres\nspec:\n  serviceName: postgres\n  replicas: 1\n  selector:\n    matchLabels:\n      app.kubernetes.io\u002Fname: postgres\n  template:\n    metadata:\n      labels:\n        app.kubernetes.io\u002Fname: postgres\n    spec:\n      imagePullSecrets:\n        - name: ddm-registry\n      # As the image's `postgres` user (70) from the start — no root to drop\n      # from — the volume made its group's.\n      securityContext:\n        runAsNonRoot: true\n        runAsUser: 70\n        runAsGroup: 70\n        fsGroup: 70\n        seccompProfile:\n          type: RuntimeDefault\n      containers:\n        - name: postgres\n          image: registry.gitlab.com\u002Fiq-me\u002Fnew-ddm-images\u002Fpostgres:18\n          # Postgres' own fixes come under the same tag: a restart brings them (user guide, „Postgres\").\n          imagePullPolicy: Always\n          securityContext:\n            allowPrivilegeEscalation: false\n            readOnlyRootFilesystem: true\n            capabilities:\n              drop: [ALL]\n          env:\n            - name: POSTGRES_USER\n              value: ddm\n            - name: POSTGRES_DB\n              value: ddm\n            - name: POSTGRES_PASSWORD\n              valueFrom:\n                secretKeyRef:\n                  name: ddm\n                  key: POSTGRES_PASSWORD\n          ports:\n            - name: postgres\n              containerPort: 5432\n          readinessProbe:\n            exec:\n              command: [pg_isready, -U, ddm, -d, ddm]\n            periodSeconds: 5\n          resources:\n            requests:\n              cpu: 250m\n              memory: 512Mi\n            limits:\n              memory: 2Gi\n          volumeMounts:\n            - name: postgres\n              mountPath: \u002Fvar\u002Flib\u002Fpostgresql\n            # Writable besides its data: the socket, and scratch.\n            - name: run\n              mountPath: \u002Fvar\u002Frun\u002Fpostgresql\n            - name: tmp\n              mountPath: \u002Ftmp\n      volumes:\n        - name: run\n          emptyDir: {}\n        - name: tmp\n          emptyDir: {}\n  volumeClaimTemplates:\n    - metadata:\n        name: postgres\n      spec:\n        accessModes: [ReadWriteOnce]\n        resources:\n          requests:\n            storage: 20Gi\n---\n# The documents, and the database's dumps taken before each migration (the\n# last three): read and written by the cms and the render worker, which may\n# run on different nodes. With an S3 bucket configured (`S3_ENDPOINT`) nothing\n# is kept here, and its size may be small.\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: ddm-data\nspec:\n  accessModes: [ReadWriteMany]\n  resources:\n    requests:\n      storage: 100Gi\n---\n# The management app, and the API the reader app, the render worker's\n# documents and every integration go through. One replica, replaced rather\n# than rolled: it runs the scheduled tasks, and migrates the database to its\n# release before it answers.\napiVersion: v1\nkind: Service\nmetadata:\n  name: cms\nspec:\n  selector:\n    app.kubernetes.io\u002Fname: cms\n  ports:\n    - name: http\n      port: 3000\n      targetPort: http\n---\napiVersion: apps\u002Fv1\nkind: Deployment\nmetadata:\n  name: cms\nspec:\n  replicas: 1\n  strategy:\n    type: Recreate\n  selector:\n    matchLabels:\n      app.kubernetes.io\u002Fname: cms\n  template:\n    metadata:\n      labels:\n        app.kubernetes.io\u002Fname: cms\n    spec:\n      imagePullSecrets:\n        - name: ddm-registry\n      securityContext:\n        runAsNonRoot: true\n        runAsUser: 1000\n        runAsGroup: 1000\n        fsGroup: 1000\n      containers:\n        - name: cms\n          image: registry.gitlab.com\u002Fiq-me\u002Fnew-ddm-images\u002Fcms:latest # {\"$imagepolicy\": \"flux-system:ddm-cms\"}\n          # Asked anew at every start: a tag that moves (`stable`, `0.26`) brings its newest image.\n          imagePullPolicy: Always\n          securityContext:\n            allowPrivilegeEscalation: false\n            readOnlyRootFilesystem: true\n            capabilities:\n              drop: [ALL]\n          envFrom:\n            - configMapRef:\n                name: ddm\n            - secretRef:\n                name: ddm\n          env:\n            # Which version of this file this is: a release that needs a newer\n            # one says so to the administrators, rather than failing (user guide, „Updates\").\n            - name: DDM_DEPLOY_VERSION\n              value: \"1\"\n            - name: DATABASE_URL\n              value: postgres:\u002F\u002Fddm:$(POSTGRES_PASSWORD)@postgres:5432\u002Fddm\n            - name: BETTER_AUTH_URL\n              value: https:\u002F\u002F$(DDM_CMS_HOST)\n            - name: CLIENT_ORIGIN\n              value: https:\u002F\u002F$(DDM_APP_HOST)\n            - name: STORAGE_DIR\n              value: \u002Fdata\u002Fstorage\n            - name: BACKUP_DIR\n              value: \u002Fdata\u002Fbackups\n            # Uploads are stored here and drawn by the render worker.\n            - name: RENDER_MODE\n              value: worker\n          ports:\n            - name: http\n              containerPort: 3000\n          # Migrations first, on a new release: up to five minutes.\n          startupProbe:\n            httpGet:\n              path: \u002Fapi\u002Fauth\u002Fok\n              port: http\n            periodSeconds: 2\n            failureThreshold: 150\n          readinessProbe:\n            httpGet:\n              path: \u002Fapi\u002Fauth\u002Fok\n              port: http\n            periodSeconds: 10\n          livenessProbe:\n            httpGet:\n              path: \u002Fapi\u002Fauth\u002Fok\n              port: http\n            periodSeconds: 30\n            timeoutSeconds: 5\n          resources:\n            requests:\n              cpu: 250m\n              memory: 512Mi\n            limits:\n              memory: 2Gi\n          volumeMounts:\n            - name: data\n              mountPath: \u002Fdata\n            # The one place written besides `\u002Fdata`: uploads on their way, LibreOffice's profiles.\n            - name: tmp\n              mountPath: \u002Ftmp\n      volumes:\n        - name: data\n          persistentVolumeClaim:\n            claimName: ddm-data\n        - name: tmp\n          emptyDir: {}\n---\n# Reads the text, draws the thumbnails and converts the Office files of what\n# is uploaded, sharing the work through the database: more replicas for more\n# imports. Each finishes the documents in hand before it stops — LibreOffice\n# may take minutes over a large deck.\napiVersion: apps\u002Fv1\nkind: Deployment\nmetadata:\n  name: render-worker\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app.kubernetes.io\u002Fname: render-worker\n  template:\n    metadata:\n      labels:\n        app.kubernetes.io\u002Fname: render-worker\n    spec:\n      imagePullSecrets:\n        - name: ddm-registry\n      securityContext:\n        runAsNonRoot: true\n        runAsUser: 1000\n        runAsGroup: 1000\n        fsGroup: 1000\n      terminationGracePeriodSeconds: 660\n      containers:\n        - name: render-worker\n          image: registry.gitlab.com\u002Fiq-me\u002Fnew-ddm-images\u002Frender-worker:latest # {\"$imagepolicy\": \"flux-system:ddm-render-worker\"}\n          imagePullPolicy: Always\n          securityContext:\n            allowPrivilegeEscalation: false\n            readOnlyRootFilesystem: true\n            capabilities:\n              drop: [ALL]\n          envFrom:\n            - configMapRef:\n                name: ddm\n            - secretRef:\n                name: ddm\n          env:\n            - name: DATABASE_URL\n              value: postgres:\u002F\u002Fddm:$(POSTGRES_PASSWORD)@postgres:5432\u002Fddm\n            - name: STORAGE_DIR\n              value: \u002Fdata\u002Fstorage\n            - name: RENDER_LARGE_OFFICE\n              value: \"on\"\n          resources:\n            requests:\n              cpu: 500m\n              memory: 1Gi\n            limits:\n              memory: 3Gi\n          volumeMounts:\n            - name: data\n              mountPath: \u002Fdata\n            # The one place written besides `\u002Fdata`: uploads on their way, LibreOffice's profiles.\n            - name: tmp\n              mountPath: \u002Ftmp\n      volumes:\n        - name: data\n          persistentVolumeClaim:\n            claimName: ddm-data\n        - name: tmp\n          emptyDir: {}\n---\n# The reader app: its pages, and everything under \u002Fapi forwarded to the cms.\napiVersion: v1\nkind: Service\nmetadata:\n  name: client\nspec:\n  selector:\n    app.kubernetes.io\u002Fname: client\n  ports:\n    - name: http\n      port: 3000\n      targetPort: http\n---\napiVersion: apps\u002Fv1\nkind: Deployment\nmetadata:\n  name: client\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app.kubernetes.io\u002Fname: client\n  template:\n    metadata:\n      labels:\n        app.kubernetes.io\u002Fname: client\n    spec:\n      imagePullSecrets:\n        - name: ddm-registry\n      securityContext:\n        runAsNonRoot: true\n        runAsUser: 1000\n        runAsGroup: 1000\n      containers:\n        - name: client\n          image: registry.gitlab.com\u002Fiq-me\u002Fnew-ddm-images\u002Fclient:latest # {\"$imagepolicy\": \"flux-system:ddm-client\"}\n          imagePullPolicy: Always\n          securityContext:\n            allowPrivilegeEscalation: false\n            readOnlyRootFilesystem: true\n            capabilities:\n              drop: [ALL]\n          envFrom:\n            - configMapRef:\n                name: ddm\n          env:\n            - name: NUXT_API_ORIGIN\n              value: http:\u002F\u002Fcms:3000\n            - name: NUXT_PUBLIC_MGMT_URL\n              value: https:\u002F\u002F$(DDM_CMS_HOST)\n            # The reader app on this installation, for the mobile app's „Server\".\n            - name: NUXT_PUBLIC_SERVER_URL\n              value: https:\u002F\u002F$(DDM_APP_HOST)\n            - name: RENDER_MODE\n              value: worker\n          ports:\n            - name: http\n              containerPort: 3000\n          # Through to the cms: what the reader app forwards answers, too.\n          readinessProbe:\n            httpGet:\n              path: \u002Fapi\u002Fauth\u002Fok\n              port: http\n            periodSeconds: 10\n          resources:\n            requests:\n              cpu: 100m\n              memory: 128Mi\n            limits:\n              memory: 512Mi\n          volumeMounts:\n            - name: tmp\n              mountPath: \u002Ftmp\n      volumes:\n        - name: tmp\n          emptyDir: {}\n---\n# Both hostnames — replace `cms.example.com` and `app.example.com` with yours —\n# with TLS from the Secret `ddm-tls`, or from cert-manager with its\n# annotation added here. Uploads are up to 1 GiB and may take a while:\n# ingress-nginx's limits raised; another controller needs its own.\napiVersion: networking.k8s.io\u002Fv1\nkind: Ingress\nmetadata:\n  name: ddm\n  annotations:\n    nginx.ingress.kubernetes.io\u002Fproxy-body-size: 1g\n    nginx.ingress.kubernetes.io\u002Fproxy-read-timeout: \"600\"\n    nginx.ingress.kubernetes.io\u002Fproxy-send-timeout: \"600\"\n    nginx.ingress.kubernetes.io\u002Fproxy-request-buffering: \"off\"\nspec:\n  tls:\n    - hosts: [cms.example.com, app.example.com]\n      secretName: ddm-tls\n  rules:\n    - host: cms.example.com\n      http:\n        paths:\n          - path: \u002F\n            pathType: Prefix\n            backend:\n              service:\n                name: cms\n                port:\n                  name: http\n    - host: app.example.com\n      http:\n        paths:\n          - path: \u002F\n            pathType: Prefix\n            backend:\n              service:\n                name: client\n                port:\n                  name: http\n","yaml",[442,1037,1038,1043,1048,1053,1058,1063,1067,1071,1076,1080,1085,1090,1095,1100,1105,1110,1115,1119,1124,1129,1134,1139,1145,1151,1157,1163,1168,1174,1180,1186,1198,1209,1218,1229,1237,1245,1255,1263,1276,1288,1293,1303,1313,1320,1329,1336,1346,1357,1364,1372,1382,1390,1398,1406,1416,1424,1432,1445,1451,1457,1465,1477,1488,1498,1508,1516,1527,1535,1546,1557,1563,1574,1582,1593,1603,1611,1628,1636,1649,1659,1671,1680,1692,1700,1708,1718,1728,1736,1747,1757,1765,1773,1807,1818,1826,1834,1845,1856,1864,1874,1882,1893,1904,1910,1922,1932,1944,1954,1962,1973,1984,1995,2004,2012,2022,2032,2040,2055,2063,2071,2082,2087,2093,2099,2105,2111,2120,2130,2137,2147,2154,2168,2176,2184,2195,2200,2206,2212,2218,2224,2233,2242,2249,2259,2266,2273,2282,2289,2301,2311,2321,2326,2335,2345,2352,2361,2368,2377,2385,2396,2403,2410,2419,2426,2433,2440,2449,2456,2463,2474,2481,2490,2500,2509,2518,2525,2536,2549,2555,2564,2571,2580,2589,2596,2609,2617,2627,2637,2647,2656,2663,2669,2675,2687,2703,2715,2725,2737,2747,2759,2769,2781,2791,2803,2813,2819,2831,2841,2848,2859,2868,2874,2882,2890,2901,2911,2921,2932,2939,2946,2955,2964,2974,2982,2989,2998,3007,3017,3027,3034,3041,3050,3059,3066,3075,3082,3094,3104,3110,3121,3130,3137,3148,3156,3166,3177,3186,3191,3197,3203,3209,3215,3224,3233,3240,3250,3257,3266,3273,3280,3289,3296,3303,3310,3319,3326,3333,3344,3351,3360,3369,3378,3387,3398,3405,3416,3429,3438,3445,3454,3463,3470,3483,3490,3499,3508,3517,3526,3533,3544,3553,3564,3573,3585,3599,3606,3613,3623,3633,3640,3650,3657,3668,3677,3682,3693,3702,3709,3720,3727,3736,3747,3756,3761,3767,3776,3785,3792,3802,3809,3816,3825,3832,3843,3852,3861,3866,3875,3884,3891,3900,3907,3916,3923,3930,3939,3946,3953,3960,3969,3976,3983,3994,4001,4010,4019,4028,4035,4046,4059,4068,4075,4084,4093,4100,4113,4120,4129,4138,4145,4157,4167,4179,4188,4194,4206,4215,4226,4235,4242,4253,4262,4268,4275,4282,4291,4300,4309,4316,4323,4333,4343,4350,4359,4366,4377,4386,4393,4404,4413,4418,4424,4430,4436,4442,4452,4462,4469,4478,4486,4497,4512,4526,4541,4548,4556,4577,4588,4596,4609,4617,4625,4639,4650,4658,4666,4675,4683,4692,4704,4711,4718,4729,4738,4745,4752,4761,4768],{"__ignoreMap":560},[564,1039,1040],{"class":566,"line":567},[564,1041,1042],{"class":678},"# DDM on Kubernetes — everything an installation runs, in one file:\n",[564,1044,1045],{"class":566,"line":584},[564,1046,1047],{"class":678},"#\n",[564,1049,1050],{"class":566,"line":610},[564,1051,1052],{"class":678},"#     kubectl create namespace ddm\n",[564,1054,1055],{"class":566,"line":618},[564,1056,1057],{"class":678},"#     kubectl -n ddm create secret docker-registry ddm-registry \\\n",[564,1059,1060],{"class":566,"line":697},[564,1061,1062],{"class":678},"#       --docker-server=registry.gitlab.com --docker-username=\u003Ctoken name> --docker-password=\u003Ctoken>\n",[564,1064,1065],{"class":566,"line":709},[564,1066,684],{"class":678},[564,1068,1069],{"class":566,"line":720},[564,1070,868],{"class":678},[564,1072,1073],{"class":566,"line":731},[564,1074,1075],{"class":678},"#     kubectl -n ddm apply -f ddm.yaml\n",[564,1077,1078],{"class":566,"line":741},[564,1079,1047],{"class":678},[564,1081,1082],{"class":566,"line":748},[564,1083,1084],{"class":678},"# Before applying, set in this file:\n",[564,1086,1087],{"class":566,"line":759},[564,1088,1089],{"class":678},"#   - the release, the same for cms, render-worker and client: `:latest`\n",[564,1091,1092],{"class":566,"line":770},[564,1093,1094],{"class":678},"#     below, e.g. `:0.26` (Postgres stays at its major, 18). The comment\n",[564,1096,1097],{"class":566,"line":781},[564,1098,1099],{"class":678},"#     behind each of those lines is where Flux writes a new version, when it\n",[564,1101,1102],{"class":566,"line":792},[564,1103,1104],{"class":678},"#     updates the installation (`ddm-updates.yaml`); without Flux it does nothing;\n",[564,1106,1107],{"class":566,"line":803},[564,1108,1109],{"class":678},"#   - your two hostnames, for `cms.example.com` and `app.example.com` in the\n",[564,1111,1112],{"class":566,"line":808},[564,1113,1114],{"class":678},"#     Ingress at the end.\n",[564,1116,1117],{"class":566,"line":814},[564,1118,1047],{"class":678},[564,1120,1121],{"class":566,"line":820},[564,1122,1123],{"class":678},"# The settings are in the ConfigMap `ddm` and the Secret `ddm`, made from\n",[564,1125,1126],{"class":566,"line":826},[564,1127,1128],{"class":678},"# `config.env` and `secrets.env`. After changing them, restart the apps:\n",[564,1130,1131],{"class":566,"line":832},[564,1132,1133],{"class":678},"#     kubectl -n ddm rollout restart deployment\n",[564,1135,1137],{"class":566,"line":1136},21,[564,1138,1047],{"class":678},[564,1140,1142],{"class":566,"line":1141},22,[564,1143,1144],{"class":678},"# The cms runs once, and is replaced, not rolled: its scheduled tasks and the\n",[564,1146,1148],{"class":566,"line":1147},23,[564,1149,1150],{"class":678},"# migrations it runs on start are one process's. The documents are on a\n",[564,1152,1154],{"class":566,"line":1153},24,[564,1155,1156],{"class":678},"# volume the cms and the render worker share (ReadWriteMany), unless the\n",[564,1158,1160],{"class":566,"line":1159},25,[564,1161,1162],{"class":678},"# configuration names an S3 bucket.\n",[564,1164,1166],{"class":566,"line":1165},26,[564,1167,745],{"emptyLinePlaceholder":744},[564,1169,1171],{"class":566,"line":1170},27,[564,1172,1173],{"class":570},"---\n",[564,1175,1177],{"class":566,"line":1176},28,[564,1178,1179],{"class":678},"# Postgres with the German dictionary DDM searches with, by its major — never\n",[564,1181,1183],{"class":566,"line":1182},29,[564,1184,1185],{"class":678},"# updated with the rest: a new major needs its data upgraded by hand.\n",[564,1187,1189,1193,1195],{"class":566,"line":1188},30,[564,1190,1192],{"class":1191},"swJcz","apiVersion",[564,1194,668],{"class":624},[564,1196,1197],{"class":574}," v1\n",[564,1199,1201,1204,1206],{"class":566,"line":1200},31,[564,1202,1203],{"class":1191},"kind",[564,1205,668],{"class":624},[564,1207,1208],{"class":574}," Service\n",[564,1210,1212,1215],{"class":566,"line":1211},32,[564,1213,1214],{"class":1191},"metadata",[564,1216,1217],{"class":624},":\n",[564,1219,1221,1224,1226],{"class":566,"line":1220},33,[564,1222,1223],{"class":1191},"  name",[564,1225,668],{"class":624},[564,1227,1228],{"class":574}," postgres\n",[564,1230,1232,1235],{"class":566,"line":1231},34,[564,1233,1234],{"class":1191},"spec",[564,1236,1217],{"class":624},[564,1238,1240,1243],{"class":566,"line":1239},35,[564,1241,1242],{"class":1191},"  selector",[564,1244,1217],{"class":624},[564,1246,1248,1251,1253],{"class":566,"line":1247},36,[564,1249,1250],{"class":1191},"    app.kubernetes.io\u002Fname",[564,1252,668],{"class":624},[564,1254,1228],{"class":574},[564,1256,1258,1261],{"class":566,"line":1257},37,[564,1259,1260],{"class":1191},"  ports",[564,1262,1217],{"class":624},[564,1264,1266,1269,1272,1274],{"class":566,"line":1265},38,[564,1267,1268],{"class":624},"    -",[564,1270,1271],{"class":1191}," name",[564,1273,668],{"class":624},[564,1275,1228],{"class":574},[564,1277,1279,1282,1284],{"class":566,"line":1278},39,[564,1280,1281],{"class":1191},"      port",[564,1283,668],{"class":624},[564,1285,1287],{"class":1286},"sbssI"," 5432\n",[564,1289,1291],{"class":566,"line":1290},40,[564,1292,1173],{"class":570},[564,1294,1296,1298,1300],{"class":566,"line":1295},41,[564,1297,1192],{"class":1191},[564,1299,668],{"class":624},[564,1301,1302],{"class":574}," apps\u002Fv1\n",[564,1304,1306,1308,1310],{"class":566,"line":1305},42,[564,1307,1203],{"class":1191},[564,1309,668],{"class":624},[564,1311,1312],{"class":574}," StatefulSet\n",[564,1314,1316,1318],{"class":566,"line":1315},43,[564,1317,1214],{"class":1191},[564,1319,1217],{"class":624},[564,1321,1323,1325,1327],{"class":566,"line":1322},44,[564,1324,1223],{"class":1191},[564,1326,668],{"class":624},[564,1328,1228],{"class":574},[564,1330,1332,1334],{"class":566,"line":1331},45,[564,1333,1234],{"class":1191},[564,1335,1217],{"class":624},[564,1337,1339,1342,1344],{"class":566,"line":1338},46,[564,1340,1341],{"class":1191},"  serviceName",[564,1343,668],{"class":624},[564,1345,1228],{"class":574},[564,1347,1349,1352,1354],{"class":566,"line":1348},47,[564,1350,1351],{"class":1191},"  replicas",[564,1353,668],{"class":624},[564,1355,1356],{"class":1286}," 1\n",[564,1358,1360,1362],{"class":566,"line":1359},48,[564,1361,1242],{"class":1191},[564,1363,1217],{"class":624},[564,1365,1367,1370],{"class":566,"line":1366},49,[564,1368,1369],{"class":1191},"    matchLabels",[564,1371,1217],{"class":624},[564,1373,1375,1378,1380],{"class":566,"line":1374},50,[564,1376,1377],{"class":1191},"      app.kubernetes.io\u002Fname",[564,1379,668],{"class":624},[564,1381,1228],{"class":574},[564,1383,1385,1388],{"class":566,"line":1384},51,[564,1386,1387],{"class":1191},"  template",[564,1389,1217],{"class":624},[564,1391,1393,1396],{"class":566,"line":1392},52,[564,1394,1395],{"class":1191},"    metadata",[564,1397,1217],{"class":624},[564,1399,1401,1404],{"class":566,"line":1400},53,[564,1402,1403],{"class":1191},"      labels",[564,1405,1217],{"class":624},[564,1407,1409,1412,1414],{"class":566,"line":1408},54,[564,1410,1411],{"class":1191},"        app.kubernetes.io\u002Fname",[564,1413,668],{"class":624},[564,1415,1228],{"class":574},[564,1417,1419,1422],{"class":566,"line":1418},55,[564,1420,1421],{"class":1191},"    spec",[564,1423,1217],{"class":624},[564,1425,1427,1430],{"class":566,"line":1426},56,[564,1428,1429],{"class":1191},"      imagePullSecrets",[564,1431,1217],{"class":624},[564,1433,1435,1438,1440,1442],{"class":566,"line":1434},57,[564,1436,1437],{"class":624},"        -",[564,1439,1271],{"class":1191},[564,1441,668],{"class":624},[564,1443,1444],{"class":574}," ddm-registry\n",[564,1446,1448],{"class":566,"line":1447},58,[564,1449,1450],{"class":678},"      # As the image's `postgres` user (70) from the start — no root to drop\n",[564,1452,1454],{"class":566,"line":1453},59,[564,1455,1456],{"class":678},"      # from — the volume made its group's.\n",[564,1458,1460,1463],{"class":566,"line":1459},60,[564,1461,1462],{"class":1191},"      securityContext",[564,1464,1217],{"class":624},[564,1466,1468,1471,1473],{"class":566,"line":1467},61,[564,1469,1470],{"class":1191},"        runAsNonRoot",[564,1472,668],{"class":624},[564,1474,1476],{"class":1475},"sfNiH"," true\n",[564,1478,1480,1483,1485],{"class":566,"line":1479},62,[564,1481,1482],{"class":1191},"        runAsUser",[564,1484,668],{"class":624},[564,1486,1487],{"class":1286}," 70\n",[564,1489,1491,1494,1496],{"class":566,"line":1490},63,[564,1492,1493],{"class":1191},"        runAsGroup",[564,1495,668],{"class":624},[564,1497,1487],{"class":1286},[564,1499,1501,1504,1506],{"class":566,"line":1500},64,[564,1502,1503],{"class":1191},"        fsGroup",[564,1505,668],{"class":624},[564,1507,1487],{"class":1286},[564,1509,1511,1514],{"class":566,"line":1510},65,[564,1512,1513],{"class":1191},"        seccompProfile",[564,1515,1217],{"class":624},[564,1517,1519,1522,1524],{"class":566,"line":1518},66,[564,1520,1521],{"class":1191},"          type",[564,1523,668],{"class":624},[564,1525,1526],{"class":574}," RuntimeDefault\n",[564,1528,1530,1533],{"class":566,"line":1529},67,[564,1531,1532],{"class":1191},"      containers",[564,1534,1217],{"class":624},[564,1536,1538,1540,1542,1544],{"class":566,"line":1537},68,[564,1539,1437],{"class":624},[564,1541,1271],{"class":1191},[564,1543,668],{"class":624},[564,1545,1228],{"class":574},[564,1547,1549,1552,1554],{"class":566,"line":1548},69,[564,1550,1551],{"class":1191},"          image",[564,1553,668],{"class":624},[564,1555,1556],{"class":574}," registry.gitlab.com\u002Fiq-me\u002Fnew-ddm-images\u002Fpostgres:18\n",[564,1558,1560],{"class":566,"line":1559},70,[564,1561,1562],{"class":678},"          # Postgres' own fixes come under the same tag: a restart brings them (user guide, „Postgres\").\n",[564,1564,1566,1569,1571],{"class":566,"line":1565},71,[564,1567,1568],{"class":1191},"          imagePullPolicy",[564,1570,668],{"class":624},[564,1572,1573],{"class":574}," Always\n",[564,1575,1577,1580],{"class":566,"line":1576},72,[564,1578,1579],{"class":1191},"          securityContext",[564,1581,1217],{"class":624},[564,1583,1585,1588,1590],{"class":566,"line":1584},73,[564,1586,1587],{"class":1191},"            allowPrivilegeEscalation",[564,1589,668],{"class":624},[564,1591,1592],{"class":1475}," false\n",[564,1594,1596,1599,1601],{"class":566,"line":1595},74,[564,1597,1598],{"class":1191},"            readOnlyRootFilesystem",[564,1600,668],{"class":624},[564,1602,1476],{"class":1475},[564,1604,1606,1609],{"class":566,"line":1605},75,[564,1607,1608],{"class":1191},"            capabilities",[564,1610,1217],{"class":624},[564,1612,1614,1617,1619,1622,1625],{"class":566,"line":1613},76,[564,1615,1616],{"class":1191},"              drop",[564,1618,668],{"class":624},[564,1620,1621],{"class":624}," [",[564,1623,1624],{"class":574},"ALL",[564,1626,1627],{"class":624},"]\n",[564,1629,1631,1634],{"class":566,"line":1630},77,[564,1632,1633],{"class":1191},"          env",[564,1635,1217],{"class":624},[564,1637,1639,1642,1644,1646],{"class":566,"line":1638},78,[564,1640,1641],{"class":624},"            -",[564,1643,1271],{"class":1191},[564,1645,668],{"class":624},[564,1647,1648],{"class":574}," POSTGRES_USER\n",[564,1650,1652,1655,1657],{"class":566,"line":1651},79,[564,1653,1654],{"class":1191},"              value",[564,1656,668],{"class":624},[564,1658,581],{"class":574},[564,1660,1662,1664,1666,1668],{"class":566,"line":1661},80,[564,1663,1641],{"class":624},[564,1665,1271],{"class":1191},[564,1667,668],{"class":624},[564,1669,1670],{"class":574}," POSTGRES_DB\n",[564,1672,1674,1676,1678],{"class":566,"line":1673},81,[564,1675,1654],{"class":1191},[564,1677,668],{"class":624},[564,1679,581],{"class":574},[564,1681,1683,1685,1687,1689],{"class":566,"line":1682},82,[564,1684,1641],{"class":624},[564,1686,1271],{"class":1191},[564,1688,668],{"class":624},[564,1690,1691],{"class":574}," POSTGRES_PASSWORD\n",[564,1693,1695,1698],{"class":566,"line":1694},83,[564,1696,1697],{"class":1191},"              valueFrom",[564,1699,1217],{"class":624},[564,1701,1703,1706],{"class":566,"line":1702},84,[564,1704,1705],{"class":1191},"                secretKeyRef",[564,1707,1217],{"class":624},[564,1709,1711,1714,1716],{"class":566,"line":1710},85,[564,1712,1713],{"class":1191},"                  name",[564,1715,668],{"class":624},[564,1717,581],{"class":574},[564,1719,1721,1724,1726],{"class":566,"line":1720},86,[564,1722,1723],{"class":1191},"                  key",[564,1725,668],{"class":624},[564,1727,1691],{"class":574},[564,1729,1731,1734],{"class":566,"line":1730},87,[564,1732,1733],{"class":1191},"          ports",[564,1735,1217],{"class":624},[564,1737,1739,1741,1743,1745],{"class":566,"line":1738},88,[564,1740,1641],{"class":624},[564,1742,1271],{"class":1191},[564,1744,668],{"class":624},[564,1746,1228],{"class":574},[564,1748,1750,1753,1755],{"class":566,"line":1749},89,[564,1751,1752],{"class":1191},"              containerPort",[564,1754,668],{"class":624},[564,1756,1287],{"class":1286},[564,1758,1760,1763],{"class":566,"line":1759},90,[564,1761,1762],{"class":1191},"          readinessProbe",[564,1764,1217],{"class":624},[564,1766,1768,1771],{"class":566,"line":1767},91,[564,1769,1770],{"class":1191},"            exec",[564,1772,1217],{"class":624},[564,1774,1776,1779,1781,1783,1786,1789,1792,1794,1796,1798,1801,1803,1805],{"class":566,"line":1775},92,[564,1777,1778],{"class":1191},"              command",[564,1780,668],{"class":624},[564,1782,1621],{"class":624},[564,1784,1785],{"class":574},"pg_isready",[564,1787,1788],{"class":624},",",[564,1790,1791],{"class":574}," -U",[564,1793,1788],{"class":624},[564,1795,592],{"class":574},[564,1797,1788],{"class":624},[564,1799,1800],{"class":574}," -d",[564,1802,1788],{"class":624},[564,1804,592],{"class":574},[564,1806,1627],{"class":624},[564,1808,1810,1813,1815],{"class":566,"line":1809},93,[564,1811,1812],{"class":1191},"            periodSeconds",[564,1814,668],{"class":624},[564,1816,1817],{"class":1286}," 5\n",[564,1819,1821,1824],{"class":566,"line":1820},94,[564,1822,1823],{"class":1191},"          resources",[564,1825,1217],{"class":624},[564,1827,1829,1832],{"class":566,"line":1828},95,[564,1830,1831],{"class":1191},"            requests",[564,1833,1217],{"class":624},[564,1835,1837,1840,1842],{"class":566,"line":1836},96,[564,1838,1839],{"class":1191},"              cpu",[564,1841,668],{"class":624},[564,1843,1844],{"class":574}," 250m\n",[564,1846,1848,1851,1853],{"class":566,"line":1847},97,[564,1849,1850],{"class":1191},"              memory",[564,1852,668],{"class":624},[564,1854,1855],{"class":574}," 512Mi\n",[564,1857,1859,1862],{"class":566,"line":1858},98,[564,1860,1861],{"class":1191},"            limits",[564,1863,1217],{"class":624},[564,1865,1867,1869,1871],{"class":566,"line":1866},99,[564,1868,1850],{"class":1191},[564,1870,668],{"class":624},[564,1872,1873],{"class":574}," 2Gi\n",[564,1875,1877,1880],{"class":566,"line":1876},100,[564,1878,1879],{"class":1191},"          volumeMounts",[564,1881,1217],{"class":624},[564,1883,1885,1887,1889,1891],{"class":566,"line":1884},101,[564,1886,1641],{"class":624},[564,1888,1271],{"class":1191},[564,1890,668],{"class":624},[564,1892,1228],{"class":574},[564,1894,1896,1899,1901],{"class":566,"line":1895},102,[564,1897,1898],{"class":1191},"              mountPath",[564,1900,668],{"class":624},[564,1902,1903],{"class":574}," \u002Fvar\u002Flib\u002Fpostgresql\n",[564,1905,1907],{"class":566,"line":1906},103,[564,1908,1909],{"class":678},"            # Writable besides its data: the socket, and scratch.\n",[564,1911,1913,1915,1917,1919],{"class":566,"line":1912},104,[564,1914,1641],{"class":624},[564,1916,1271],{"class":1191},[564,1918,668],{"class":624},[564,1920,1921],{"class":574}," run\n",[564,1923,1925,1927,1929],{"class":566,"line":1924},105,[564,1926,1898],{"class":1191},[564,1928,668],{"class":624},[564,1930,1931],{"class":574}," \u002Fvar\u002Frun\u002Fpostgresql\n",[564,1933,1935,1937,1939,1941],{"class":566,"line":1934},106,[564,1936,1641],{"class":624},[564,1938,1271],{"class":1191},[564,1940,668],{"class":624},[564,1942,1943],{"class":574}," tmp\n",[564,1945,1947,1949,1951],{"class":566,"line":1946},107,[564,1948,1898],{"class":1191},[564,1950,668],{"class":624},[564,1952,1953],{"class":574}," \u002Ftmp\n",[564,1955,1957,1960],{"class":566,"line":1956},108,[564,1958,1959],{"class":1191},"      volumes",[564,1961,1217],{"class":624},[564,1963,1965,1967,1969,1971],{"class":566,"line":1964},109,[564,1966,1437],{"class":624},[564,1968,1271],{"class":1191},[564,1970,668],{"class":624},[564,1972,1921],{"class":574},[564,1974,1976,1979,1981],{"class":566,"line":1975},110,[564,1977,1978],{"class":1191},"          emptyDir",[564,1980,668],{"class":624},[564,1982,1983],{"class":624}," {}\n",[564,1985,1987,1989,1991,1993],{"class":566,"line":1986},111,[564,1988,1437],{"class":624},[564,1990,1271],{"class":1191},[564,1992,668],{"class":624},[564,1994,1943],{"class":574},[564,1996,1998,2000,2002],{"class":566,"line":1997},112,[564,1999,1978],{"class":1191},[564,2001,668],{"class":624},[564,2003,1983],{"class":624},[564,2005,2007,2010],{"class":566,"line":2006},113,[564,2008,2009],{"class":1191},"  volumeClaimTemplates",[564,2011,1217],{"class":624},[564,2013,2015,2017,2020],{"class":566,"line":2014},114,[564,2016,1268],{"class":624},[564,2018,2019],{"class":1191}," metadata",[564,2021,1217],{"class":624},[564,2023,2025,2028,2030],{"class":566,"line":2024},115,[564,2026,2027],{"class":1191},"        name",[564,2029,668],{"class":624},[564,2031,1228],{"class":574},[564,2033,2035,2038],{"class":566,"line":2034},116,[564,2036,2037],{"class":1191},"      spec",[564,2039,1217],{"class":624},[564,2041,2043,2046,2048,2050,2053],{"class":566,"line":2042},117,[564,2044,2045],{"class":1191},"        accessModes",[564,2047,668],{"class":624},[564,2049,1621],{"class":624},[564,2051,2052],{"class":574},"ReadWriteOnce",[564,2054,1627],{"class":624},[564,2056,2058,2061],{"class":566,"line":2057},118,[564,2059,2060],{"class":1191},"        resources",[564,2062,1217],{"class":624},[564,2064,2066,2069],{"class":566,"line":2065},119,[564,2067,2068],{"class":1191},"          requests",[564,2070,1217],{"class":624},[564,2072,2074,2077,2079],{"class":566,"line":2073},120,[564,2075,2076],{"class":1191},"            storage",[564,2078,668],{"class":624},[564,2080,2081],{"class":574}," 20Gi\n",[564,2083,2085],{"class":566,"line":2084},121,[564,2086,1173],{"class":570},[564,2088,2090],{"class":566,"line":2089},122,[564,2091,2092],{"class":678},"# The documents, and the database's dumps taken before each migration (the\n",[564,2094,2096],{"class":566,"line":2095},123,[564,2097,2098],{"class":678},"# last three): read and written by the cms and the render worker, which may\n",[564,2100,2102],{"class":566,"line":2101},124,[564,2103,2104],{"class":678},"# run on different nodes. With an S3 bucket configured (`S3_ENDPOINT`) nothing\n",[564,2106,2108],{"class":566,"line":2107},125,[564,2109,2110],{"class":678},"# is kept here, and its size may be small.\n",[564,2112,2114,2116,2118],{"class":566,"line":2113},126,[564,2115,1192],{"class":1191},[564,2117,668],{"class":624},[564,2119,1197],{"class":574},[564,2121,2123,2125,2127],{"class":566,"line":2122},127,[564,2124,1203],{"class":1191},[564,2126,668],{"class":624},[564,2128,2129],{"class":574}," PersistentVolumeClaim\n",[564,2131,2133,2135],{"class":566,"line":2132},128,[564,2134,1214],{"class":1191},[564,2136,1217],{"class":624},[564,2138,2140,2142,2144],{"class":566,"line":2139},129,[564,2141,1223],{"class":1191},[564,2143,668],{"class":624},[564,2145,2146],{"class":574}," ddm-data\n",[564,2148,2150,2152],{"class":566,"line":2149},130,[564,2151,1234],{"class":1191},[564,2153,1217],{"class":624},[564,2155,2157,2160,2162,2164,2166],{"class":566,"line":2156},131,[564,2158,2159],{"class":1191},"  accessModes",[564,2161,668],{"class":624},[564,2163,1621],{"class":624},[564,2165,537],{"class":574},[564,2167,1627],{"class":624},[564,2169,2171,2174],{"class":566,"line":2170},132,[564,2172,2173],{"class":1191},"  resources",[564,2175,1217],{"class":624},[564,2177,2179,2182],{"class":566,"line":2178},133,[564,2180,2181],{"class":1191},"    requests",[564,2183,1217],{"class":624},[564,2185,2187,2190,2192],{"class":566,"line":2186},134,[564,2188,2189],{"class":1191},"      storage",[564,2191,668],{"class":624},[564,2193,2194],{"class":574}," 100Gi\n",[564,2196,2198],{"class":566,"line":2197},135,[564,2199,1173],{"class":570},[564,2201,2203],{"class":566,"line":2202},136,[564,2204,2205],{"class":678},"# The management app, and the API the reader app, the render worker's\n",[564,2207,2209],{"class":566,"line":2208},137,[564,2210,2211],{"class":678},"# documents and every integration go through. One replica, replaced rather\n",[564,2213,2215],{"class":566,"line":2214},138,[564,2216,2217],{"class":678},"# than rolled: it runs the scheduled tasks, and migrates the database to its\n",[564,2219,2221],{"class":566,"line":2220},139,[564,2222,2223],{"class":678},"# release before it answers.\n",[564,2225,2227,2229,2231],{"class":566,"line":2226},140,[564,2228,1192],{"class":1191},[564,2230,668],{"class":624},[564,2232,1197],{"class":574},[564,2234,2236,2238,2240],{"class":566,"line":2235},141,[564,2237,1203],{"class":1191},[564,2239,668],{"class":624},[564,2241,1208],{"class":574},[564,2243,2245,2247],{"class":566,"line":2244},142,[564,2246,1214],{"class":1191},[564,2248,1217],{"class":624},[564,2250,2252,2254,2256],{"class":566,"line":2251},143,[564,2253,1223],{"class":1191},[564,2255,668],{"class":624},[564,2257,2258],{"class":574}," cms\n",[564,2260,2262,2264],{"class":566,"line":2261},144,[564,2263,1234],{"class":1191},[564,2265,1217],{"class":624},[564,2267,2269,2271],{"class":566,"line":2268},145,[564,2270,1242],{"class":1191},[564,2272,1217],{"class":624},[564,2274,2276,2278,2280],{"class":566,"line":2275},146,[564,2277,1250],{"class":1191},[564,2279,668],{"class":624},[564,2281,2258],{"class":574},[564,2283,2285,2287],{"class":566,"line":2284},147,[564,2286,1260],{"class":1191},[564,2288,1217],{"class":624},[564,2290,2292,2294,2296,2298],{"class":566,"line":2291},148,[564,2293,1268],{"class":624},[564,2295,1271],{"class":1191},[564,2297,668],{"class":624},[564,2299,2300],{"class":574}," http\n",[564,2302,2304,2306,2308],{"class":566,"line":2303},149,[564,2305,1281],{"class":1191},[564,2307,668],{"class":624},[564,2309,2310],{"class":1286}," 3000\n",[564,2312,2314,2317,2319],{"class":566,"line":2313},150,[564,2315,2316],{"class":1191},"      targetPort",[564,2318,668],{"class":624},[564,2320,2300],{"class":574},[564,2322,2324],{"class":566,"line":2323},151,[564,2325,1173],{"class":570},[564,2327,2329,2331,2333],{"class":566,"line":2328},152,[564,2330,1192],{"class":1191},[564,2332,668],{"class":624},[564,2334,1302],{"class":574},[564,2336,2338,2340,2342],{"class":566,"line":2337},153,[564,2339,1203],{"class":1191},[564,2341,668],{"class":624},[564,2343,2344],{"class":574}," Deployment\n",[564,2346,2348,2350],{"class":566,"line":2347},154,[564,2349,1214],{"class":1191},[564,2351,1217],{"class":624},[564,2353,2355,2357,2359],{"class":566,"line":2354},155,[564,2356,1223],{"class":1191},[564,2358,668],{"class":624},[564,2360,2258],{"class":574},[564,2362,2364,2366],{"class":566,"line":2363},156,[564,2365,1234],{"class":1191},[564,2367,1217],{"class":624},[564,2369,2371,2373,2375],{"class":566,"line":2370},157,[564,2372,1351],{"class":1191},[564,2374,668],{"class":624},[564,2376,1356],{"class":1286},[564,2378,2380,2383],{"class":566,"line":2379},158,[564,2381,2382],{"class":1191},"  strategy",[564,2384,1217],{"class":624},[564,2386,2388,2391,2393],{"class":566,"line":2387},159,[564,2389,2390],{"class":1191},"    type",[564,2392,668],{"class":624},[564,2394,2395],{"class":574}," Recreate\n",[564,2397,2399,2401],{"class":566,"line":2398},160,[564,2400,1242],{"class":1191},[564,2402,1217],{"class":624},[564,2404,2406,2408],{"class":566,"line":2405},161,[564,2407,1369],{"class":1191},[564,2409,1217],{"class":624},[564,2411,2413,2415,2417],{"class":566,"line":2412},162,[564,2414,1377],{"class":1191},[564,2416,668],{"class":624},[564,2418,2258],{"class":574},[564,2420,2422,2424],{"class":566,"line":2421},163,[564,2423,1387],{"class":1191},[564,2425,1217],{"class":624},[564,2427,2429,2431],{"class":566,"line":2428},164,[564,2430,1395],{"class":1191},[564,2432,1217],{"class":624},[564,2434,2436,2438],{"class":566,"line":2435},165,[564,2437,1403],{"class":1191},[564,2439,1217],{"class":624},[564,2441,2443,2445,2447],{"class":566,"line":2442},166,[564,2444,1411],{"class":1191},[564,2446,668],{"class":624},[564,2448,2258],{"class":574},[564,2450,2452,2454],{"class":566,"line":2451},167,[564,2453,1421],{"class":1191},[564,2455,1217],{"class":624},[564,2457,2459,2461],{"class":566,"line":2458},168,[564,2460,1429],{"class":1191},[564,2462,1217],{"class":624},[564,2464,2466,2468,2470,2472],{"class":566,"line":2465},169,[564,2467,1437],{"class":624},[564,2469,1271],{"class":1191},[564,2471,668],{"class":624},[564,2473,1444],{"class":574},[564,2475,2477,2479],{"class":566,"line":2476},170,[564,2478,1462],{"class":1191},[564,2480,1217],{"class":624},[564,2482,2484,2486,2488],{"class":566,"line":2483},171,[564,2485,1470],{"class":1191},[564,2487,668],{"class":624},[564,2489,1476],{"class":1475},[564,2491,2493,2495,2497],{"class":566,"line":2492},172,[564,2494,1482],{"class":1191},[564,2496,668],{"class":624},[564,2498,2499],{"class":1286}," 1000\n",[564,2501,2503,2505,2507],{"class":566,"line":2502},173,[564,2504,1493],{"class":1191},[564,2506,668],{"class":624},[564,2508,2499],{"class":1286},[564,2510,2512,2514,2516],{"class":566,"line":2511},174,[564,2513,1503],{"class":1191},[564,2515,668],{"class":624},[564,2517,2499],{"class":1286},[564,2519,2521,2523],{"class":566,"line":2520},175,[564,2522,1532],{"class":1191},[564,2524,1217],{"class":624},[564,2526,2528,2530,2532,2534],{"class":566,"line":2527},176,[564,2529,1437],{"class":624},[564,2531,1271],{"class":1191},[564,2533,668],{"class":624},[564,2535,2258],{"class":574},[564,2537,2539,2541,2543,2546],{"class":566,"line":2538},177,[564,2540,1551],{"class":1191},[564,2542,668],{"class":624},[564,2544,2545],{"class":574}," registry.gitlab.com\u002Fiq-me\u002Fnew-ddm-images\u002Fcms:latest",[564,2547,2548],{"class":678}," # {\"$imagepolicy\": \"flux-system:ddm-cms\"}\n",[564,2550,2552],{"class":566,"line":2551},178,[564,2553,2554],{"class":678},"          # Asked anew at every start: a tag that moves (`stable`, `0.26`) brings its newest image.\n",[564,2556,2558,2560,2562],{"class":566,"line":2557},179,[564,2559,1568],{"class":1191},[564,2561,668],{"class":624},[564,2563,1573],{"class":574},[564,2565,2567,2569],{"class":566,"line":2566},180,[564,2568,1579],{"class":1191},[564,2570,1217],{"class":624},[564,2572,2574,2576,2578],{"class":566,"line":2573},181,[564,2575,1587],{"class":1191},[564,2577,668],{"class":624},[564,2579,1592],{"class":1475},[564,2581,2583,2585,2587],{"class":566,"line":2582},182,[564,2584,1598],{"class":1191},[564,2586,668],{"class":624},[564,2588,1476],{"class":1475},[564,2590,2592,2594],{"class":566,"line":2591},183,[564,2593,1608],{"class":1191},[564,2595,1217],{"class":624},[564,2597,2599,2601,2603,2605,2607],{"class":566,"line":2598},184,[564,2600,1616],{"class":1191},[564,2602,668],{"class":624},[564,2604,1621],{"class":624},[564,2606,1624],{"class":574},[564,2608,1627],{"class":624},[564,2610,2612,2615],{"class":566,"line":2611},185,[564,2613,2614],{"class":1191},"          envFrom",[564,2616,1217],{"class":624},[564,2618,2620,2622,2625],{"class":566,"line":2619},186,[564,2621,1641],{"class":624},[564,2623,2624],{"class":1191}," configMapRef",[564,2626,1217],{"class":624},[564,2628,2630,2633,2635],{"class":566,"line":2629},187,[564,2631,2632],{"class":1191},"                name",[564,2634,668],{"class":624},[564,2636,581],{"class":574},[564,2638,2640,2642,2645],{"class":566,"line":2639},188,[564,2641,1641],{"class":624},[564,2643,2644],{"class":1191}," secretRef",[564,2646,1217],{"class":624},[564,2648,2650,2652,2654],{"class":566,"line":2649},189,[564,2651,2632],{"class":1191},[564,2653,668],{"class":624},[564,2655,581],{"class":574},[564,2657,2659,2661],{"class":566,"line":2658},190,[564,2660,1633],{"class":1191},[564,2662,1217],{"class":624},[564,2664,2666],{"class":566,"line":2665},191,[564,2667,2668],{"class":678},"            # Which version of this file this is: a release that needs a newer\n",[564,2670,2672],{"class":566,"line":2671},192,[564,2673,2674],{"class":678},"            # one says so to the administrators, rather than failing (user guide, „Updates\").\n",[564,2676,2678,2680,2682,2684],{"class":566,"line":2677},193,[564,2679,1641],{"class":624},[564,2681,1271],{"class":1191},[564,2683,668],{"class":624},[564,2685,2686],{"class":574}," DDM_DEPLOY_VERSION\n",[564,2688,2690,2692,2694,2697,2700],{"class":566,"line":2689},194,[564,2691,1654],{"class":1191},[564,2693,668],{"class":624},[564,2695,2696],{"class":624}," \"",[564,2698,2699],{"class":574},"1",[564,2701,2702],{"class":624},"\"\n",[564,2704,2706,2708,2710,2712],{"class":566,"line":2705},195,[564,2707,1641],{"class":624},[564,2709,1271],{"class":1191},[564,2711,668],{"class":624},[564,2713,2714],{"class":574}," DATABASE_URL\n",[564,2716,2718,2720,2722],{"class":566,"line":2717},196,[564,2719,1654],{"class":1191},[564,2721,668],{"class":624},[564,2723,2724],{"class":574}," postgres:\u002F\u002Fddm:$(POSTGRES_PASSWORD)@postgres:5432\u002Fddm\n",[564,2726,2728,2730,2732,2734],{"class":566,"line":2727},197,[564,2729,1641],{"class":624},[564,2731,1271],{"class":1191},[564,2733,668],{"class":624},[564,2735,2736],{"class":574}," BETTER_AUTH_URL\n",[564,2738,2740,2742,2744],{"class":566,"line":2739},198,[564,2741,1654],{"class":1191},[564,2743,668],{"class":624},[564,2745,2746],{"class":574}," https:\u002F\u002F$(DDM_CMS_HOST)\n",[564,2748,2750,2752,2754,2756],{"class":566,"line":2749},199,[564,2751,1641],{"class":624},[564,2753,1271],{"class":1191},[564,2755,668],{"class":624},[564,2757,2758],{"class":574}," CLIENT_ORIGIN\n",[564,2760,2762,2764,2766],{"class":566,"line":2761},200,[564,2763,1654],{"class":1191},[564,2765,668],{"class":624},[564,2767,2768],{"class":574}," https:\u002F\u002F$(DDM_APP_HOST)\n",[564,2770,2772,2774,2776,2778],{"class":566,"line":2771},201,[564,2773,1641],{"class":624},[564,2775,1271],{"class":1191},[564,2777,668],{"class":624},[564,2779,2780],{"class":574}," STORAGE_DIR\n",[564,2782,2784,2786,2788],{"class":566,"line":2783},202,[564,2785,1654],{"class":1191},[564,2787,668],{"class":624},[564,2789,2790],{"class":574}," \u002Fdata\u002Fstorage\n",[564,2792,2794,2796,2798,2800],{"class":566,"line":2793},203,[564,2795,1641],{"class":624},[564,2797,1271],{"class":1191},[564,2799,668],{"class":624},[564,2801,2802],{"class":574}," BACKUP_DIR\n",[564,2804,2806,2808,2810],{"class":566,"line":2805},204,[564,2807,1654],{"class":1191},[564,2809,668],{"class":624},[564,2811,2812],{"class":574}," \u002Fdata\u002Fbackups\n",[564,2814,2816],{"class":566,"line":2815},205,[564,2817,2818],{"class":678},"            # Uploads are stored here and drawn by the render worker.\n",[564,2820,2822,2824,2826,2828],{"class":566,"line":2821},206,[564,2823,1641],{"class":624},[564,2825,1271],{"class":1191},[564,2827,668],{"class":624},[564,2829,2830],{"class":574}," RENDER_MODE\n",[564,2832,2834,2836,2838],{"class":566,"line":2833},207,[564,2835,1654],{"class":1191},[564,2837,668],{"class":624},[564,2839,2840],{"class":574}," worker\n",[564,2842,2844,2846],{"class":566,"line":2843},208,[564,2845,1733],{"class":1191},[564,2847,1217],{"class":624},[564,2849,2851,2853,2855,2857],{"class":566,"line":2850},209,[564,2852,1641],{"class":624},[564,2854,1271],{"class":1191},[564,2856,668],{"class":624},[564,2858,2300],{"class":574},[564,2860,2862,2864,2866],{"class":566,"line":2861},210,[564,2863,1752],{"class":1191},[564,2865,668],{"class":624},[564,2867,2310],{"class":1286},[564,2869,2871],{"class":566,"line":2870},211,[564,2872,2873],{"class":678},"          # Migrations first, on a new release: up to five minutes.\n",[564,2875,2877,2880],{"class":566,"line":2876},212,[564,2878,2879],{"class":1191},"          startupProbe",[564,2881,1217],{"class":624},[564,2883,2885,2888],{"class":566,"line":2884},213,[564,2886,2887],{"class":1191},"            httpGet",[564,2889,1217],{"class":624},[564,2891,2893,2896,2898],{"class":566,"line":2892},214,[564,2894,2895],{"class":1191},"              path",[564,2897,668],{"class":624},[564,2899,2900],{"class":574}," \u002Fapi\u002Fauth\u002Fok\n",[564,2902,2904,2907,2909],{"class":566,"line":2903},215,[564,2905,2906],{"class":1191},"              port",[564,2908,668],{"class":624},[564,2910,2300],{"class":574},[564,2912,2914,2916,2918],{"class":566,"line":2913},216,[564,2915,1812],{"class":1191},[564,2917,668],{"class":624},[564,2919,2920],{"class":1286}," 2\n",[564,2922,2924,2927,2929],{"class":566,"line":2923},217,[564,2925,2926],{"class":1191},"            failureThreshold",[564,2928,668],{"class":624},[564,2930,2931],{"class":1286}," 150\n",[564,2933,2935,2937],{"class":566,"line":2934},218,[564,2936,1762],{"class":1191},[564,2938,1217],{"class":624},[564,2940,2942,2944],{"class":566,"line":2941},219,[564,2943,2887],{"class":1191},[564,2945,1217],{"class":624},[564,2947,2949,2951,2953],{"class":566,"line":2948},220,[564,2950,2895],{"class":1191},[564,2952,668],{"class":624},[564,2954,2900],{"class":574},[564,2956,2958,2960,2962],{"class":566,"line":2957},221,[564,2959,2906],{"class":1191},[564,2961,668],{"class":624},[564,2963,2300],{"class":574},[564,2965,2967,2969,2971],{"class":566,"line":2966},222,[564,2968,1812],{"class":1191},[564,2970,668],{"class":624},[564,2972,2973],{"class":1286}," 10\n",[564,2975,2977,2980],{"class":566,"line":2976},223,[564,2978,2979],{"class":1191},"          livenessProbe",[564,2981,1217],{"class":624},[564,2983,2985,2987],{"class":566,"line":2984},224,[564,2986,2887],{"class":1191},[564,2988,1217],{"class":624},[564,2990,2992,2994,2996],{"class":566,"line":2991},225,[564,2993,2895],{"class":1191},[564,2995,668],{"class":624},[564,2997,2900],{"class":574},[564,2999,3001,3003,3005],{"class":566,"line":3000},226,[564,3002,2906],{"class":1191},[564,3004,668],{"class":624},[564,3006,2300],{"class":574},[564,3008,3010,3012,3014],{"class":566,"line":3009},227,[564,3011,1812],{"class":1191},[564,3013,668],{"class":624},[564,3015,3016],{"class":1286}," 30\n",[564,3018,3020,3023,3025],{"class":566,"line":3019},228,[564,3021,3022],{"class":1191},"            timeoutSeconds",[564,3024,668],{"class":624},[564,3026,1817],{"class":1286},[564,3028,3030,3032],{"class":566,"line":3029},229,[564,3031,1823],{"class":1191},[564,3033,1217],{"class":624},[564,3035,3037,3039],{"class":566,"line":3036},230,[564,3038,1831],{"class":1191},[564,3040,1217],{"class":624},[564,3042,3044,3046,3048],{"class":566,"line":3043},231,[564,3045,1839],{"class":1191},[564,3047,668],{"class":624},[564,3049,1844],{"class":574},[564,3051,3053,3055,3057],{"class":566,"line":3052},232,[564,3054,1850],{"class":1191},[564,3056,668],{"class":624},[564,3058,1855],{"class":574},[564,3060,3062,3064],{"class":566,"line":3061},233,[564,3063,1861],{"class":1191},[564,3065,1217],{"class":624},[564,3067,3069,3071,3073],{"class":566,"line":3068},234,[564,3070,1850],{"class":1191},[564,3072,668],{"class":624},[564,3074,1873],{"class":574},[564,3076,3078,3080],{"class":566,"line":3077},235,[564,3079,1879],{"class":1191},[564,3081,1217],{"class":624},[564,3083,3085,3087,3089,3091],{"class":566,"line":3084},236,[564,3086,1641],{"class":624},[564,3088,1271],{"class":1191},[564,3090,668],{"class":624},[564,3092,3093],{"class":574}," data\n",[564,3095,3097,3099,3101],{"class":566,"line":3096},237,[564,3098,1898],{"class":1191},[564,3100,668],{"class":624},[564,3102,3103],{"class":574}," \u002Fdata\n",[564,3105,3107],{"class":566,"line":3106},238,[564,3108,3109],{"class":678},"            # The one place written besides `\u002Fdata`: uploads on their way, LibreOffice's profiles.\n",[564,3111,3113,3115,3117,3119],{"class":566,"line":3112},239,[564,3114,1641],{"class":624},[564,3116,1271],{"class":1191},[564,3118,668],{"class":624},[564,3120,1943],{"class":574},[564,3122,3124,3126,3128],{"class":566,"line":3123},240,[564,3125,1898],{"class":1191},[564,3127,668],{"class":624},[564,3129,1953],{"class":574},[564,3131,3133,3135],{"class":566,"line":3132},241,[564,3134,1959],{"class":1191},[564,3136,1217],{"class":624},[564,3138,3140,3142,3144,3146],{"class":566,"line":3139},242,[564,3141,1437],{"class":624},[564,3143,1271],{"class":1191},[564,3145,668],{"class":624},[564,3147,3093],{"class":574},[564,3149,3151,3154],{"class":566,"line":3150},243,[564,3152,3153],{"class":1191},"          persistentVolumeClaim",[564,3155,1217],{"class":624},[564,3157,3159,3162,3164],{"class":566,"line":3158},244,[564,3160,3161],{"class":1191},"            claimName",[564,3163,668],{"class":624},[564,3165,2146],{"class":574},[564,3167,3169,3171,3173,3175],{"class":566,"line":3168},245,[564,3170,1437],{"class":624},[564,3172,1271],{"class":1191},[564,3174,668],{"class":624},[564,3176,1943],{"class":574},[564,3178,3180,3182,3184],{"class":566,"line":3179},246,[564,3181,1978],{"class":1191},[564,3183,668],{"class":624},[564,3185,1983],{"class":624},[564,3187,3189],{"class":566,"line":3188},247,[564,3190,1173],{"class":570},[564,3192,3194],{"class":566,"line":3193},248,[564,3195,3196],{"class":678},"# Reads the text, draws the thumbnails and converts the Office files of what\n",[564,3198,3200],{"class":566,"line":3199},249,[564,3201,3202],{"class":678},"# is uploaded, sharing the work through the database: more replicas for more\n",[564,3204,3206],{"class":566,"line":3205},250,[564,3207,3208],{"class":678},"# imports. Each finishes the documents in hand before it stops — LibreOffice\n",[564,3210,3212],{"class":566,"line":3211},251,[564,3213,3214],{"class":678},"# may take minutes over a large deck.\n",[564,3216,3218,3220,3222],{"class":566,"line":3217},252,[564,3219,1192],{"class":1191},[564,3221,668],{"class":624},[564,3223,1302],{"class":574},[564,3225,3227,3229,3231],{"class":566,"line":3226},253,[564,3228,1203],{"class":1191},[564,3230,668],{"class":624},[564,3232,2344],{"class":574},[564,3234,3236,3238],{"class":566,"line":3235},254,[564,3237,1214],{"class":1191},[564,3239,1217],{"class":624},[564,3241,3243,3245,3247],{"class":566,"line":3242},255,[564,3244,1223],{"class":1191},[564,3246,668],{"class":624},[564,3248,3249],{"class":574}," render-worker\n",[564,3251,3253,3255],{"class":566,"line":3252},256,[564,3254,1234],{"class":1191},[564,3256,1217],{"class":624},[564,3258,3260,3262,3264],{"class":566,"line":3259},257,[564,3261,1351],{"class":1191},[564,3263,668],{"class":624},[564,3265,1356],{"class":1286},[564,3267,3269,3271],{"class":566,"line":3268},258,[564,3270,1242],{"class":1191},[564,3272,1217],{"class":624},[564,3274,3276,3278],{"class":566,"line":3275},259,[564,3277,1369],{"class":1191},[564,3279,1217],{"class":624},[564,3281,3283,3285,3287],{"class":566,"line":3282},260,[564,3284,1377],{"class":1191},[564,3286,668],{"class":624},[564,3288,3249],{"class":574},[564,3290,3292,3294],{"class":566,"line":3291},261,[564,3293,1387],{"class":1191},[564,3295,1217],{"class":624},[564,3297,3299,3301],{"class":566,"line":3298},262,[564,3300,1395],{"class":1191},[564,3302,1217],{"class":624},[564,3304,3306,3308],{"class":566,"line":3305},263,[564,3307,1403],{"class":1191},[564,3309,1217],{"class":624},[564,3311,3313,3315,3317],{"class":566,"line":3312},264,[564,3314,1411],{"class":1191},[564,3316,668],{"class":624},[564,3318,3249],{"class":574},[564,3320,3322,3324],{"class":566,"line":3321},265,[564,3323,1421],{"class":1191},[564,3325,1217],{"class":624},[564,3327,3329,3331],{"class":566,"line":3328},266,[564,3330,1429],{"class":1191},[564,3332,1217],{"class":624},[564,3334,3336,3338,3340,3342],{"class":566,"line":3335},267,[564,3337,1437],{"class":624},[564,3339,1271],{"class":1191},[564,3341,668],{"class":624},[564,3343,1444],{"class":574},[564,3345,3347,3349],{"class":566,"line":3346},268,[564,3348,1462],{"class":1191},[564,3350,1217],{"class":624},[564,3352,3354,3356,3358],{"class":566,"line":3353},269,[564,3355,1470],{"class":1191},[564,3357,668],{"class":624},[564,3359,1476],{"class":1475},[564,3361,3363,3365,3367],{"class":566,"line":3362},270,[564,3364,1482],{"class":1191},[564,3366,668],{"class":624},[564,3368,2499],{"class":1286},[564,3370,3372,3374,3376],{"class":566,"line":3371},271,[564,3373,1493],{"class":1191},[564,3375,668],{"class":624},[564,3377,2499],{"class":1286},[564,3379,3381,3383,3385],{"class":566,"line":3380},272,[564,3382,1503],{"class":1191},[564,3384,668],{"class":624},[564,3386,2499],{"class":1286},[564,3388,3390,3393,3395],{"class":566,"line":3389},273,[564,3391,3392],{"class":1191},"      terminationGracePeriodSeconds",[564,3394,668],{"class":624},[564,3396,3397],{"class":1286}," 660\n",[564,3399,3401,3403],{"class":566,"line":3400},274,[564,3402,1532],{"class":1191},[564,3404,1217],{"class":624},[564,3406,3408,3410,3412,3414],{"class":566,"line":3407},275,[564,3409,1437],{"class":624},[564,3411,1271],{"class":1191},[564,3413,668],{"class":624},[564,3415,3249],{"class":574},[564,3417,3419,3421,3423,3426],{"class":566,"line":3418},276,[564,3420,1551],{"class":1191},[564,3422,668],{"class":624},[564,3424,3425],{"class":574}," registry.gitlab.com\u002Fiq-me\u002Fnew-ddm-images\u002Frender-worker:latest",[564,3427,3428],{"class":678}," # {\"$imagepolicy\": \"flux-system:ddm-render-worker\"}\n",[564,3430,3432,3434,3436],{"class":566,"line":3431},277,[564,3433,1568],{"class":1191},[564,3435,668],{"class":624},[564,3437,1573],{"class":574},[564,3439,3441,3443],{"class":566,"line":3440},278,[564,3442,1579],{"class":1191},[564,3444,1217],{"class":624},[564,3446,3448,3450,3452],{"class":566,"line":3447},279,[564,3449,1587],{"class":1191},[564,3451,668],{"class":624},[564,3453,1592],{"class":1475},[564,3455,3457,3459,3461],{"class":566,"line":3456},280,[564,3458,1598],{"class":1191},[564,3460,668],{"class":624},[564,3462,1476],{"class":1475},[564,3464,3466,3468],{"class":566,"line":3465},281,[564,3467,1608],{"class":1191},[564,3469,1217],{"class":624},[564,3471,3473,3475,3477,3479,3481],{"class":566,"line":3472},282,[564,3474,1616],{"class":1191},[564,3476,668],{"class":624},[564,3478,1621],{"class":624},[564,3480,1624],{"class":574},[564,3482,1627],{"class":624},[564,3484,3486,3488],{"class":566,"line":3485},283,[564,3487,2614],{"class":1191},[564,3489,1217],{"class":624},[564,3491,3493,3495,3497],{"class":566,"line":3492},284,[564,3494,1641],{"class":624},[564,3496,2624],{"class":1191},[564,3498,1217],{"class":624},[564,3500,3502,3504,3506],{"class":566,"line":3501},285,[564,3503,2632],{"class":1191},[564,3505,668],{"class":624},[564,3507,581],{"class":574},[564,3509,3511,3513,3515],{"class":566,"line":3510},286,[564,3512,1641],{"class":624},[564,3514,2644],{"class":1191},[564,3516,1217],{"class":624},[564,3518,3520,3522,3524],{"class":566,"line":3519},287,[564,3521,2632],{"class":1191},[564,3523,668],{"class":624},[564,3525,581],{"class":574},[564,3527,3529,3531],{"class":566,"line":3528},288,[564,3530,1633],{"class":1191},[564,3532,1217],{"class":624},[564,3534,3536,3538,3540,3542],{"class":566,"line":3535},289,[564,3537,1641],{"class":624},[564,3539,1271],{"class":1191},[564,3541,668],{"class":624},[564,3543,2714],{"class":574},[564,3545,3547,3549,3551],{"class":566,"line":3546},290,[564,3548,1654],{"class":1191},[564,3550,668],{"class":624},[564,3552,2724],{"class":574},[564,3554,3556,3558,3560,3562],{"class":566,"line":3555},291,[564,3557,1641],{"class":624},[564,3559,1271],{"class":1191},[564,3561,668],{"class":624},[564,3563,2780],{"class":574},[564,3565,3567,3569,3571],{"class":566,"line":3566},292,[564,3568,1654],{"class":1191},[564,3570,668],{"class":624},[564,3572,2790],{"class":574},[564,3574,3576,3578,3580,3582],{"class":566,"line":3575},293,[564,3577,1641],{"class":624},[564,3579,1271],{"class":1191},[564,3581,668],{"class":624},[564,3583,3584],{"class":574}," RENDER_LARGE_OFFICE\n",[564,3586,3588,3590,3592,3594,3597],{"class":566,"line":3587},294,[564,3589,1654],{"class":1191},[564,3591,668],{"class":624},[564,3593,2696],{"class":624},[564,3595,3596],{"class":574},"on",[564,3598,2702],{"class":624},[564,3600,3602,3604],{"class":566,"line":3601},295,[564,3603,1823],{"class":1191},[564,3605,1217],{"class":624},[564,3607,3609,3611],{"class":566,"line":3608},296,[564,3610,1831],{"class":1191},[564,3612,1217],{"class":624},[564,3614,3616,3618,3620],{"class":566,"line":3615},297,[564,3617,1839],{"class":1191},[564,3619,668],{"class":624},[564,3621,3622],{"class":574}," 500m\n",[564,3624,3626,3628,3630],{"class":566,"line":3625},298,[564,3627,1850],{"class":1191},[564,3629,668],{"class":624},[564,3631,3632],{"class":574}," 1Gi\n",[564,3634,3636,3638],{"class":566,"line":3635},299,[564,3637,1861],{"class":1191},[564,3639,1217],{"class":624},[564,3641,3643,3645,3647],{"class":566,"line":3642},300,[564,3644,1850],{"class":1191},[564,3646,668],{"class":624},[564,3648,3649],{"class":574}," 3Gi\n",[564,3651,3653,3655],{"class":566,"line":3652},301,[564,3654,1879],{"class":1191},[564,3656,1217],{"class":624},[564,3658,3660,3662,3664,3666],{"class":566,"line":3659},302,[564,3661,1641],{"class":624},[564,3663,1271],{"class":1191},[564,3665,668],{"class":624},[564,3667,3093],{"class":574},[564,3669,3671,3673,3675],{"class":566,"line":3670},303,[564,3672,1898],{"class":1191},[564,3674,668],{"class":624},[564,3676,3103],{"class":574},[564,3678,3680],{"class":566,"line":3679},304,[564,3681,3109],{"class":678},[564,3683,3685,3687,3689,3691],{"class":566,"line":3684},305,[564,3686,1641],{"class":624},[564,3688,1271],{"class":1191},[564,3690,668],{"class":624},[564,3692,1943],{"class":574},[564,3694,3696,3698,3700],{"class":566,"line":3695},306,[564,3697,1898],{"class":1191},[564,3699,668],{"class":624},[564,3701,1953],{"class":574},[564,3703,3705,3707],{"class":566,"line":3704},307,[564,3706,1959],{"class":1191},[564,3708,1217],{"class":624},[564,3710,3712,3714,3716,3718],{"class":566,"line":3711},308,[564,3713,1437],{"class":624},[564,3715,1271],{"class":1191},[564,3717,668],{"class":624},[564,3719,3093],{"class":574},[564,3721,3723,3725],{"class":566,"line":3722},309,[564,3724,3153],{"class":1191},[564,3726,1217],{"class":624},[564,3728,3730,3732,3734],{"class":566,"line":3729},310,[564,3731,3161],{"class":1191},[564,3733,668],{"class":624},[564,3735,2146],{"class":574},[564,3737,3739,3741,3743,3745],{"class":566,"line":3738},311,[564,3740,1437],{"class":624},[564,3742,1271],{"class":1191},[564,3744,668],{"class":624},[564,3746,1943],{"class":574},[564,3748,3750,3752,3754],{"class":566,"line":3749},312,[564,3751,1978],{"class":1191},[564,3753,668],{"class":624},[564,3755,1983],{"class":624},[564,3757,3759],{"class":566,"line":3758},313,[564,3760,1173],{"class":570},[564,3762,3764],{"class":566,"line":3763},314,[564,3765,3766],{"class":678},"# The reader app: its pages, and everything under \u002Fapi forwarded to the cms.\n",[564,3768,3770,3772,3774],{"class":566,"line":3769},315,[564,3771,1192],{"class":1191},[564,3773,668],{"class":624},[564,3775,1197],{"class":574},[564,3777,3779,3781,3783],{"class":566,"line":3778},316,[564,3780,1203],{"class":1191},[564,3782,668],{"class":624},[564,3784,1208],{"class":574},[564,3786,3788,3790],{"class":566,"line":3787},317,[564,3789,1214],{"class":1191},[564,3791,1217],{"class":624},[564,3793,3795,3797,3799],{"class":566,"line":3794},318,[564,3796,1223],{"class":1191},[564,3798,668],{"class":624},[564,3800,3801],{"class":574}," client\n",[564,3803,3805,3807],{"class":566,"line":3804},319,[564,3806,1234],{"class":1191},[564,3808,1217],{"class":624},[564,3810,3812,3814],{"class":566,"line":3811},320,[564,3813,1242],{"class":1191},[564,3815,1217],{"class":624},[564,3817,3819,3821,3823],{"class":566,"line":3818},321,[564,3820,1250],{"class":1191},[564,3822,668],{"class":624},[564,3824,3801],{"class":574},[564,3826,3828,3830],{"class":566,"line":3827},322,[564,3829,1260],{"class":1191},[564,3831,1217],{"class":624},[564,3833,3835,3837,3839,3841],{"class":566,"line":3834},323,[564,3836,1268],{"class":624},[564,3838,1271],{"class":1191},[564,3840,668],{"class":624},[564,3842,2300],{"class":574},[564,3844,3846,3848,3850],{"class":566,"line":3845},324,[564,3847,1281],{"class":1191},[564,3849,668],{"class":624},[564,3851,2310],{"class":1286},[564,3853,3855,3857,3859],{"class":566,"line":3854},325,[564,3856,2316],{"class":1191},[564,3858,668],{"class":624},[564,3860,2300],{"class":574},[564,3862,3864],{"class":566,"line":3863},326,[564,3865,1173],{"class":570},[564,3867,3869,3871,3873],{"class":566,"line":3868},327,[564,3870,1192],{"class":1191},[564,3872,668],{"class":624},[564,3874,1302],{"class":574},[564,3876,3878,3880,3882],{"class":566,"line":3877},328,[564,3879,1203],{"class":1191},[564,3881,668],{"class":624},[564,3883,2344],{"class":574},[564,3885,3887,3889],{"class":566,"line":3886},329,[564,3888,1214],{"class":1191},[564,3890,1217],{"class":624},[564,3892,3894,3896,3898],{"class":566,"line":3893},330,[564,3895,1223],{"class":1191},[564,3897,668],{"class":624},[564,3899,3801],{"class":574},[564,3901,3903,3905],{"class":566,"line":3902},331,[564,3904,1234],{"class":1191},[564,3906,1217],{"class":624},[564,3908,3910,3912,3914],{"class":566,"line":3909},332,[564,3911,1351],{"class":1191},[564,3913,668],{"class":624},[564,3915,1356],{"class":1286},[564,3917,3919,3921],{"class":566,"line":3918},333,[564,3920,1242],{"class":1191},[564,3922,1217],{"class":624},[564,3924,3926,3928],{"class":566,"line":3925},334,[564,3927,1369],{"class":1191},[564,3929,1217],{"class":624},[564,3931,3933,3935,3937],{"class":566,"line":3932},335,[564,3934,1377],{"class":1191},[564,3936,668],{"class":624},[564,3938,3801],{"class":574},[564,3940,3942,3944],{"class":566,"line":3941},336,[564,3943,1387],{"class":1191},[564,3945,1217],{"class":624},[564,3947,3949,3951],{"class":566,"line":3948},337,[564,3950,1395],{"class":1191},[564,3952,1217],{"class":624},[564,3954,3956,3958],{"class":566,"line":3955},338,[564,3957,1403],{"class":1191},[564,3959,1217],{"class":624},[564,3961,3963,3965,3967],{"class":566,"line":3962},339,[564,3964,1411],{"class":1191},[564,3966,668],{"class":624},[564,3968,3801],{"class":574},[564,3970,3972,3974],{"class":566,"line":3971},340,[564,3973,1421],{"class":1191},[564,3975,1217],{"class":624},[564,3977,3979,3981],{"class":566,"line":3978},341,[564,3980,1429],{"class":1191},[564,3982,1217],{"class":624},[564,3984,3986,3988,3990,3992],{"class":566,"line":3985},342,[564,3987,1437],{"class":624},[564,3989,1271],{"class":1191},[564,3991,668],{"class":624},[564,3993,1444],{"class":574},[564,3995,3997,3999],{"class":566,"line":3996},343,[564,3998,1462],{"class":1191},[564,4000,1217],{"class":624},[564,4002,4004,4006,4008],{"class":566,"line":4003},344,[564,4005,1470],{"class":1191},[564,4007,668],{"class":624},[564,4009,1476],{"class":1475},[564,4011,4013,4015,4017],{"class":566,"line":4012},345,[564,4014,1482],{"class":1191},[564,4016,668],{"class":624},[564,4018,2499],{"class":1286},[564,4020,4022,4024,4026],{"class":566,"line":4021},346,[564,4023,1493],{"class":1191},[564,4025,668],{"class":624},[564,4027,2499],{"class":1286},[564,4029,4031,4033],{"class":566,"line":4030},347,[564,4032,1532],{"class":1191},[564,4034,1217],{"class":624},[564,4036,4038,4040,4042,4044],{"class":566,"line":4037},348,[564,4039,1437],{"class":624},[564,4041,1271],{"class":1191},[564,4043,668],{"class":624},[564,4045,3801],{"class":574},[564,4047,4049,4051,4053,4056],{"class":566,"line":4048},349,[564,4050,1551],{"class":1191},[564,4052,668],{"class":624},[564,4054,4055],{"class":574}," registry.gitlab.com\u002Fiq-me\u002Fnew-ddm-images\u002Fclient:latest",[564,4057,4058],{"class":678}," # {\"$imagepolicy\": \"flux-system:ddm-client\"}\n",[564,4060,4062,4064,4066],{"class":566,"line":4061},350,[564,4063,1568],{"class":1191},[564,4065,668],{"class":624},[564,4067,1573],{"class":574},[564,4069,4071,4073],{"class":566,"line":4070},351,[564,4072,1579],{"class":1191},[564,4074,1217],{"class":624},[564,4076,4078,4080,4082],{"class":566,"line":4077},352,[564,4079,1587],{"class":1191},[564,4081,668],{"class":624},[564,4083,1592],{"class":1475},[564,4085,4087,4089,4091],{"class":566,"line":4086},353,[564,4088,1598],{"class":1191},[564,4090,668],{"class":624},[564,4092,1476],{"class":1475},[564,4094,4096,4098],{"class":566,"line":4095},354,[564,4097,1608],{"class":1191},[564,4099,1217],{"class":624},[564,4101,4103,4105,4107,4109,4111],{"class":566,"line":4102},355,[564,4104,1616],{"class":1191},[564,4106,668],{"class":624},[564,4108,1621],{"class":624},[564,4110,1624],{"class":574},[564,4112,1627],{"class":624},[564,4114,4116,4118],{"class":566,"line":4115},356,[564,4117,2614],{"class":1191},[564,4119,1217],{"class":624},[564,4121,4123,4125,4127],{"class":566,"line":4122},357,[564,4124,1641],{"class":624},[564,4126,2624],{"class":1191},[564,4128,1217],{"class":624},[564,4130,4132,4134,4136],{"class":566,"line":4131},358,[564,4133,2632],{"class":1191},[564,4135,668],{"class":624},[564,4137,581],{"class":574},[564,4139,4141,4143],{"class":566,"line":4140},359,[564,4142,1633],{"class":1191},[564,4144,1217],{"class":624},[564,4146,4148,4150,4152,4154],{"class":566,"line":4147},360,[564,4149,1641],{"class":624},[564,4151,1271],{"class":1191},[564,4153,668],{"class":624},[564,4155,4156],{"class":574}," NUXT_API_ORIGIN\n",[564,4158,4160,4162,4164],{"class":566,"line":4159},361,[564,4161,1654],{"class":1191},[564,4163,668],{"class":624},[564,4165,4166],{"class":574}," http:\u002F\u002Fcms:3000\n",[564,4168,4170,4172,4174,4176],{"class":566,"line":4169},362,[564,4171,1641],{"class":624},[564,4173,1271],{"class":1191},[564,4175,668],{"class":624},[564,4177,4178],{"class":574}," NUXT_PUBLIC_MGMT_URL\n",[564,4180,4182,4184,4186],{"class":566,"line":4181},363,[564,4183,1654],{"class":1191},[564,4185,668],{"class":624},[564,4187,2746],{"class":574},[564,4189,4191],{"class":566,"line":4190},364,[564,4192,4193],{"class":678},"            # The reader app on this installation, for the mobile app's „Server\".\n",[564,4195,4197,4199,4201,4203],{"class":566,"line":4196},365,[564,4198,1641],{"class":624},[564,4200,1271],{"class":1191},[564,4202,668],{"class":624},[564,4204,4205],{"class":574}," NUXT_PUBLIC_SERVER_URL\n",[564,4207,4209,4211,4213],{"class":566,"line":4208},366,[564,4210,1654],{"class":1191},[564,4212,668],{"class":624},[564,4214,2768],{"class":574},[564,4216,4218,4220,4222,4224],{"class":566,"line":4217},367,[564,4219,1641],{"class":624},[564,4221,1271],{"class":1191},[564,4223,668],{"class":624},[564,4225,2830],{"class":574},[564,4227,4229,4231,4233],{"class":566,"line":4228},368,[564,4230,1654],{"class":1191},[564,4232,668],{"class":624},[564,4234,2840],{"class":574},[564,4236,4238,4240],{"class":566,"line":4237},369,[564,4239,1733],{"class":1191},[564,4241,1217],{"class":624},[564,4243,4245,4247,4249,4251],{"class":566,"line":4244},370,[564,4246,1641],{"class":624},[564,4248,1271],{"class":1191},[564,4250,668],{"class":624},[564,4252,2300],{"class":574},[564,4254,4256,4258,4260],{"class":566,"line":4255},371,[564,4257,1752],{"class":1191},[564,4259,668],{"class":624},[564,4261,2310],{"class":1286},[564,4263,4265],{"class":566,"line":4264},372,[564,4266,4267],{"class":678},"          # Through to the cms: what the reader app forwards answers, too.\n",[564,4269,4271,4273],{"class":566,"line":4270},373,[564,4272,1762],{"class":1191},[564,4274,1217],{"class":624},[564,4276,4278,4280],{"class":566,"line":4277},374,[564,4279,2887],{"class":1191},[564,4281,1217],{"class":624},[564,4283,4285,4287,4289],{"class":566,"line":4284},375,[564,4286,2895],{"class":1191},[564,4288,668],{"class":624},[564,4290,2900],{"class":574},[564,4292,4294,4296,4298],{"class":566,"line":4293},376,[564,4295,2906],{"class":1191},[564,4297,668],{"class":624},[564,4299,2300],{"class":574},[564,4301,4303,4305,4307],{"class":566,"line":4302},377,[564,4304,1812],{"class":1191},[564,4306,668],{"class":624},[564,4308,2973],{"class":1286},[564,4310,4312,4314],{"class":566,"line":4311},378,[564,4313,1823],{"class":1191},[564,4315,1217],{"class":624},[564,4317,4319,4321],{"class":566,"line":4318},379,[564,4320,1831],{"class":1191},[564,4322,1217],{"class":624},[564,4324,4326,4328,4330],{"class":566,"line":4325},380,[564,4327,1839],{"class":1191},[564,4329,668],{"class":624},[564,4331,4332],{"class":574}," 100m\n",[564,4334,4336,4338,4340],{"class":566,"line":4335},381,[564,4337,1850],{"class":1191},[564,4339,668],{"class":624},[564,4341,4342],{"class":574}," 128Mi\n",[564,4344,4346,4348],{"class":566,"line":4345},382,[564,4347,1861],{"class":1191},[564,4349,1217],{"class":624},[564,4351,4353,4355,4357],{"class":566,"line":4352},383,[564,4354,1850],{"class":1191},[564,4356,668],{"class":624},[564,4358,1855],{"class":574},[564,4360,4362,4364],{"class":566,"line":4361},384,[564,4363,1879],{"class":1191},[564,4365,1217],{"class":624},[564,4367,4369,4371,4373,4375],{"class":566,"line":4368},385,[564,4370,1641],{"class":624},[564,4372,1271],{"class":1191},[564,4374,668],{"class":624},[564,4376,1943],{"class":574},[564,4378,4380,4382,4384],{"class":566,"line":4379},386,[564,4381,1898],{"class":1191},[564,4383,668],{"class":624},[564,4385,1953],{"class":574},[564,4387,4389,4391],{"class":566,"line":4388},387,[564,4390,1959],{"class":1191},[564,4392,1217],{"class":624},[564,4394,4396,4398,4400,4402],{"class":566,"line":4395},388,[564,4397,1437],{"class":624},[564,4399,1271],{"class":1191},[564,4401,668],{"class":624},[564,4403,1943],{"class":574},[564,4405,4407,4409,4411],{"class":566,"line":4406},389,[564,4408,1978],{"class":1191},[564,4410,668],{"class":624},[564,4412,1983],{"class":624},[564,4414,4416],{"class":566,"line":4415},390,[564,4417,1173],{"class":570},[564,4419,4421],{"class":566,"line":4420},391,[564,4422,4423],{"class":678},"# Both hostnames — replace `cms.example.com` and `app.example.com` with yours —\n",[564,4425,4427],{"class":566,"line":4426},392,[564,4428,4429],{"class":678},"# with TLS from the Secret `ddm-tls`, or from cert-manager with its\n",[564,4431,4433],{"class":566,"line":4432},393,[564,4434,4435],{"class":678},"# annotation added here. Uploads are up to 1 GiB and may take a while:\n",[564,4437,4439],{"class":566,"line":4438},394,[564,4440,4441],{"class":678},"# ingress-nginx's limits raised; another controller needs its own.\n",[564,4443,4445,4447,4449],{"class":566,"line":4444},395,[564,4446,1192],{"class":1191},[564,4448,668],{"class":624},[564,4450,4451],{"class":574}," networking.k8s.io\u002Fv1\n",[564,4453,4455,4457,4459],{"class":566,"line":4454},396,[564,4456,1203],{"class":1191},[564,4458,668],{"class":624},[564,4460,4461],{"class":574}," Ingress\n",[564,4463,4465,4467],{"class":566,"line":4464},397,[564,4466,1214],{"class":1191},[564,4468,1217],{"class":624},[564,4470,4472,4474,4476],{"class":566,"line":4471},398,[564,4473,1223],{"class":1191},[564,4475,668],{"class":624},[564,4477,581],{"class":574},[564,4479,4481,4484],{"class":566,"line":4480},399,[564,4482,4483],{"class":1191},"  annotations",[564,4485,1217],{"class":624},[564,4487,4489,4492,4494],{"class":566,"line":4488},400,[564,4490,4491],{"class":1191},"    nginx.ingress.kubernetes.io\u002Fproxy-body-size",[564,4493,668],{"class":624},[564,4495,4496],{"class":574}," 1g\n",[564,4498,4500,4503,4505,4507,4510],{"class":566,"line":4499},401,[564,4501,4502],{"class":1191},"    nginx.ingress.kubernetes.io\u002Fproxy-read-timeout",[564,4504,668],{"class":624},[564,4506,2696],{"class":624},[564,4508,4509],{"class":574},"600",[564,4511,2702],{"class":624},[564,4513,4515,4518,4520,4522,4524],{"class":566,"line":4514},402,[564,4516,4517],{"class":1191},"    nginx.ingress.kubernetes.io\u002Fproxy-send-timeout",[564,4519,668],{"class":624},[564,4521,2696],{"class":624},[564,4523,4509],{"class":574},[564,4525,2702],{"class":624},[564,4527,4529,4532,4534,4536,4539],{"class":566,"line":4528},403,[564,4530,4531],{"class":1191},"    nginx.ingress.kubernetes.io\u002Fproxy-request-buffering",[564,4533,668],{"class":624},[564,4535,2696],{"class":624},[564,4537,4538],{"class":574},"off",[564,4540,2702],{"class":624},[564,4542,4544,4546],{"class":566,"line":4543},404,[564,4545,1234],{"class":1191},[564,4547,1217],{"class":624},[564,4549,4551,4554],{"class":566,"line":4550},405,[564,4552,4553],{"class":1191},"  tls",[564,4555,1217],{"class":624},[564,4557,4559,4561,4564,4566,4568,4570,4572,4575],{"class":566,"line":4558},406,[564,4560,1268],{"class":624},[564,4562,4563],{"class":1191}," hosts",[564,4565,668],{"class":624},[564,4567,1621],{"class":624},[564,4569,1026],{"class":574},[564,4571,1788],{"class":624},[564,4573,4574],{"class":574}," app.example.com",[564,4576,1627],{"class":624},[564,4578,4580,4583,4585],{"class":566,"line":4579},407,[564,4581,4582],{"class":1191},"      secretName",[564,4584,668],{"class":624},[564,4586,4587],{"class":574}," ddm-tls\n",[564,4589,4591,4594],{"class":566,"line":4590},408,[564,4592,4593],{"class":1191},"  rules",[564,4595,1217],{"class":624},[564,4597,4599,4601,4604,4606],{"class":566,"line":4598},409,[564,4600,1268],{"class":624},[564,4602,4603],{"class":1191}," host",[564,4605,668],{"class":624},[564,4607,4608],{"class":574}," cms.example.com\n",[564,4610,4612,4615],{"class":566,"line":4611},410,[564,4613,4614],{"class":1191},"      http",[564,4616,1217],{"class":624},[564,4618,4620,4623],{"class":566,"line":4619},411,[564,4621,4622],{"class":1191},"        paths",[564,4624,1217],{"class":624},[564,4626,4628,4631,4634,4636],{"class":566,"line":4627},412,[564,4629,4630],{"class":624},"          -",[564,4632,4633],{"class":1191}," path",[564,4635,668],{"class":624},[564,4637,4638],{"class":574}," \u002F\n",[564,4640,4642,4645,4647],{"class":566,"line":4641},413,[564,4643,4644],{"class":1191},"            pathType",[564,4646,668],{"class":624},[564,4648,4649],{"class":574}," Prefix\n",[564,4651,4653,4656],{"class":566,"line":4652},414,[564,4654,4655],{"class":1191},"            backend",[564,4657,1217],{"class":624},[564,4659,4661,4664],{"class":566,"line":4660},415,[564,4662,4663],{"class":1191},"              service",[564,4665,1217],{"class":624},[564,4667,4669,4671,4673],{"class":566,"line":4668},416,[564,4670,2632],{"class":1191},[564,4672,668],{"class":624},[564,4674,2258],{"class":574},[564,4676,4678,4681],{"class":566,"line":4677},417,[564,4679,4680],{"class":1191},"                port",[564,4682,1217],{"class":624},[564,4684,4686,4688,4690],{"class":566,"line":4685},418,[564,4687,1713],{"class":1191},[564,4689,668],{"class":624},[564,4691,2300],{"class":574},[564,4693,4695,4697,4699,4701],{"class":566,"line":4694},419,[564,4696,1268],{"class":624},[564,4698,4603],{"class":1191},[564,4700,668],{"class":624},[564,4702,4703],{"class":574}," app.example.com\n",[564,4705,4707,4709],{"class":566,"line":4706},420,[564,4708,4614],{"class":1191},[564,4710,1217],{"class":624},[564,4712,4714,4716],{"class":566,"line":4713},421,[564,4715,4622],{"class":1191},[564,4717,1217],{"class":624},[564,4719,4721,4723,4725,4727],{"class":566,"line":4720},422,[564,4722,4630],{"class":624},[564,4724,4633],{"class":1191},[564,4726,668],{"class":624},[564,4728,4638],{"class":574},[564,4730,4732,4734,4736],{"class":566,"line":4731},423,[564,4733,4644],{"class":1191},[564,4735,668],{"class":624},[564,4737,4649],{"class":574},[564,4739,4741,4743],{"class":566,"line":4740},424,[564,4742,4655],{"class":1191},[564,4744,1217],{"class":624},[564,4746,4748,4750],{"class":566,"line":4747},425,[564,4749,4663],{"class":1191},[564,4751,1217],{"class":624},[564,4753,4755,4757,4759],{"class":566,"line":4754},426,[564,4756,2632],{"class":1191},[564,4758,668],{"class":624},[564,4760,3801],{"class":574},[564,4762,4764,4766],{"class":566,"line":4763},427,[564,4765,4680],{"class":1191},[564,4767,1217],{"class":624},[564,4769,4771,4773,4775],{"class":566,"line":4770},428,[564,4772,1713],{"class":1191},[564,4774,668],{"class":624},[564,4776,2300],{"class":574},[451,4778,4780],{"id":4779},"_4-anwenden","4. Anwenden",[555,4782,4784],{"className":557,"code":4783,"language":559,"meta":560,"style":560},"kubectl -n ddm apply -f ddm.yaml\nkubectl -n ddm rollout status deployment\u002Fcms\n",[442,4785,4786,4803],{"__ignoreMap":560},[564,4787,4788,4790,4792,4794,4797,4800],{"class":566,"line":567},[564,4789,571],{"class":570},[564,4791,589],{"class":574},[564,4793,592],{"class":574},[564,4795,4796],{"class":574}," apply",[564,4798,4799],{"class":574}," -f",[564,4801,4802],{"class":574}," ddm.yaml\n",[564,4804,4805,4807,4809,4811,4814,4817],{"class":566,"line":584},[564,4806,571],{"class":570},[564,4808,589],{"class":574},[564,4810,592],{"class":574},[564,4812,4813],{"class":574}," rollout",[564,4815,4816],{"class":574}," status",[564,4818,4819],{"class":574}," deployment\u002Fcms\n",[433,4821,4822,4823,1018],{},"Dann legen Sie wie bei Docker Compose ",[665,4824,4826],{"href":4825},"\u002Fde\u002Fself-hosting\u002Fdocker-compose#6-das-erste-konto-anlegen","das erste Konto an",[451,4828,4830],{"id":4829},"einstellungen-ändern","Einstellungen ändern",[433,4832,4833,4834,4836,4837,4839],{},"Nach einer Änderung an ",[442,4835,662],{}," oder ",[442,4838,842],{}," schreiben Sie ConfigMap und Secret neu und starten die Apps neu:",[555,4841,4843],{"className":557,"code":4842,"language":559,"meta":560,"style":560},"kubectl -n ddm create configmap ddm --from-env-file=config.env --dry-run=client -o yaml | kubectl apply -f -\nkubectl -n ddm create secret generic ddm --from-env-file=secrets.env --dry-run=client -o yaml | kubectl apply -f -\nkubectl -n ddm rollout restart deployment\n",[442,4844,4845,4884,4919],{"__ignoreMap":560},[564,4846,4847,4849,4851,4853,4855,4857,4859,4862,4865,4868,4871,4874,4877,4879,4881],{"class":566,"line":567},[564,4848,571],{"class":570},[564,4850,589],{"class":574},[564,4852,592],{"class":574},[564,4854,575],{"class":574},[564,4856,953],{"class":574},[564,4858,592],{"class":574},[564,4860,4861],{"class":574}," --from-env-file=config.env",[564,4863,4864],{"class":574}," --dry-run=client",[564,4866,4867],{"class":574}," -o",[564,4869,4870],{"class":574}," yaml",[564,4872,4873],{"class":624}," |",[564,4875,4876],{"class":570}," kubectl",[564,4878,4796],{"class":574},[564,4880,4799],{"class":574},[564,4882,4883],{"class":574}," -\n",[564,4885,4886,4888,4890,4892,4894,4896,4898,4900,4903,4905,4907,4909,4911,4913,4915,4917],{"class":566,"line":584},[564,4887,571],{"class":570},[564,4889,589],{"class":574},[564,4891,592],{"class":574},[564,4893,575],{"class":574},[564,4895,597],{"class":574},[564,4897,973],{"class":574},[564,4899,592],{"class":574},[564,4901,4902],{"class":574}," --from-env-file=secrets.env",[564,4904,4864],{"class":574},[564,4906,4867],{"class":574},[564,4908,4870],{"class":574},[564,4910,4873],{"class":624},[564,4912,4876],{"class":570},[564,4914,4796],{"class":574},[564,4916,4799],{"class":574},[564,4918,4883],{"class":574},[564,4920,4921,4923,4925,4927,4929,4932],{"class":566,"line":610},[564,4922,571],{"class":570},[564,4924,589],{"class":574},[564,4926,592],{"class":574},[564,4928,4813],{"class":574},[564,4930,4931],{"class":574}," restart",[564,4933,4934],{"class":574}," deployment\n",[451,4936,4938],{"id":4937},"eine-eigene-datenbank-nutzen","Eine eigene Datenbank nutzen",[433,4940,4941,4942,4945],{},"Betreiben Sie Postgres schon selbst, braucht DDM Postgres 18 mit dem deutschen Wörterbuch für die Volltextsuche, das unser Image ",[442,4943,4944],{},"postgres:18"," mitbringt. Dann:",[4947,4948,4949,4958,4975],"ol",{},[993,4950,4951,4952,4954,4955,1018],{},"Tragen Sie die Adresse in ",[442,4953,842],{}," ein: ",[442,4956,4957],{},"EXTERNAL_DATABASE_URL=postgres:\u002F\u002Fddm:\u003CPasswort>@db.firma.de:5432\u002Fddm",[993,4959,4960,4961,1002,4963,847,4965,4967,4968,4971,4972,1018],{},"Ersetzen Sie in ",[442,4962,444],{},[442,4964,492],{},[442,4966,510],{}," den Wert von ",[442,4969,4970],{},"DATABASE_URL"," durch ",[442,4973,4974],{},"$(EXTERNAL_DATABASE_URL)",[993,4976,4977,4978,4980,4981,1018],{},"Löschen Sie in ",[442,4979,444],{}," die beiden ersten Abschnitte – den Service und das StatefulSet ",[442,4982,481],{},[451,4984,4986],{"id":4985},"ohne-readwritemany","Ohne ReadWriteMany",[433,4988,4989,4990,4992,4993,847,4996,4999,5000,5002,5003,5005,5006,668],{},"CMS und Render-Worker teilen sich das Volume ",[442,4991,530],{},". Kann Ihr Cluster kein Volume mit ReadWriteMany bereitstellen, legen Sie die Dokumente in einen S3-kompatiblen Bucket – ",[442,4994,4995],{},"S3_ENDPOINT",[442,4997,4998],{},"S3_BUCKET"," in ",[442,5001,662],{},", die Schlüssel in ",[442,5004,842],{},". Die Sicherungen landen dann im selben Bucket. Das Volume braucht danach nur noch das CMS. Ändern Sie in ",[442,5007,444],{},[4947,5009,5010,5023],{},[993,5011,5012,5013,5015,5016,5019,5020,1788],{},"beim PersistentVolumeClaim ",[442,5014,530],{}," die ",[442,5017,5018],{},"accessModes"," auf ",[442,5021,5022],{},"[ReadWriteOnce]",[993,5024,5025,5026,5028,5029,5032,5033,5036,5037,5040,5041,5044],{},"beim Deployment ",[442,5027,510],{}," die Einträge ",[442,5030,5031],{},"data"," unter ",[442,5034,5035],{},"volumeMounts"," und unter ",[442,5038,5039],{},"volumes"," – löschen Sie beide; ",[442,5042,5043],{},"tmp"," bleibt.",[5046,5047,5048],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":560,"searchDepth":584,"depth":584,"links":5050},[5051,5052,5053,5054,5055,5056,5057,5058],{"id":453,"depth":584,"text":454},{"id":552,"depth":584,"text":553},{"id":654,"depth":584,"text":655},{"id":981,"depth":584,"text":982},{"id":4779,"depth":584,"text":4780},{"id":4829,"depth":584,"text":4830},{"id":4937,"depth":584,"text":4938},{"id":4985,"depth":584,"text":4986},"DDM in einem Kubernetes-Cluster – eine Datei mit allem, zwei mit Ihren Einstellungen und ein Secret für die Registry.","md",null,{},{"icon":394},{"title":391,"description":5059},"ITchbbhv0nBQR7lwtytpNX5cvxEVc2P9n49BlNSOrRA",[5067,5069],{"title":387,"path":388,"stem":389,"description":5068,"icon":106,"children":-1},"DDM auf einem Server einrichten, mit Docker Compose – vom Login in die Registry bis zum ersten Konto.",{"title":396,"path":397,"stem":398,"description":5070,"icon":101,"children":-1},"Die Einstellungen einer Installation – was jede bewirkt und wann Sie sie brauchen.",1793617731187]