[{"data":1,"prerenderedAt":3936},["ShallowReactive",2],{"blog-current-shopware-renovate-bot-de":3,"blog-previous-shopware-renovate-bot-de":617,"blog-next-shopware-renovate-bot-de":632,"blog-alt-de-shopware-renovate-bot-de":644,"blog-alt-en-shopware-renovate-bot-de":645,"employee-robert-juzak":647,"content-query-speOOs7jne":745,"content-query-TVldk4ROTj":2257,"content-query-vhr2h3d1hs":3779,"content-query-KtO3wftRle":3851,"related-refs-shopware_devops--de":3886},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"author":10,"image":11,"releaseDate":12,"blogCategories":13,"articleTags":16,"tags":18,"body":21,"_type":611,"_id":612,"_source":613,"_file":614,"_stem":615,"_extension":616},"/blog/shopware-renovate-bot","blog",false,"","Konfiguration von Renovate für die ordnungsgemäße Behandlung von Shopware-Paketen","Shopware verwendet ein benutzerdefiniertes Versionierungsschema. Um Renovate die automatische Erstellung von PR's zu ermöglichen, müssen wir die Renovate-Konfiguration anpassen","robert-juzak","/images/dev-ops-dark.svg","2025-09-08",[14,15],"Das bewegt uns","DevOps",[15,17],"Open Source",[19,20],"shopware","devops",{"type":22,"children":23,"toc":607},"root",[24,33,47,54,67,76,109,115,145,150,181,529,534,601],{"type":25,"tag":26,"props":27,"children":32},"element","img",{"alt":7,"aspect-ratio":28,"height":29,"object-fit":30,"src":31},"1.78",300,"fill","/blog/shopware-renovate.png",[],{"type":25,"tag":34,"props":35,"children":36},"p",{},[37,45],{"type":25,"tag":38,"props":39,"children":41},"a",{"href":40},"https://docs.renovatebot.com/",[42],{"type":43,"value":44},"text","Renovate",{"type":43,"value":46}," ist ein Tool zur Verfolgung von Projektabhängigkeiten und zur Erstellung von Merge-/Pull-Requests für diese. Es funktioniert perfekt für die meisten gängigen Paketmanager, aber...",{"type":25,"tag":48,"props":49,"children":51},"h2",{"id":50},"shopware-versionierungsschema",[52],{"type":43,"value":53},"Shopware Versionierungsschema",{"type":25,"tag":34,"props":55,"children":56},{},[57,59,65],{"type":43,"value":58},"Shopware verwendet ein benutzerdefiniertes Versionierungsschema. Sie können den ",{"type":25,"tag":38,"props":60,"children":62},{"href":61},"https://www.shopware.com/de/news/shopware-6-versionierungs-strategie/",[63],{"type":43,"value":64},"offiziellen Artikel",{"type":43,"value":66}," lesen, aber kurz gesagt:",{"type":25,"tag":68,"props":69,"children":70},"blockquote",{},[71],{"type":25,"tag":34,"props":72,"children":73},{},[74],{"type":43,"value":75},"Shopware implementierte SemVer als \"SemVer with benefits\".",{"type":25,"tag":68,"props":77,"children":78},{},[79,84,104],{"type":25,"tag":34,"props":80,"children":81},{},[82],{"type":43,"value":83},"Eine SemVer-konforme Version hat drei Zahlen: Major, Minor und Patch. Diese werden nach folgendem Regelsatz erhöht:",{"type":25,"tag":85,"props":86,"children":87},"ul",{},[88,94,99],{"type":25,"tag":89,"props":90,"children":91},"li",{},[92],{"type":43,"value":93},"MAJOR: Inkompatible API-Änderungen werden vorgenommen",{"type":25,"tag":89,"props":95,"children":96},{},[97],{"type":43,"value":98},"MINOR: Funktionalität wird auf rückwärtskompatible Weise hinzugefügt",{"type":25,"tag":89,"props":100,"children":101},{},[102],{"type":43,"value":103},"PATCH: Rückwärtskompatible Fehlerbehebungen werden vorgenommen",{"type":25,"tag":34,"props":105,"children":106},{},[107],{"type":43,"value":108},"Der \"with benefits\"-Teil ist: Wir behalten die große Marketing-Nummer. Also ist Shopware 6 immer noch das Produkt, aber es gibt eine Shopware 6.3.0.0. Wobei 3.0.0 der SemVer-Teil ist.",{"type":25,"tag":48,"props":110,"children":112},{"id":111},"renovate-konfiguration",[113],{"type":43,"value":114},"Renovate-Konfiguration",{"type":25,"tag":34,"props":116,"children":117},{},[118,120,127,129,135,137,143],{"type":43,"value":119},"Die ",{"type":25,"tag":121,"props":122,"children":124},"code",{"className":123},[],[125],{"type":43,"value":126},"\"große Marketing-Nummer\"",{"type":43,"value":128}," oder ",{"type":25,"tag":121,"props":130,"children":132},{"className":131},[],[133],{"type":43,"value":134},"\"Generation\"",{"type":43,"value":136}," wird in Renovate als ",{"type":25,"tag":121,"props":138,"children":140},{"className":139},[],[141],{"type":43,"value":142},"compatibility",{"type":43,"value":144}," dargestellt.",{"type":25,"tag":34,"props":146,"children":147},{},[148],{"type":43,"value":149},"Die folgende Konfiguration wird:",{"type":25,"tag":151,"props":152,"children":153},"ol",{},[154,159,171,176],{"type":25,"tag":89,"props":155,"children":156},{},[157],{"type":43,"value":158},"Alle shopware-spezifischen Updates gruppieren",{"type":25,"tag":89,"props":160,"children":161},{},[162,164,169],{"type":43,"value":163},"Die Updates als ",{"type":25,"tag":121,"props":165,"children":167},{"className":166},[],[168],{"type":43,"value":19},{"type":43,"value":170}," gruppieren",{"type":25,"tag":89,"props":172,"children":173},{},[174],{"type":43,"value":175},"Renovate mitteilen, wie die Version extrahiert werden soll",{"type":25,"tag":89,"props":177,"children":178},{},[179],{"type":43,"value":180},"Renovate mitteilen, wo Changelog-Informationen zu finden sind",{"type":25,"tag":182,"props":183,"children":188},"pre",{"className":184,"code":185,"filename":186,"language":187,"meta":7,"style":7},"language-json shiki shiki-themes github-dark github-dark monokai","{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"packageRules\": [\n    {\n      \"description\": \"Follow Shopware version schema\",\n      \"matchDatasources\": [\n        \"packagist\"\n      ],\n      \"matchPackageNames\": [\n        \"shopware/core\",\n        \"shopware/administration\",\n        \"shopware/elasticsearch\",\n        \"shopware/storefront\"\n      ],\n      \"groupName\": \"shopware\",\n      \"versioning\": \"regex:(?\u003Ccompatibility>\\\\d+)\\\\.(?\u003Cmajor>\\\\d+)(\\\\.(?\u003Cminor>\\\\d+))?(\\\\.(?\u003Cpatch>\\\\d+))?$\",\n      \"sourceUrl\": \"https://github.com/shopware/shopware\"\n    }\n  ]\n}\n","renovate.json","json",[189],{"type":25,"tag":121,"props":190,"children":191},{"__ignoreMap":7},[192,204,230,244,253,275,288,297,306,319,332,345,358,367,375,397,484,502,511,520],{"type":25,"tag":193,"props":194,"children":197},"span",{"class":195,"line":196},"line",1,[198],{"type":25,"tag":193,"props":199,"children":201},{"style":200},"--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2",[202],{"type":43,"value":203},"{\n",{"type":25,"tag":193,"props":205,"children":207},{"class":195,"line":206},2,[208,214,219,225],{"type":25,"tag":193,"props":209,"children":211},{"style":210},"--shiki-default:#79B8FF;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic",[212],{"type":43,"value":213},"  \"$schema\"",{"type":25,"tag":193,"props":215,"children":216},{"style":200},[217],{"type":43,"value":218},": ",{"type":25,"tag":193,"props":220,"children":222},{"style":221},"--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF;--shiki-sepia:#CFCFC2",[223],{"type":43,"value":224},"\"https://docs.renovatebot.com/renovate-schema.json\"",{"type":25,"tag":193,"props":226,"children":227},{"style":200},[228],{"type":43,"value":229},",\n",{"type":25,"tag":193,"props":231,"children":233},{"class":195,"line":232},3,[234,239],{"type":25,"tag":193,"props":235,"children":236},{"style":210},[237],{"type":43,"value":238},"  \"packageRules\"",{"type":25,"tag":193,"props":240,"children":241},{"style":200},[242],{"type":43,"value":243},": [\n",{"type":25,"tag":193,"props":245,"children":247},{"class":195,"line":246},4,[248],{"type":25,"tag":193,"props":249,"children":250},{"style":200},[251],{"type":43,"value":252},"    {\n",{"type":25,"tag":193,"props":254,"children":256},{"class":195,"line":255},5,[257,262,266,271],{"type":25,"tag":193,"props":258,"children":259},{"style":210},[260],{"type":43,"value":261},"      \"description\"",{"type":25,"tag":193,"props":263,"children":264},{"style":200},[265],{"type":43,"value":218},{"type":25,"tag":193,"props":267,"children":268},{"style":221},[269],{"type":43,"value":270},"\"Follow Shopware version schema\"",{"type":25,"tag":193,"props":272,"children":273},{"style":200},[274],{"type":43,"value":229},{"type":25,"tag":193,"props":276,"children":278},{"class":195,"line":277},6,[279,284],{"type":25,"tag":193,"props":280,"children":281},{"style":210},[282],{"type":43,"value":283},"      \"matchDatasources\"",{"type":25,"tag":193,"props":285,"children":286},{"style":200},[287],{"type":43,"value":243},{"type":25,"tag":193,"props":289,"children":291},{"class":195,"line":290},7,[292],{"type":25,"tag":193,"props":293,"children":294},{"style":221},[295],{"type":43,"value":296},"        \"packagist\"\n",{"type":25,"tag":193,"props":298,"children":300},{"class":195,"line":299},8,[301],{"type":25,"tag":193,"props":302,"children":303},{"style":200},[304],{"type":43,"value":305},"      ],\n",{"type":25,"tag":193,"props":307,"children":309},{"class":195,"line":308},9,[310,315],{"type":25,"tag":193,"props":311,"children":312},{"style":210},[313],{"type":43,"value":314},"      \"matchPackageNames\"",{"type":25,"tag":193,"props":316,"children":317},{"style":200},[318],{"type":43,"value":243},{"type":25,"tag":193,"props":320,"children":322},{"class":195,"line":321},10,[323,328],{"type":25,"tag":193,"props":324,"children":325},{"style":221},[326],{"type":43,"value":327},"        \"shopware/core\"",{"type":25,"tag":193,"props":329,"children":330},{"style":200},[331],{"type":43,"value":229},{"type":25,"tag":193,"props":333,"children":335},{"class":195,"line":334},11,[336,341],{"type":25,"tag":193,"props":337,"children":338},{"style":221},[339],{"type":43,"value":340},"        \"shopware/administration\"",{"type":25,"tag":193,"props":342,"children":343},{"style":200},[344],{"type":43,"value":229},{"type":25,"tag":193,"props":346,"children":348},{"class":195,"line":347},12,[349,354],{"type":25,"tag":193,"props":350,"children":351},{"style":221},[352],{"type":43,"value":353},"        \"shopware/elasticsearch\"",{"type":25,"tag":193,"props":355,"children":356},{"style":200},[357],{"type":43,"value":229},{"type":25,"tag":193,"props":359,"children":361},{"class":195,"line":360},13,[362],{"type":25,"tag":193,"props":363,"children":364},{"style":221},[365],{"type":43,"value":366},"        \"shopware/storefront\"\n",{"type":25,"tag":193,"props":368,"children":370},{"class":195,"line":369},14,[371],{"type":25,"tag":193,"props":372,"children":373},{"style":200},[374],{"type":43,"value":305},{"type":25,"tag":193,"props":376,"children":378},{"class":195,"line":377},15,[379,384,388,393],{"type":25,"tag":193,"props":380,"children":381},{"style":210},[382],{"type":43,"value":383},"      \"groupName\"",{"type":25,"tag":193,"props":385,"children":386},{"style":200},[387],{"type":43,"value":218},{"type":25,"tag":193,"props":389,"children":390},{"style":221},[391],{"type":43,"value":392},"\"shopware\"",{"type":25,"tag":193,"props":394,"children":395},{"style":200},[396],{"type":43,"value":229},{"type":25,"tag":193,"props":398,"children":400},{"class":195,"line":399},16,[401,406,410,415,421,426,430,435,439,444,448,453,457,462,466,471,475,480],{"type":25,"tag":193,"props":402,"children":403},{"style":210},[404],{"type":43,"value":405},"      \"versioning\"",{"type":25,"tag":193,"props":407,"children":408},{"style":200},[409],{"type":43,"value":218},{"type":25,"tag":193,"props":411,"children":412},{"style":221},[413],{"type":43,"value":414},"\"regex:(?\u003Ccompatibility>",{"type":25,"tag":193,"props":416,"children":418},{"style":417},"--shiki-default:#79B8FF;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF",[419],{"type":43,"value":420},"\\\\",{"type":25,"tag":193,"props":422,"children":423},{"style":221},[424],{"type":43,"value":425},"d+)",{"type":25,"tag":193,"props":427,"children":428},{"style":417},[429],{"type":43,"value":420},{"type":25,"tag":193,"props":431,"children":432},{"style":221},[433],{"type":43,"value":434},".(?\u003Cmajor>",{"type":25,"tag":193,"props":436,"children":437},{"style":417},[438],{"type":43,"value":420},{"type":25,"tag":193,"props":440,"children":441},{"style":221},[442],{"type":43,"value":443},"d+)(",{"type":25,"tag":193,"props":445,"children":446},{"style":417},[447],{"type":43,"value":420},{"type":25,"tag":193,"props":449,"children":450},{"style":221},[451],{"type":43,"value":452},".(?\u003Cminor>",{"type":25,"tag":193,"props":454,"children":455},{"style":417},[456],{"type":43,"value":420},{"type":25,"tag":193,"props":458,"children":459},{"style":221},[460],{"type":43,"value":461},"d+))?(",{"type":25,"tag":193,"props":463,"children":464},{"style":417},[465],{"type":43,"value":420},{"type":25,"tag":193,"props":467,"children":468},{"style":221},[469],{"type":43,"value":470},".(?\u003Cpatch>",{"type":25,"tag":193,"props":472,"children":473},{"style":417},[474],{"type":43,"value":420},{"type":25,"tag":193,"props":476,"children":477},{"style":221},[478],{"type":43,"value":479},"d+))?$\"",{"type":25,"tag":193,"props":481,"children":482},{"style":200},[483],{"type":43,"value":229},{"type":25,"tag":193,"props":485,"children":487},{"class":195,"line":486},17,[488,493,497],{"type":25,"tag":193,"props":489,"children":490},{"style":210},[491],{"type":43,"value":492},"      \"sourceUrl\"",{"type":25,"tag":193,"props":494,"children":495},{"style":200},[496],{"type":43,"value":218},{"type":25,"tag":193,"props":498,"children":499},{"style":221},[500],{"type":43,"value":501},"\"https://github.com/shopware/shopware\"\n",{"type":25,"tag":193,"props":503,"children":505},{"class":195,"line":504},18,[506],{"type":25,"tag":193,"props":507,"children":508},{"style":200},[509],{"type":43,"value":510},"    }\n",{"type":25,"tag":193,"props":512,"children":514},{"class":195,"line":513},19,[515],{"type":25,"tag":193,"props":516,"children":517},{"style":200},[518],{"type":43,"value":519},"  ]\n",{"type":25,"tag":193,"props":521,"children":523},{"class":195,"line":522},20,[524],{"type":25,"tag":193,"props":525,"children":526},{"style":200},[527],{"type":43,"value":528},"}\n",{"type":25,"tag":34,"props":530,"children":531},{},[532],{"type":43,"value":533},"Dies sollte zur Erstellung folgender Merge-/Pull-Requests führen:",{"type":25,"tag":85,"props":535,"children":536},{},[537,572],{"type":25,"tag":89,"props":538,"children":539},{},[540,542,548,550,556,557,563,564,570],{"type":43,"value":541},"fix(deps): update shopware (",{"type":25,"tag":121,"props":543,"children":545},{"className":544},[],[546],{"type":43,"value":547},"shopware/administration",{"type":43,"value":549},", ",{"type":25,"tag":121,"props":551,"children":553},{"className":552},[],[554],{"type":43,"value":555},"shopware/core",{"type":43,"value":549},{"type":25,"tag":121,"props":558,"children":560},{"className":559},[],[561],{"type":43,"value":562},"shopware/elasticsearch",{"type":43,"value":549},{"type":25,"tag":121,"props":565,"children":567},{"className":566},[],[568],{"type":43,"value":569},"shopware/storefront",{"type":43,"value":571},")",{"type":25,"tag":89,"props":573,"children":574},{},[575,577,582,583,588,589,594,595,600],{"type":43,"value":576},"fix(deps): update shopware to v7 (major) (",{"type":25,"tag":121,"props":578,"children":580},{"className":579},[],[581],{"type":43,"value":547},{"type":43,"value":549},{"type":25,"tag":121,"props":584,"children":586},{"className":585},[],[587],{"type":43,"value":555},{"type":43,"value":549},{"type":25,"tag":121,"props":590,"children":592},{"className":591},[],[593],{"type":43,"value":562},{"type":43,"value":549},{"type":25,"tag":121,"props":596,"children":598},{"className":597},[],[599],{"type":43,"value":569},{"type":43,"value":571},{"type":25,"tag":602,"props":603,"children":604},"style",{},[605],{"type":43,"value":606},"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 .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":7,"searchDepth":206,"depth":206,"links":608},[609,610],{"id":50,"depth":206,"text":53},{"id":111,"depth":206,"text":114},"markdown","common:blog:16.shopware-renovate-bot.md","common","blog/16.shopware-renovate-bot.md","blog/16.shopware-renovate-bot","md",{"_path":618,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":619,"description":620,"author":621,"image":622,"releaseDate":623,"blogCategories":624,"articleTags":625,"tags":627,"_type":611,"_id":629,"_source":613,"_file":630,"_stem":631,"_extension":616},"/blog/accessibility-legal-statement-template","Erklärung zur Barrierefreiheit (EzB) – Wie Sie das BFSG umsetzen und eine mögliche Abmahnung vermeiden","Barrierefreiheitserklärung nach BFSG: Vorlage und Anleitung zur Erklärung zur Barrierefreiheit. Schützen Sie sich vor Abmahnungen mit unserer Vorlage für eine individuelle Barrierefreiheitsstärkung. Die Bestimmungen des Barrierefreiheitsstärkungsgesetzes müssen umgesetzt werden. Sie können sich vor Prüfverfahren durch die Behörde zusätzlich schützen, indem Sie eine ausführliche Erklärung zur Barrierefreiheit abgeben.","jens-bornschein","/images/Accessibility.png","2025-09-05",[14],[626],"Accessibility",[628],"frontend","common:blog:15.accessibility-legal-statement-template.md","blog/15.accessibility-legal-statement-template.md","blog/15.accessibility-legal-statement-template",{"_path":633,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":634,"description":635,"author":10,"image":11,"releaseDate":636,"blogCategories":637,"articleTags":639,"tags":640,"_type":611,"_id":641,"_source":613,"_file":642,"_stem":643,"_extension":616},"/blog/gitops-docker-renovate","Softwareverwaltung mit GitLab, Renovate Bot und Docker","Software auf einem Server zu verwalten ist nicht einfach. Oder doch?","2025-10-30",[638,15],"Was uns bewegt",[15,17],[20],"common:blog:17.gitops-docker-renovate.md","blog/17.gitops-docker-renovate.md","blog/17.gitops-docker-renovate",{"_path":4},{"_path":646},"/en/blog/shopware-renovate-bot",{"_path":648,"_dir":649,"_draft":6,"_partial":6,"_locale":7,"slug":10,"teams":650,"primaryTeam":652,"firstName":653,"lastName":654,"prefixTitle":7,"suffixTitle":655,"education":656,"role":661,"workingSince":666,"inTheCompanySince":667,"techSkills":668,"skills":707,"projects":725,"contactDetails":735,"_image":739,"image":740,"_id":741,"_type":187,"title":742,"_source":649,"_file":743,"_stem":744,"_extension":187},"/employees/robert-juzak","employees",[651,652],"appDev","devOps","Robert","Juzak","B.Sc.",[657],[658,659,660],"Bachelor of Computer Science","Technische Universität Breslau","2016",[662,663,664,665],"softwareDeveloper","fullstackDeveloper","admin","consultant","2015","2018",[669,673,675,678,681,684,686,689,692,696,699,701,704],{"name":670,"level":671,"icon":672},"Docker","expert","/images/Docker.svg",{"name":674,"level":671},"GitLab",{"name":676,"level":671,"icon":677},"Kubernetes","/images/Kubernetes.svg",{"name":679,"level":671,"icon":680},"PHPUnit","/images/PHP-Unit.svg",{"name":682,"level":671,"icon":683},"Portainer","/images/Portainer.svg",{"name":685,"level":671},"Sentry",{"name":687,"level":671,"icon":688},"Sonarqube","/images/Sonarqube.svg",{"name":690,"level":671,"icon":691},"Linux","/images/linux_os-mono.svg",{"name":693,"level":694,"icon":695},"CSS","advanced","/images/css.svg",{"name":697,"level":694,"icon":698},"HTML","/images/html.svg",{"name":700,"level":694},"PHP",{"name":702,"level":694,"icon":703},"SQL","/images/SQL.svg",{"name":705,"level":694,"icon":706},"VueJS","/images/vuejs.svg",[708,710,712,713,715,717,719,721,723],{"name":709,"level":671},"CI/CD",{"name":711,"level":671},"qualityAssurance",{"name":652,"level":671},{"name":714,"level":671},"testDrivenBugfix",{"name":716,"level":671},"testDrivenDevelopment",{"name":718,"level":694},"accessibility",{"name":720,"level":694},"databases",{"name":722,"level":694},"linuxServerAdministration",{"name":724,"level":694},"softwareArchitect",[726,731,733],{"project":727,"position":728},"Herole",[729,730],"Dev-Ops","Frontend Developer",{"project":732,"position":730},"Huawei-Calibration-aaS",{"project":734,"position":730},"Huawei-Inspect-3D",{"eMail":736,"phone":737,"visibility":738},"robert.juzak@helmundwalter.de","+49 351 799 035 26","1","images/employees/Portraits/robert_juzak.webp","images/employees/Portraits/RobertJuzak_MS.webp","employees:employees:6.robert-juzak.json","Robert Juzak","employees/6.robert-juzak.json","employees/6.robert-juzak",{"_path":618,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":619,"description":620,"author":621,"image":622,"releaseDate":623,"blogCategories":746,"articleTags":747,"tags":748,"body":749,"_type":611,"_id":629,"_source":613,"_file":630,"_stem":631,"_extension":616},[14],[626],[628],{"type":22,"children":750,"toc":2244},[751,757,763,785,793,850,864,868,872,878,916,932,960,970,985,991,1042,1058,1138,1150,1159,1385,1397,1406,1519,1555,1577,1692,1703,1742,1773,1779,1798,1803,1882,1888,2104,2110,2126,2149,2164,2170,2180,2185,2192,2233,2239],{"type":25,"tag":26,"props":752,"children":756},{"alt":753,"aspect-ratio":754,"height":29,"object-fit":30,"src":755},"Fiktiver Entwurf eines Abmahnungsschreibens der Marktüberwachungsstelle mit der Beschreibung \"Nichteinhaltung von Vorgaben zur Barrierefreiheit.\"","1.7","/blog/Abmahnung-Barrierefreiheitsstaerkungsgesetz.png",[],{"type":25,"tag":48,"props":758,"children":760},{"id":759},"barrierefreiheit-wird-pflicht-was-das-barrierefreiheitsstärkungsgesetz-ab-2025-für-digitale-services-bedeutet",[761],{"type":43,"value":762},"Barrierefreiheit wird Pflicht: Was das Barrierefreiheitsstärkungsgesetz ab 2025 für digitale Services bedeutet",{"type":25,"tag":34,"props":764,"children":765},{},[766,772,774,783],{"type":25,"tag":767,"props":768,"children":769},"strong",{},[770],{"type":43,"value":771},"Barrierefreiheit ist seit Mitte 2025 für viele digitale Produkte und Dienstleistungen Pflicht.",{"type":43,"value":773},"\nDas haben wir bereits in unserem Artikel „Accessibility wird zur Empfehlung – und zur Pflicht“ erklärt.\nWichtig neben der technischen Umsetzung ist, dass eine\n",{"type":25,"tag":38,"props":775,"children":777},{"href":776},"https://helmundwalter.de/blog/accessibility-will-be-recommended?utm_source=chatgpt.com",[778],{"type":25,"tag":767,"props":779,"children":780},{},[781],{"type":43,"value":782},"Erklärung zur Barrierefreiheit (EzB)",{"type":43,"value":784},"\ngesetzlich vorgeschrieben ist und dass bei falscher Formulierung Abmahnungen oder regulatorischer Druck drohen.",{"type":25,"tag":34,"props":786,"children":787},{},[788],{"type":25,"tag":767,"props":789,"children":790},{},[791],{"type":43,"value":792},"Inhalt dieses Blogposts:",{"type":25,"tag":85,"props":794,"children":795},{},[796,808,813,823,835,845],{"type":25,"tag":89,"props":797,"children":798},{},[799,801,806],{"type":43,"value":800},"Warum eine ",{"type":25,"tag":767,"props":802,"children":803},{},[804],{"type":43,"value":805},"Erklärung zur Barrierefreiheit laut BFSG",{"type":43,"value":807}," gesetzlich vorgeschrieben ist",{"type":25,"tag":89,"props":809,"children":810},{},[811],{"type":43,"value":812},"Was diese Erklärung beinhalten muss",{"type":25,"tag":89,"props":814,"children":815},{},[816,821],{"type":25,"tag":767,"props":817,"children":818},{},[819],{"type":43,"value":820},"Ein Vorschlag für eine mögliche Barrierefreiheitserklärung",{"type":43,"value":822}," / EzB",{"type":25,"tag":89,"props":824,"children":825},{},[826,828,833],{"type":43,"value":827},"Kurze Erklärung, an welchen Stellen Sie die Erklärung ",{"type":25,"tag":767,"props":829,"children":830},{},[831],{"type":43,"value":832},"individuell und wahrheitsgemäß auf Ihre Dienstleistung zuschneiden",{"type":43,"value":834}," sollten",{"type":25,"tag":89,"props":836,"children":837},{},[838,843],{"type":25,"tag":767,"props":839,"children":840},{},[841],{"type":43,"value":842},"Unsere Erfahrung mit juristischer Beratung",{"type":43,"value":844}," zur Formulierung",{"type":25,"tag":89,"props":846,"children":847},{},[848],{"type":43,"value":849},"Was bei Nichteinhaltung drohen kann",{"type":25,"tag":193,"props":851,"children":854},{"className":852},[853],"text-right",[855],{"type":25,"tag":34,"props":856,"children":857},{},[858],{"type":25,"tag":859,"props":860,"children":861},"em",{},[862],{"type":43,"value":863},"Lesedauer: ca. 15 Minuten",{"type":25,"tag":865,"props":866,"children":867},"br",{},[],{"type":25,"tag":869,"props":870,"children":871},"hr",{},[],{"type":25,"tag":48,"props":873,"children":875},{"id":874},"worum-geht-es-beim-bfsg-und-der-barrierefreiheitserklärung-ezb",[876],{"type":43,"value":877},"Worum geht es beim BFSG und der Barrierefreiheitserklärung / EzB?",{"type":25,"tag":34,"props":879,"children":880},{},[881,883,889,891,900,902,907,909,914],{"type":43,"value":882},"Das ",{"type":25,"tag":38,"props":884,"children":886},{"href":885},"https://bfsg-gesetz.de",[887],{"type":43,"value":888},"Barrierefreiheitsstärkungsgesetz (BFSG)",{"type":43,"value":890}," verpflichtet digitale Angebote wie Online-Shops, Banking-Apps oder Buchungsportale, seit dem 28. Juni 2025 barrierefrei zugänglich zu sein.\nDas folgt dem EU-weiten ",{"type":25,"tag":38,"props":892,"children":894},{"href":893},"https://commission.europa.eu/strategy-and-policy/policies/justice-and-fundamental-rights/disability/union-equality-strategy-rights-persons-disabilities-2021-2030/european-accessibility-act_en",[895],{"type":25,"tag":767,"props":896,"children":897},{},[898],{"type":43,"value":899},"European Accessibility Act (EAA)",{"type":43,"value":901}," und der ",{"type":25,"tag":767,"props":903,"children":904},{},[905],{"type":43,"value":906},"Norm EN 301 549",{"type":43,"value":908},", die meist die ",{"type":25,"tag":767,"props":910,"children":911},{},[912],{"type":43,"value":913},"WCAG 2.1 AA",{"type":43,"value":915}," als technisches Ziel definiert. Ausgenommen sind Kleinstunternehmen mit unter 10 Mitarbeitenden und weniger als\n2 Mio. € Jahresumsatz.",{"type":25,"tag":34,"props":917,"children":918},{},[919,921,930],{"type":43,"value":920},"Gemäß ",{"type":25,"tag":38,"props":922,"children":924},{"href":923},"https://bfsg-gesetz.de/anlage-3/",[925],{"type":25,"tag":767,"props":926,"children":927},{},[928],{"type":43,"value":929},"§ 14 BFSG und Anlage 3",{"type":43,"value":931}," müssen Anbieter eine Barrierefreiheitserklärung veröffentlichen, die folgende Punkte enthält:",{"type":25,"tag":85,"props":933,"children":934},{},[935,940,945,950,955],{"type":25,"tag":89,"props":936,"children":937},{},[938],{"type":43,"value":939},"Allgemeine Beschreibung der digitalen Dienstleistung",{"type":25,"tag":89,"props":941,"children":942},{},[943],{"type":43,"value":944},"Erfüllungsstatus der Barrierefreiheitsanforderungen (z.B. WCAG, EN 301 549)",{"type":25,"tag":89,"props":946,"children":947},{},[948],{"type":43,"value":949},"Kontaktmöglichkeiten des Dienstleisters für Rückmeldungen bei Barrieren",{"type":25,"tag":89,"props":951,"children":952},{},[953],{"type":43,"value":954},"Marktüberwachungsbehörde als zuständige Kontrollstelle",{"type":25,"tag":89,"props":956,"children":957},{},[958],{"type":43,"value":959},"Optionale Angaben: Datum der letzten Prüfung, Prüfmethodik, Feedbackmechanismus",{"type":25,"tag":34,"props":961,"children":962},{},[963,968],{"type":25,"tag":767,"props":964,"children":965},{},[966],{"type":43,"value":967},"Es gibt keine offizielle Vorlage für die Barrierefreiheitserklärung.",{"type":43,"value":969},"\nNach unserem derzeitigen Wissensstand ist diese auch nicht geplant.",{"type":25,"tag":34,"props":971,"children":972},{},[973],{"type":25,"tag":767,"props":974,"children":975},{},[976,978,983],{"type":43,"value":977},"Deshalb gehen wir im Folgenden darauf ein, wie eine solche\n",{"type":25,"tag":859,"props":979,"children":980},{},[981],{"type":43,"value":982},"Erklärung zur Barrierefreiheit",{"type":43,"value":984}," aussehen kann.",{"type":25,"tag":48,"props":986,"children":988},{"id":987},"unsere-vorlage-für-ihre-ezb",[989],{"type":43,"value":990},"Unsere Vorlage für Ihre EzB",{"type":25,"tag":992,"props":993,"children":997},"div",{"className":994},[995,996],"doc-sheet","doc-sheet__border-top",[998],{"type":25,"tag":992,"props":999,"children":1002},{"className":1000},[1001],"doc-sheet__section",[1003,1010,1036],{"type":25,"tag":1004,"props":1005,"children":1007},"h1",{"id":1006},"informationen-zur-barrierefreiheit",[1008],{"type":43,"value":1009},"Informationen zur Barrierefreiheit",{"type":25,"tag":34,"props":1011,"children":1012},{},[1013,1015,1020,1022,1027,1029,1034],{"type":43,"value":1014},"Wir verpflichten uns zur Umsetzung der Anforderungen des ",{"type":25,"tag":767,"props":1016,"children":1017},{},[1018],{"type":43,"value":1019},"Barrierefreiheitsstärkungsgesetzes (BFSG)",{"type":43,"value":1021}," sowie der zugrunde liegenden ",{"type":25,"tag":767,"props":1023,"children":1024},{},[1025],{"type":43,"value":1026},"EU-Richtlinie (EU) 2019/882 über die Barrierefreiheitsanforderungen für Produkte und Dienstleistungen",{"type":43,"value":1028},". Unser Ziel ist es, unsere digitalen Angebote – insbesondere Webanwendungen und Online-Dienste – so zu gestalten, dass sie für alle Menschen ",{"type":25,"tag":767,"props":1030,"children":1031},{},[1032],{"type":43,"value":1033},"barrierefrei zugänglich",{"type":43,"value":1035}," sind, unabhängig von individuellen Fähigkeiten oder technischen Hilfsmitteln.",{"type":25,"tag":48,"props":1037,"children":1039},{"id":1038},"beschreibung-der-dienstleistung",[1040],{"type":43,"value":1041},"Beschreibung der Dienstleistung",{"type":25,"tag":992,"props":1043,"children":1052},{"className":1044},[1045,1046,1047,1048,1049,1050,1051],"mt-8","mb-5","pl-0","pr-0","pt-5","pb-5","pa-sm-5",[1053],{"type":25,"tag":34,"props":1054,"children":1055},{},[1056],{"type":43,"value":1057},"Diesen Teil müssen Sie individuell an Ihre digitale Dienstleistung anpassen.\nWir haben an dieser Stelle ein Beispiel für einen klassischen Online-Shop angegeben.",{"type":25,"tag":992,"props":1059,"children":1062},{"className":1060},[995,1061],"doc-sheet__border-sides",[1063],{"type":25,"tag":992,"props":1064,"children":1066},{"className":1065},[1001],[1067,1079,1119],{"type":25,"tag":34,"props":1068,"children":1069},{},[1070,1072,1077],{"type":43,"value":1071},"Unser Online-Shop ermöglicht es,\n",{"type":25,"tag":767,"props":1073,"children":1074},{},[1075],{"type":43,"value":1076},"Informationen zu Produkten zu beziehen, Produkte digital auszuwählen und zu kaufen",{"type":43,"value":1078},".\nDie Waren werden jeweils auf einer eigenen Produktseite mit Beschreibung, Preis und\neventuell verfügbaren Varianten wie Größe oder Farbe angeboten.",{"type":25,"tag":34,"props":1080,"children":1081},{},[1082,1084,1089,1091,1096,1098,1103,1105,1110,1112,1117],{"type":43,"value":1083},"Die gewünschten Produkte können in einen ",{"type":25,"tag":767,"props":1085,"children":1086},{},[1087],{"type":43,"value":1088},"virtuellen Warenkorb",{"type":43,"value":1090}," gelegt werden.\nNach Auswahl aller Artikel führt der Bestellprozess über den ",{"type":25,"tag":767,"props":1092,"children":1093},{},[1094],{"type":43,"value":1095},"Checkout-Bereich",{"type":43,"value":1097},",\nin dem eine ",{"type":25,"tag":767,"props":1099,"children":1100},{},[1101],{"type":43,"value":1102},"Lieferadresse",{"type":43,"value":1104}," und eine eventuell abweichende ",{"type":25,"tag":767,"props":1106,"children":1107},{},[1108],{"type":43,"value":1109},"Rechnungsadresse",{"type":43,"value":1111},"\neingegeben, sowie eine ",{"type":25,"tag":767,"props":1113,"children":1114},{},[1115],{"type":43,"value":1116},"Zahlungsart",{"type":43,"value":1118}," ausgewählt werden muss.",{"type":25,"tag":34,"props":1120,"children":1121},{},[1122,1124,1129,1131,1136],{"type":43,"value":1123},"Nach erfolgreicher Bestellung werden\n",{"type":25,"tag":767,"props":1125,"children":1126},{},[1127],{"type":43,"value":1128},"Eingangsbestätigung und Versandbestätigungen per E-Mail",{"type":43,"value":1130}," an die bei der Bestellung\nangegebene E-Mail-Adresse versendet.\nEs ist möglich, dass eine ",{"type":25,"tag":767,"props":1132,"children":1133},{},[1134],{"type":43,"value":1135},"Weiterleitung zu Drittdiensten",{"type":43,"value":1137}," für die Abwicklung von\nBezahlvorgängen erfolgt. Wir haben nur bedingt Einfluss auf die Gestaltung und\ntechnische Ausführung dieser Dienste.",{"type":25,"tag":193,"props":1139,"children":1141},{"className":1140},[853],[1142],{"type":25,"tag":34,"props":1143,"children":1144},{},[1145],{"type":25,"tag":859,"props":1146,"children":1147},{},[1148],{"type":43,"value":1149},"Anpassen an die individuelle Dienstleistung",{"type":25,"tag":992,"props":1151,"children":1153},{"className":1152},[1045,1046,1047,1048,1049,1050,1051],[1154],{"type":25,"tag":34,"props":1155,"children":1156},{},[1157],{"type":43,"value":1158},"Den folgenden Teil müssen Sie nicht unbedingt angeben.\nEr stellt aber Ihre bisherigen Bemühungen und Maßnahmen, sowie Ihr Engagement im\nBereich Barrierefreiheit klar und bietet eine Anlaufstelle jenseits der\nMarktüberwachungsbehörde.",{"type":25,"tag":992,"props":1160,"children":1162},{"className":1161},[995,1061],[1163],{"type":25,"tag":992,"props":1164,"children":1166},{"className":1165},[1001],[1167,1173,1185,1197,1236,1248,1255,1293,1299,1311,1319,1359],{"type":25,"tag":48,"props":1168,"children":1170},{"id":1169},"stand-der-barrierefreiheit",[1171],{"type":43,"value":1172},"Stand der Barrierefreiheit",{"type":25,"tag":34,"props":1174,"children":1175},{},[1176,1178,1183],{"type":43,"value":1177},"Unsere Website und digitalen Dienste werden fortlaufend an geltende\n",{"type":25,"tag":767,"props":1179,"children":1180},{},[1181],{"type":43,"value":1182},"Barrierefreiheitsstandards (z.B. WCAG 2.1 AA und EN 301 549)",{"type":43,"value":1184}," angepasst.\nWir verfolgen aktiv das Ziel, bestehende Barrieren zu erkennen, zu reduzieren und\nlangfristig vollständig zu beseitigen.",{"type":25,"tag":34,"props":1186,"children":1187},{},[1188,1190,1195],{"type":43,"value":1189},"Trotz aller Sorgfalt kann es in Einzelfällen zu ",{"type":25,"tag":767,"props":1191,"children":1192},{},[1193],{"type":43,"value":1194},"temporären oder partiellen Barrieren",{"type":43,"value":1196}," kommen.\nDies kann insbesondere auftreten:",{"type":25,"tag":85,"props":1198,"children":1199},{},[1200,1212,1224],{"type":25,"tag":89,"props":1201,"children":1202},{},[1203,1205,1210],{"type":43,"value":1204},"durch laufende ",{"type":25,"tag":767,"props":1206,"children":1207},{},[1208],{"type":43,"value":1209},"redaktionelle oder technische Überarbeitungen",{"type":43,"value":1211}," einzelner Inhalte und Seiten,",{"type":25,"tag":89,"props":1213,"children":1214},{},[1215,1217,1222],{"type":43,"value":1216},"aufgrund von ",{"type":25,"tag":767,"props":1218,"children":1219},{},[1220],{"type":43,"value":1221},"unterschiedlichen Interpretationen",{"type":43,"value":1223}," der technischen Anforderungen an Barrierefreiheit,",{"type":25,"tag":89,"props":1225,"children":1226},{},[1227,1229,1234],{"type":43,"value":1228},"oder bei ",{"type":25,"tag":767,"props":1230,"children":1231},{},[1232],{"type":43,"value":1233},"komplexen Funktionalitäten",{"type":43,"value":1235},", für die bisher noch keine vollständig barrierefreie Lösung verfügbar ist.",{"type":25,"tag":34,"props":1237,"children":1238},{},[1239,1241,1246],{"type":43,"value":1240},"Wir arbeiten kontinuierlich daran, auch solche Abweichungen zu identifizieren und\nLösungen zu entwickeln, um allen Nutzenden einen möglichst\n",{"type":25,"tag":767,"props":1242,"children":1243},{},[1244],{"type":43,"value":1245},"niederschwelligen und gleichwertigen Zugang",{"type":43,"value":1247}," zu ermöglichen.",{"type":25,"tag":1249,"props":1250,"children":1252},"h3",{"id":1251},"letzte-überprüfung",[1253],{"type":43,"value":1254},"Letzte Überprüfung",{"type":25,"tag":34,"props":1256,"children":1257},{},[1258,1260,1265,1267,1272,1274,1279,1281,1285,1286,1291],{"type":43,"value":1259},"Die letzte exemplarische Prüfung der Barrierefreiheit erfolgte am ",{"type":25,"tag":859,"props":1261,"children":1262},{},[1263],{"type":43,"value":1264},"[Datum der letzten Überprüfung]",{"type":43,"value":1266},"\ndurch ",{"type":25,"tag":859,"props":1268,"children":1269},{},[1270],{"type":43,"value":1271},"[Firma eintragen – eine ext. Firma ist hier besser]",{"type":43,"value":1273},".\nDabei wurde eine ",{"type":25,"tag":767,"props":1275,"children":1276},{},[1277],{"type":43,"value":1278},"Auswahl repräsentativer Seiten und Funktionen",{"type":43,"value":1280}," auf Konformität\nmit den Anforderungen der ",{"type":25,"tag":767,"props":1282,"children":1283},{},[1284],{"type":43,"value":913},{"type":43,"value":901},{"type":25,"tag":767,"props":1287,"children":1288},{},[1289],{"type":43,"value":1290},"EN 301 549",{"type":43,"value":1292}," untersucht.\nNicht alle Inhalte oder Seiten wurden dabei individuell getestet.\nDie Auswahl erfolgte auf Basis der Nutzungshäufigkeit und zentralen Funktionalitäten\nunseres Online-Angebots.",{"type":25,"tag":48,"props":1294,"children":1296},{"id":1295},"rückmeldung-und-kontakt",[1297],{"type":43,"value":1298},"Rückmeldung und Kontakt",{"type":25,"tag":34,"props":1300,"children":1301},{},[1302,1304,1309],{"type":43,"value":1303},"Sollten Ihnen beim Besuch unserer digitalen Angebote ",{"type":25,"tag":767,"props":1305,"children":1306},{},[1307],{"type":43,"value":1308},"Barrieren auffallen",{"type":43,"value":1310},",\nbitten wir Sie, uns zu informieren.\nJeder Hinweis hilft uns, bestehende Schwachstellen besser zu verstehen und gezielt\nzu verbessern.",{"type":25,"tag":34,"props":1312,"children":1313},{},[1314],{"type":25,"tag":767,"props":1315,"children":1316},{},[1317],{"type":43,"value":1318},"Kontakt für Hinweise zur Barrierefreiheit:",{"type":25,"tag":34,"props":1320,"children":1321},{},[1322,1327,1330,1335,1338,1343,1346,1351,1354],{"type":25,"tag":859,"props":1323,"children":1324},{},[1325],{"type":43,"value":1326},"[Name oder Abteilung]",{"type":25,"tag":865,"props":1328,"children":1329},{},[],{"type":25,"tag":859,"props":1331,"children":1332},{},[1333],{"type":43,"value":1334},"[Unternehmen]",{"type":25,"tag":865,"props":1336,"children":1337},{},[],{"type":25,"tag":859,"props":1339,"children":1340},{},[1341],{"type":43,"value":1342},"[Adresse, optional]",{"type":25,"tag":865,"props":1344,"children":1345},{},[],{"type":25,"tag":859,"props":1347,"children":1348},{},[1349],{"type":43,"value":1350},"[E-Mail-Adresse]",{"type":25,"tag":865,"props":1352,"children":1353},{},[],{"type":25,"tag":859,"props":1355,"children":1356},{},[1357],{"type":43,"value":1358},"[Telefonnummer, optional]",{"type":25,"tag":34,"props":1360,"children":1361},{},[1362,1364,1369,1371,1376,1378,1383],{"type":43,"value":1363},"Wir sichern zu, dass wir eingehende Rückmeldungen schnellstmöglich\n",{"type":25,"tag":767,"props":1365,"children":1366},{},[1367],{"type":43,"value":1368},"redaktionell und technisch prüfen",{"type":43,"value":1370}," und, sofern möglich, in angemessener Frist ",{"type":25,"tag":767,"props":1372,"children":1373},{},[1374],{"type":43,"value":1375},"beheben",{"type":43,"value":1377},".\nSollte eine kurzfristige technische Lösung nicht möglich sein, suchen wir gemeinsam\nmit Ihnen nach ",{"type":25,"tag":767,"props":1379,"children":1380},{},[1381],{"type":43,"value":1382},"alternativen Zugangswegen oder unterstützenden Maßnahmen",{"type":43,"value":1384},",\num Ihnen die Nutzung dennoch zu ermöglichen.",{"type":25,"tag":193,"props":1386,"children":1388},{"className":1387},[853],[1389],{"type":25,"tag":34,"props":1390,"children":1391},{},[1392],{"type":25,"tag":859,"props":1393,"children":1394},{},[1395],{"type":43,"value":1396},"optional",{"type":25,"tag":992,"props":1398,"children":1400},{"className":1399},[1045,1046,1047,1048,1049,1050,1051],[1401],{"type":25,"tag":34,"props":1402,"children":1403},{},[1404],{"type":43,"value":1405},"Der folgende Teil ist wieder wichtig, da hier die Marktüberwachungsbehörde benannt werden\nmuss und man auf die aktuell geltenden AGBs verweisen sollte, die mögliche Lücken in der\nBeschreibung der Dienstleistung oder des Produktes schließen.",{"type":25,"tag":992,"props":1407,"children":1409},{"className":1408},[995,1061],[1410],{"type":25,"tag":992,"props":1411,"children":1413},{"className":1412},[1001],[1414,1420,1437,1456,1461,1472,1478,1483],{"type":25,"tag":48,"props":1415,"children":1417},{"id":1416},"weiterführende-hinweise",[1418],{"type":43,"value":1419},"Weiterführende Hinweise",{"type":25,"tag":34,"props":1421,"children":1422},{},[1423,1425,1430,1432],{"type":43,"value":1424},"Es ist zu beachten, dass die Nutzung unserer digitalen Dienste und aller dazugehörigen\nFunktionen zusätzlich unseren ",{"type":25,"tag":767,"props":1426,"children":1427},{},[1428],{"type":43,"value":1429},"Allgemeinen Geschäftsbedingungen (AGB)",{"type":43,"value":1431}," unterliegt.\nDiese AGB regeln unter anderem den Vertragsschluss, die Zahlungsabwicklung und die\nLieferung. Im Falle von Widersprüchen oder Abweichungen gelten die AGB in ihrer\njeweils aktuellen Fassung, soweit diese nicht die Anforderungen an Barrierefreiheit\neinschränken oder aufheben.\nEine barrierefreie Version hier unserer AGBs gibt es hier: ",{"type":25,"tag":859,"props":1433,"children":1434},{},[1435],{"type":43,"value":1436},"[Link zu den AGB]",{"type":25,"tag":34,"props":1438,"children":1439},{},[1440,1442,1447,1449,1454],{"type":43,"value":1441},"Wir verstehen Barrierefreiheit nicht als einmalige Maßnahme, sondern als\n",{"type":25,"tag":767,"props":1443,"children":1444},{},[1445],{"type":43,"value":1446},"laufenden Prozess",{"type":43,"value":1448},". Daher werden unsere Inhalte und Systeme regelmäßig überprüft\nund überarbeitet. Dabei kann es in einzelnen Fällen vorübergehend zu\n",{"type":25,"tag":767,"props":1450,"children":1451},{},[1452],{"type":43,"value":1453},"Einschränkungen in der Zugänglichkeit",{"type":43,"value":1455}," kommen. Wir bitten hierfür um Ihr Verständnis.",{"type":25,"tag":34,"props":1457,"children":1458},{},[1459],{"type":43,"value":1460},"Für weiterführende Informationen zum Barrierefreiheitsstärkungsgesetz verweisen wir auf\ndie zuständige nationale Durchsetzungsstelle:",{"type":25,"tag":34,"props":1462,"children":1463},{},[1464,1470],{"type":25,"tag":38,"props":1465,"children":1467},{"href":1466},"https://www.bundesfachstelle-barrierefreiheit.de",[1468],{"type":43,"value":1469},"Bundesfachstelle Barrierefreiheit",{"type":43,"value":1471}," (Träger: Knappschaft-Bahn-See)",{"type":25,"tag":1249,"props":1473,"children":1475},{"id":1474},"zuständige-marktüberwachungsbehörde",[1476],{"type":43,"value":1477},"Zuständige Marktüberwachungsbehörde",{"type":25,"tag":34,"props":1479,"children":1480},{},[1481],{"type":43,"value":1482},"Marktüberwachungsstelle der Länder für die Barrierefreiheit von Produkten und\nDienstleistungen (MLBF) in Magdeburg, Sachsen-Anhalt.",{"type":25,"tag":34,"props":1484,"children":1485},{},[1486,1491,1494,1496,1499,1501,1504,1506,1509,1512,1514,1517],{"type":25,"tag":767,"props":1487,"children":1488},{},[1489],{"type":43,"value":1490},"MLBF (in Errichtung)",{"type":25,"tag":865,"props":1492,"children":1493},{},[],{"type":43,"value":1495},"\nc/o Ministerium für Arbeit, Soziales, Gesundheit und Gleichstellung Sachsen-Anhalt",{"type":25,"tag":865,"props":1497,"children":1498},{},[],{"type":43,"value":1500},"\nPostfach 39 11 55",{"type":25,"tag":865,"props":1502,"children":1503},{},[],{"type":43,"value":1505},"\n39135 Magdeburg",{"type":25,"tag":865,"props":1507,"children":1508},{},[],{"type":25,"tag":865,"props":1510,"children":1511},{},[],{"type":43,"value":1513},"\nTelefon: 0391 567 6970",{"type":25,"tag":865,"props":1515,"children":1516},{},[],{"type":43,"value":1518},"\nE-Mail: MLBF(at)ms.sachsen-anhalt.de.",{"type":25,"tag":992,"props":1520,"children":1525},{"className":1521},[1522,1523,1524],"hint","hint--warning","mt-5",[1526],{"type":25,"tag":34,"props":1527,"children":1528},{},[1529,1534,1537,1539,1546,1548,1553],{"type":25,"tag":767,"props":1530,"children":1531},{},[1532],{"type":43,"value":1533},"Hinweis:",{"type":25,"tag":865,"props":1535,"children":1536},{},[],{"type":43,"value":1538},"\nNach ",{"type":25,"tag":859,"props":1540,"children":1541},{},[1542],{"type":25,"tag":38,"props":1543,"children":1544},{"href":923},[1545],{"type":43,"value":923},{"type":43,"value":1547}," §1 c müsste\n“",{"type":25,"tag":859,"props":1549,"children":1550},{},[1551],{"type":43,"value":1552},"eine Beschreibung, wie die Dienstleistung die einschlägigen in der nach §3 Absatz 2\nzu erlassenden Rechtsverordnung aufgeführten Barrierefreiheitsanforderungen erfüllt;",{"type":43,"value":1554},"”\neingebracht werden – also eine genaue Beschreibung, wie die Dienstleistung barrierefrei\ngestaltet wurde.",{"type":25,"tag":992,"props":1556,"children":1560},{"className":1557},[1558,1046,1047,1048,1049,1050,1051,1559],"mt-0","pt-0",[1561,1567,1572],{"type":25,"tag":1249,"props":1562,"children":1564},{"id":1563},"beispiel-für-eine-beschreibung-der-konkreten-maßnahmen",[1565],{"type":43,"value":1566},"Beispiel für eine Beschreibung der konkreten Maßnahmen",{"type":25,"tag":34,"props":1568,"children":1569},{},[1570],{"type":43,"value":1571},"Im Folgenden ein Beispiel für konkrete Maßnahmen, wie wir sie als Agentur für unsere Kunden\nstandardmäßig in Projekten vorsehen und umsetzen.",{"type":25,"tag":34,"props":1573,"children":1574},{},[1575],{"type":43,"value":1576},"Diese Maßnahmen müssten wahrheitsgemäß und individuell an Ihre Maßnahmen angepasst werden.",{"type":25,"tag":992,"props":1578,"children":1581},{"className":1579},[995,1580],"doc-sheet__border-bottom",[1582],{"type":25,"tag":992,"props":1583,"children":1585},{"className":1584},[1001],[1586,1592,1597,1603,1608,1614,1619,1625,1630,1636,1641,1647,1652,1658,1663,1669,1687],{"type":25,"tag":48,"props":1587,"children":1589},{"id":1588},"konkrete-umsetzung-der-barrierefreiheitsanforderungen",[1590],{"type":43,"value":1591},"Konkrete Umsetzung der Barrierefreiheitsanforderungen",{"type":25,"tag":34,"props":1593,"children":1594},{},[1595],{"type":43,"value":1596},"Zur Erfüllung der gesetzlichen Barrierefreiheitsanforderungen wurden folgende technische\nund gestalterische Maßnahmen implementiert:",{"type":25,"tag":1249,"props":1598,"children":1600},{"id":1599},"technische-strukturierung-und-semantik",[1601],{"type":43,"value":1602},"Technische Strukturierung und Semantik",{"type":25,"tag":34,"props":1604,"children":1605},{},[1606],{"type":43,"value":1607},"Die HTML-Strukturen unserer Website entsprechen dem semantischen Zweck der jeweiligen\nInhalte und Interaktionselemente. Ergänzend wurden ARIA-Markups eingesetzt, um komplexe\nFunktionalitäten und deren Status für assistive Technologien zugänglich zu machen.",{"type":25,"tag":1249,"props":1609,"children":1611},{"id":1610},"inhaltsgestaltung-und-redaktionelle-maßnahmen",[1612],{"type":43,"value":1613},"Inhaltsgestaltung und redaktionelle Maßnahmen",{"type":25,"tag":34,"props":1615,"children":1616},{},[1617],{"type":43,"value":1618},"Redaktionell verantwortliche Personen wurden zur korrekten Verwendung von Textstrukturen\nund hierarchischen Überschriftenebenen geschult. Bei der Erstellung von Inhalten wird\nauf eine klare, verständliche Sprache geachtet. Komplexe Sachverhalte werden strukturiert\ndargestellt und durch Zwischenüberschriften gegliedert. Link-Texte sind aussagekräftig\nformuliert und beschreiben das Ziel der Verlinkung eindeutig. Listen und andere\nstrukturierende HTML-Elemente werden gezielt eingesetzt, um die Inhaltsstruktur zu\nverdeutlichen. Tabellen werden mit entsprechenden Überschriften und Beschreibungen\nversehen, um deren Inhalt und Aufbau verständlich zu machen.",{"type":25,"tag":1249,"props":1620,"children":1622},{"id":1621},"visuelle-gestaltung-und-responsive-design",[1623],{"type":43,"value":1624},"Visuelle Gestaltung und Responsive Design",{"type":25,"tag":34,"props":1626,"children":1627},{},[1628],{"type":43,"value":1629},"Bei der Farbgestaltung wurde auf eine kontrastreiche Darstellung entsprechend dem\nWCAG-Level AA geachtet. Informationen werden nicht ausschließlich über visuelle\nEigenschaften wie Farbe, Form oder Position vermittelt, sondern durch zusätzliche\ntextliche oder strukturelle Hinweise ergänzt. Die Website ist responsiv gestaltet\nund auf verschiedenen Ausgabegeräten nutzbar. Die Textgröße kann mittels Browserzoom\nauf mindestens 200 % ohne Funktionsverlust angepasst werden. Navigation und\nBedienelemente sind konsistent gestaltet und an vergleichbaren Stellen positioniert.",{"type":25,"tag":1249,"props":1631,"children":1633},{"id":1632},"textalternativen-medien-und-zeitgesteuerte-inhalte",[1634],{"type":43,"value":1635},"Textalternativen, Medien und zeitgesteuerte Inhalte",{"type":25,"tag":34,"props":1637,"children":1638},{},[1639],{"type":43,"value":1640},"Für alle Bilder und Grafiken wurden Vorkehrungen getroffen, damit Nutzende beim\nErstellen von Inhalten aussagekräftige Alternativtexte hinterlegen oder reine\nSchmuckgrafiken durch leere Alternativtexte kennzeichnen können.\nVideo-Inhalte, soweit sie unserer Kontrolle unterliegen, sind mit Untertiteln versehen.\nZeitgesteuerte Anzeigen oder automatische Hinweise wurden vermieden.\nFalls solche Elemente aus funktionalen Gründen erforderlich sind, können diese von\nNutzenden pausiert und gesteuert werden.\nInhalte, die Aufmerksamkeit erfordern könnten, blinken oder flackern nicht.",{"type":25,"tag":1249,"props":1642,"children":1644},{"id":1643},"navigation-und-bedienung",[1645],{"type":43,"value":1646},"Navigation und Bedienung",{"type":25,"tag":34,"props":1648,"children":1649},{},[1650],{"type":43,"value":1651},"Die Website ist vollständig per Tastatur bedienbar. Der Tastaturfokus ist stets klar\nsichtbar und folgt einer logischen Reihenfolge entsprechend dem Seitenaufbau.\nEin unnötiges Versetzen des Fokus innerhalb einer Seite sowie ein unbeabsichtigtes\nZurücksetzen beim Neuladen von Seiten werden vermieden, um Kontext- und\nOrientierungsverluste zu verhindern.",{"type":25,"tag":1249,"props":1653,"children":1655},{"id":1654},"formulare-und-eingaben",[1656],{"type":43,"value":1657},"Formulare und Eingaben",{"type":25,"tag":34,"props":1659,"children":1660},{},[1661],{"type":43,"value":1662},"In allen Formularen sind eindeutige Label-Zuordnungen zu den entsprechenden Formular-\nund Bedienelementen hinterlegt.\nFehler- und Statusmeldungen werden klar verständlich und zugänglich dargestellt,\num die Bedienung und das Verständnis von Eingaben zu erleichtern.",{"type":25,"tag":1249,"props":1664,"children":1666},{"id":1665},"zusätzliche-maßnahmen",[1667],{"type":43,"value":1668},"Zusätzliche Maßnahmen",{"type":25,"tag":85,"props":1670,"children":1671},{},[1672,1677,1682],{"type":25,"tag":89,"props":1673,"children":1674},{},[1675],{"type":43,"value":1676},"Automatische Seitenumleitungen ohne Nutzerinteraktion wurden vermieden.",{"type":25,"tag":89,"props":1678,"children":1679},{},[1680],{"type":43,"value":1681},"Klick- und Touch-Ziele haben eine ausreichende Mindestgröße für eine einfache Bedienung.",{"type":25,"tag":89,"props":1683,"children":1684},{},[1685],{"type":43,"value":1686},"Bei linearer Navigation durch assistive Technologien folgen die Inhalte einer sinnvollen und verständlichen Reihenfolge.",{"type":25,"tag":34,"props":1688,"children":1689},{},[1690],{"type":43,"value":1691},"Diese Maßnahmen gewährleisten ein hohes Maß an Kompatibilität mit gängigen assistiven\nTechnologien und ermöglichen eine gleichwertige Nutzung unserer digitalen Dienste für\nMenschen mit unterschiedlichen Fähigkeiten.",{"type":25,"tag":193,"props":1693,"children":1695},{"className":1694},[853],[1696],{"type":25,"tag":34,"props":1697,"children":1698},{},[1699],{"type":25,"tag":859,"props":1700,"children":1701},{},[1702],{"type":43,"value":1149},{"type":25,"tag":992,"props":1704,"children":1707},{"className":1705},[1522,1706],"hint--info",[1708,1714,1725],{"type":25,"tag":48,"props":1709,"children":1711},{"id":1710},"mögliche-kurzversion",[1712],{"type":43,"value":1713},"Mögliche Kurzversion:",{"type":25,"tag":34,"props":1715,"children":1716},{},[1717,1719,1723],{"type":43,"value":1718},"Wir gestalten unsere digitalen Angebote gemäß dem\n",{"type":25,"tag":767,"props":1720,"children":1721},{},[1722],{"type":43,"value":888},{"type":43,"value":1724}," und den geltenden Standards\n(z.B. WCAG 2.1 AA) barrierefrei und bauen diese Zugänglichkeit laufend weiter aus.",{"type":25,"tag":34,"props":1726,"children":1727},{},[1728,1730,1735,1737],{"type":43,"value":1729},"Trotz aller Sorgfalt kann es vereinzelt zu\n",{"type":25,"tag":767,"props":1731,"children":1732},{},[1733],{"type":43,"value":1734},"temporären oder technischen Einschränkungen",{"type":43,"value":1736}," kommen.\nHinweise zu Barrieren nehmen wir gerne entgegen und bemühen uns um schnelle\nLösungen. ",{"type":25,"tag":859,"props":1738,"children":1739},{},[1740],{"type":43,"value":1741},"[Hier geht’s zu den vollständigen Informationen zur Barrierefreiheit](LINK)",{"type":25,"tag":992,"props":1743,"children":1745},{"className":1744},[1522,1523],[1746,1758],{"type":25,"tag":34,"props":1747,"children":1748},{},[1749,1753,1756],{"type":25,"tag":767,"props":1750,"children":1751},{},[1752],{"type":43,"value":1533},{"type":25,"tag":865,"props":1754,"children":1755},{},[],{"type":43,"value":1757},"\nDie EzB/IBE nicht in die AGB einbringen, da dies evtl. Einfluss auf andere\n“Rechtsgeschäfte” haben könnte.\nStattdessen einen individuellen Link „Barrierefreiheit“ im Footer platzieren,\nder auf die „Informationen zur Barrierefreiheit“ verweist als eigenständige Seite.",{"type":25,"tag":68,"props":1759,"children":1760},{},[1761],{"type":25,"tag":34,"props":1762,"children":1763},{},[1764,1766,1771],{"type":43,"value":1765},"“",{"type":25,"tag":859,"props":1767,"children":1768},{},[1769],{"type":43,"value":1770},"Der Dienstleistungserbringer gibt zu seiner Dienstleistung im Sinne des\n§ 1 Absatz 3 in seinen Allgemeinen Geschäftsbedingungen oder auf andere\ndeutlich wahrnehmbare Weise an, wie sie die Barrierefreiheitsanforderungen der\nnach § 3 Absatz 2 zu erlassenden Rechtsverordnung erfüllt.",{"type":43,"value":1772},"”",{"type":25,"tag":48,"props":1774,"children":1776},{"id":1775},"welche-erfahrungen-haben-wir-mit-juristischer-beratung-zu-diesem-thema-gemacht",[1777],{"type":43,"value":1778},"Welche Erfahrungen haben wir mit juristischer Beratung zu diesem Thema gemacht",{"type":25,"tag":34,"props":1780,"children":1781},{},[1782,1784,1789,1791,1796],{"type":43,"value":1783},"Es gilt zu beachten, dass es auch unter den juristischen Beratern, mit denen wir im Laufe\nder Zeit zu diesem Thema Kontakt hatten, einen gewissen Diskurs zur Umsetzung der im\nGesetz beschriebenen Maßnahmen gegeben hat. Dabei ist in erster Line die Unterscheidung\nzwischen einer ",{"type":25,"tag":859,"props":1785,"children":1786},{},[1787],{"type":43,"value":1788},"engen",{"type":43,"value":1790}," und ",{"type":25,"tag":859,"props":1792,"children":1793},{},[1794],{"type":43,"value":1795},"weiten",{"type":43,"value":1797}," Auslegung der Barrierefreiheitsanforderungen\nAusgangspunkt für den eingeforderten Detailgrad und Tiefe der beschriebenen Maßnahmen.",{"type":25,"tag":34,"props":1799,"children":1800},{},[1801],{"type":43,"value":1802},"Viele Kanzleien, die sich mit digitaler Barrierefreiheit befassen, empfehlen aber:",{"type":25,"tag":85,"props":1804,"children":1805},{},[1806,1825,1837,1860,1872],{"type":25,"tag":89,"props":1807,"children":1808},{},[1809,1811,1816,1818,1823],{"type":43,"value":1810},"die EzB ",{"type":25,"tag":767,"props":1812,"children":1813},{},[1814],{"type":43,"value":1815},"nicht in die AGB zu integrieren",{"type":43,"value":1817},", sondern als ",{"type":25,"tag":767,"props":1819,"children":1820},{},[1821],{"type":43,"value":1822},"eigenständige, gut auffindbare Seite zu führen",{"type":43,"value":1824}," – etwa unter /barrierefreiheit und diese dann im Footer der Webseite zu verlinken.",{"type":25,"tag":89,"props":1826,"children":1827},{},[1828,1830,1835],{"type":43,"value":1829},"In der ",{"type":25,"tag":767,"props":1831,"children":1832},{},[1833],{"type":43,"value":1834},"EzB muss ausdrücklich auf die AGBs verwiesen werden",{"type":43,"value":1836}," (z.B. um Erklärungslücken in der Geschäftstätigkeit etc. zu schließen)",{"type":25,"tag":89,"props":1838,"children":1839},{},[1840,1845,1847,1852,1853,1858],{"type":25,"tag":767,"props":1841,"children":1842},{},[1843],{"type":43,"value":1844},"Keine rechtlich verbindlichen Zusicherungen",{"type":43,"value":1846}," (",{"type":25,"tag":859,"props":1848,"children":1849},{},[1850],{"type":43,"value":1851},"„vollständige Barrierefreiheit“",{"type":43,"value":549},{"type":25,"tag":859,"props":1854,"children":1855},{},[1856],{"type":43,"value":1857},"„garantierte Konformität“",{"type":43,"value":1859},") abzugeben, wenn diese nicht zu 100 % erfüllt sind",{"type":25,"tag":89,"props":1861,"children":1862},{},[1863,1865,1870],{"type":43,"value":1864},"Einen ",{"type":25,"tag":767,"props":1866,"children":1867},{},[1868],{"type":43,"value":1869},"Ansprechperson für Rückmeldungen benennen",{"type":43,"value":1871}," – am besten mit E-Mail-Adresse und optional Telefonnummer",{"type":25,"tag":89,"props":1873,"children":1874},{},[1875,1880],{"type":25,"tag":767,"props":1876,"children":1877},{},[1878],{"type":43,"value":1879},"Im Speziellen:",{"type":43,"value":1881}," Um nicht in das Schussfeld von Abmahnwellen zu geraten, sollte der entsprechende Gesetzestext fast 1:1 aufgegriffen werden. Das senkt das Risiko einer bei einer (Semi-)Automatischen Prüfung in den Fokus für ein Versäumnis in der Erklärung zu geraten (BFSG Anlage 3 kopieren oder zitieren)",{"type":25,"tag":1249,"props":1883,"children":1885},{"id":1884},"eine-mögliche-zusätzliche-formulierung-zur-verbesserten-abwehr-vor-abmahnungen",[1886],{"type":43,"value":1887},"Eine mögliche zusätzliche Formulierung zur verbesserten Abwehr vor Abmahnungen",{"type":25,"tag":992,"props":1889,"children":1892},{"className":1890},[995,1891],"doc-sheet__border-all",[1893],{"type":25,"tag":992,"props":1894,"children":1896},{"className":1895},[1001],[1897,1903,1908,1951,1957,1962,2000,2038,2044,2049,2055,2060,2093],{"type":25,"tag":48,"props":1898,"children":1900},{"id":1899},"konzeption-der-dienstleistung-für-einen-barrierefreien-zugang",[1901],{"type":43,"value":1902},"Konzeption der Dienstleistung für einen barrierefreien Zugang",{"type":25,"tag":34,"props":1904,"children":1905},{},[1906],{"type":43,"value":1907},"Unsere digitale Dienstleistung wurde so konzipiert, dass sie Menschen mit\nverschiedenen Einschränkungen eine gleichwertige Nutzung ermöglicht.\nDabei setzen wir auf folgende Prinzipien:",{"type":25,"tag":85,"props":1909,"children":1910},{},[1911,1916,1921,1926,1931,1936,1941,1946],{"type":25,"tag":89,"props":1912,"children":1913},{},[1914],{"type":43,"value":1915},"Kontraststarke Gestaltung der Benutzeroberfläche",{"type":25,"tag":89,"props":1917,"children":1918},{},[1919],{"type":43,"value":1920},"Bereitstellung von Informationen auf mehreren Wahrnehmungsebenen (textbasiert, auditiv, visuell)",{"type":25,"tag":89,"props":1922,"children":1923},{},[1924],{"type":43,"value":1925},"Alternative Inhalte für visuelle oder auditive Medien",{"type":25,"tag":89,"props":1927,"children":1928},{},[1929],{"type":43,"value":1930},"Bedienung sämtlicher Funktionen mittels Tastatur",{"type":25,"tag":89,"props":1932,"children":1933},{},[1934],{"type":43,"value":1935},"Unterstützung für Screenreader und vergleichbare assistive Technologien",{"type":25,"tag":89,"props":1937,"children":1938},{},[1939],{"type":43,"value":1940},"Vermeidung zeitkritischer Interaktionen ohne barrierefreie Alternativen",{"type":25,"tag":89,"props":1942,"children":1943},{},[1944],{"type":43,"value":1945},"Einsatz einfacher Sprache verständlicher Inhalte",{"type":25,"tag":89,"props":1947,"children":1948},{},[1949],{"type":43,"value":1950},"intuitive Navigation und logisch gegliederte Inhalte",{"type":25,"tag":1249,"props":1952,"children":1954},{"id":1953},"allgemeine-barrierefreie-informationsbereitstellung",[1955],{"type":43,"value":1956},"Allgemeine barrierefreie Informationsbereitstellung",{"type":25,"tag":34,"props":1958,"children":1959},{},[1960],{"type":43,"value":1961},"Die Informationen über unsere Dienstleistungen werden so an Nutzende vermittelt,\ndass sie:",{"type":25,"tag":85,"props":1963,"children":1964},{},[1965,1970,1975,1980,1985,1990,1995],{"type":25,"tag":89,"props":1966,"children":1967},{},[1968],{"type":43,"value":1969},"über mehrere Sinne des Nutzers (z.B. visuell und/oder auditiv) erfassbar sind,",{"type":25,"tag":89,"props":1971,"children":1972},{},[1973],{"type":43,"value":1974},"leicht auffindbar für Nutzer bereitgestellt werden,",{"type":25,"tag":89,"props":1976,"children":1977},{},[1978],{"type":43,"value":1979},"in verständlicher Art verfasst sind,",{"type":25,"tag":89,"props":1981,"children":1982},{},[1983],{"type":43,"value":1984},"in einem universellen Textformat (Schriftart, Größe, Kontraste, Abstände) vorliegen, um Konvertierungen in assistive Ausgabeformen zu ermöglichen,",{"type":25,"tag":89,"props":1986,"children":1987},{},[1988],{"type":43,"value":1989},"in gut lesbarer Schriftgröße, angemessener Typografie und mit ausreichendem Kontrast sowie Abstand gestaltet sind,",{"type":25,"tag":89,"props":1991,"children":1992},{},[1993],{"type":43,"value":1994},"bei nicht-textbasierten Inhalten alternative textuelle Beschreibungen bereitstellen,",{"type":25,"tag":89,"props":1996,"children":1997},{},[1998],{"type":43,"value":1999},"digital so konzipiert sind, dass sie konsistent, zugänglich, intuitiv und stabil funktionieren.",{"type":25,"tag":34,"props":2001,"children":2002},{},[2003,2005,2010,2011,2016,2017,2022,2023,2028,2030,2036],{"type":43,"value":2004},"Sowohl unsere Webangebote, digitale Dienstleistungen als auch mobile Applikationen\nfolgen diesen Prinzipien.\nDie Gestaltung richtet sich dabei durchgängig an den Grundsätzen der\n",{"type":25,"tag":767,"props":2006,"children":2007},{},[2008],{"type":43,"value":2009},"Wahrnehmbarkeit",{"type":43,"value":549},{"type":25,"tag":767,"props":2012,"children":2013},{},[2014],{"type":43,"value":2015},"Bedienbarkeit",{"type":43,"value":549},{"type":25,"tag":767,"props":2018,"children":2019},{},[2020],{"type":43,"value":2021},"Verständlichkeit",{"type":43,"value":1790},{"type":25,"tag":767,"props":2024,"children":2025},{},[2026],{"type":43,"value":2027},"Robustheit",{"type":43,"value":2029},"\n(nach ",{"type":25,"tag":38,"props":2031,"children":2033},{"href":2032},"https://www.barrierefreiheit-dienstekonsolidierung.bund.de/Webs/PB/DE/gesetze-und-richtlinien/wcag/wcag-artikel.html",[2034],{"type":43,"value":2035},"WCAG-Kriterien",{"type":43,"value":2037},") aus.",{"type":25,"tag":1249,"props":2039,"children":2041},{"id":2040},"zugänglichkeit-unterstützender-dienste",[2042],{"type":43,"value":2043},"Zugänglichkeit unterstützender Dienste",{"type":25,"tag":34,"props":2045,"children":2046},{},[2047],{"type":43,"value":2048},"Wenn zusätzliche Hilfsangebote wie Support-Hotlines, Schulungsangebote oder\ntechnische Beratung angeboten werden, stellen wir sicher, dass auch diese Dienste\nInformationen zur Barrierefreiheit und Kompatibilität auf barrierefreiem Weg\nzugänglich machen.",{"type":25,"tag":1249,"props":2050,"children":2052},{"id":2051},"funktionale-anforderungen-für-spezielle-einschränkungen",[2053],{"type":43,"value":2054},"Funktionale Anforderungen für spezielle Einschränkungen",{"type":25,"tag":34,"props":2056,"children":2057},{},[2058],{"type":43,"value":2059},"Unsere Dienstleistungen berücksichtigen folgende barrierefreie Interaktionsformen\nfür die Nutzenden:",{"type":25,"tag":85,"props":2061,"children":2062},{},[2063,2068,2073,2078,2083,2088],{"type":25,"tag":89,"props":2064,"children":2065},{},[2066],{"type":43,"value":2067},"Für visuelle Einschränkungen: mindestens eine Option ohne visuelle Elemente und eine, die unabhängig von Farbunterscheidung funktioniert.",{"type":25,"tag":89,"props":2069,"children":2070},{},[2071],{"type":43,"value":2072},"Für Personen mit Einschränkungen des Hörens: mindestens eine Nutzungsmöglichkeit ohne Ton und eine mit anpassbaren Audiofunktionen.",{"type":25,"tag":89,"props":2074,"children":2075},{},[2076],{"type":43,"value":2077},"Für stimmlich eingeschränkte Nutzer: mindestens eine Bedienvariante ohne sprachliche Eingabe.",{"type":25,"tag":89,"props":2079,"children":2080},{},[2081],{"type":43,"value":2082},"Für motorisch eingeschränkte Nutzer: mindestens eine Bedienform ohne komplexe Bewegungsabfolgen oder Muskelkraft, sowie eine Option bei eingeschränkter Reichweite.",{"type":25,"tag":89,"props":2084,"children":2085},{},[2086],{"type":43,"value":2087},"Für Menschen mit kognitiven Einschränkungen: bedienerfreundliche Strukturen, soweit möglich reduzierte Komplexität und unterstützende Hinweise.",{"type":25,"tag":89,"props":2089,"children":2090},{},[2091],{"type":43,"value":2092},"Für alle Barrierefreiheitsfunktionen gilt: Die Privatsphäre der Nutzenden wird gewahrt.",{"type":25,"tag":34,"props":2094,"children":2095},{},[2096,2098,2102],{"type":43,"value":2097},"Diese Maßnahmen orientieren sich an den Vorgaben des\n",{"type":25,"tag":767,"props":2099,"children":2100},{},[2101],{"type":43,"value":1019},{"type":43,"value":2103}," und wurden in unsere technischen und\ngestalterischen Prozesse integriert, um eine möglichst umfassende Zugänglichkeit\nsicherzustellen.",{"type":25,"tag":48,"props":2105,"children":2107},{"id":2106},"was-droht-ohne-ezb",[2108],{"type":43,"value":2109},"Was droht ohne EzB?",{"type":25,"tag":34,"props":2111,"children":2112},{},[2113,2115,2124],{"type":43,"value":2114},"Ohne gültige und überprüfbare Erklärung kann laut ",{"type":25,"tag":38,"props":2116,"children":2118},{"href":2117},"https://bfsg-gesetz.de/37-bfsg/",[2119],{"type":25,"tag":767,"props":2120,"children":2121},{},[2122],{"type":43,"value":2123},"§ 37 BFSG",{"type":43,"value":2125}," Folgendes passieren:",{"type":25,"tag":85,"props":2127,"children":2128},{},[2129,2134,2139,2144],{"type":25,"tag":89,"props":2130,"children":2131},{},[2132],{"type":43,"value":2133},"Betriebs- oder Vertriebsverbot (der entsprechenden Dienstleistungen oder Produkte)",{"type":25,"tag":89,"props":2135,"children":2136},{},[2137],{"type":43,"value":2138},"Bußgelder von bis zu 100.000 Euro (je nach Verstoß)",{"type":25,"tag":89,"props":2140,"children":2141},{},[2142],{"type":43,"value":2143},"Förmliche Beanstandung durch die Marktüberwachung",{"type":25,"tag":89,"props":2145,"children":2146},{},[2147],{"type":43,"value":2148},"Abmahnungen durch Wettbewerber oder Verbraucherorganisationen",{"type":25,"tag":34,"props":2150,"children":2151},{},[2152,2154,2162],{"type":43,"value":2153},"Dies ist insbesondere deshalb relevant,\n",{"type":25,"tag":767,"props":2155,"children":2156},{},[2157],{"type":25,"tag":859,"props":2158,"children":2159},{},[2160],{"type":43,"value":2161},"da jede Institution, Firma oder natürliche Person die Prüfstellen auf einen Verstoß\ngegen das BFSG hinweisen kann",{"type":43,"value":2163},". So ist anzunehmen,\ndass mindestens Ihre Konkurrenz ein starkes Augenmerk darauf legen wird!",{"type":25,"tag":48,"props":2165,"children":2167},{"id":2166},"fazit-klarheit-schützt-vor-abmahnung",[2168],{"type":43,"value":2169},"Fazit - Klarheit schützt vor Abmahnung",{"type":25,"tag":34,"props":2171,"children":2172},{},[2173,2174,2178],{"type":43,"value":119},{"type":25,"tag":767,"props":2175,"children":2176},{},[2177],{"type":43,"value":982},{"type":43,"value":2179}," ist nur ein kleiner Teil Ihrer digitalen Dienstleistung aber mit großer Wirkung.\nWer sie ernst nimmt und individuell auf die eigene Dienstleistung zuschneidet, zeigt nicht nur Gesetzestreue,\nsondern auch Respekt gegenüber allen Nutzenden. Zudem schützt sie vor rechtlichen Stolperfallen und wirtschaftlichen Schäden.",{"type":25,"tag":34,"props":2181,"children":2182},{},[2183],{"type":43,"value":2184},"Wenn Sie Unterstützung bei der Erstellung oder Formulierung brauchen, sprechen Sie uns gern an.\nWir helfen beim Erstellen barrierefreier Webanwendungen und zeigen, wie Sie die gesetzlichen Anforderungen sinnvoll\numsetzen können.",{"type":25,"tag":2186,"props":2187,"children":2189},"h4",{"id":2188},"rechtlicher-hinweis",[2190],{"type":43,"value":2191},"Rechtlicher Hinweis",{"type":25,"tag":34,"props":2193,"children":2194},{},[2195,2197,2205,2206,2211,2213,2218,2219,2224,2226,2231],{"type":43,"value":2196},"Dieser Blogpost ",{"type":25,"tag":767,"props":2198,"children":2199},{},[2200],{"type":25,"tag":859,"props":2201,"children":2202},{},[2203],{"type":43,"value":2204},"stellt keine Rechtsberatung dar",{"type":43,"value":1790},{"type":25,"tag":767,"props":2207,"children":2208},{},[2209],{"type":43,"value":2210},"ersetzt auch keine rechtliche Prüfung Ihrer Erklärung zur Barrierefreiheit",{"type":43,"value":2212},". Die enthaltenen Formulierungen und Hinweise wurden sorgfältig recherchiert, erheben jedoch ",{"type":25,"tag":767,"props":2214,"children":2215},{},[2216],{"type":43,"value":2217},"keinen Anspruch auf Vollständigkeit",{"type":43,"value":128},{"type":25,"tag":767,"props":2220,"children":2221},{},[2222],{"type":43,"value":2223},"rechtliche Verbindlichkeit",{"type":43,"value":2225},". Für die tatsächliche Umsetzung gemäß ",{"type":25,"tag":767,"props":2227,"children":2228},{},[2229],{"type":43,"value":2230},"BFSG",{"type":43,"value":2232}," und geltender Verordnungen ist eine juristische Prüfung im Einzelfall empfohlen.",{"type":25,"tag":2186,"props":2234,"children":2236},{"id":2235},"hinweis-zur-erstellung-dieses-beitrags",[2237],{"type":43,"value":2238},"Hinweis zur Erstellung dieses Beitrags",{"type":25,"tag":34,"props":2240,"children":2241},{},[2242],{"type":43,"value":2243},"Dieser Beitrag wurde auch mit Hilfe der KI OpenAI GPT-4 (2024-06, Modell: GPT-4o) erstellt. Grundlage waren redaktionelle Recherchen, persönliche Erfahrungen, rechtliche Quellen und eine firmeneigene Mustervorlage. Das abschließende Lektorat und die fachliche Freigabe erfolgten durch den Autor des Artikels und Zuständigen für Barrierefreiheit Dr.-Ing. Jens Bornschein.",{"title":7,"searchDepth":206,"depth":206,"links":2245},[2246,2247,2248,2251,2252,2255,2256],{"id":759,"depth":206,"text":762},{"id":874,"depth":206,"text":877},{"id":987,"depth":206,"text":990,"children":2249},[2250],{"id":1563,"depth":232,"text":1566},{"id":1710,"depth":206,"text":1713},{"id":1775,"depth":206,"text":1778,"children":2253},[2254],{"id":1884,"depth":232,"text":1887},{"id":2106,"depth":206,"text":2109},{"id":2166,"depth":206,"text":2169},{"_path":633,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":634,"description":635,"author":10,"image":11,"releaseDate":636,"blogCategories":2258,"articleTags":2259,"tags":2260,"body":2261,"_type":611,"_id":641,"_source":613,"_file":642,"_stem":643,"_extension":616},[638,15],[15,17],[20],{"type":22,"children":2262,"toc":3772},[2263,2268,2273,2278,2283,2288,2306,2311,2352,2358,2371,2384,2389,2395,2408,2421,2430,2436,2441,2558,3108,3144,3157,3160,3165,3337,3350,3356,3361,3428,3433,3439,3444,3457,3470,3504,3531,3543,3562,3575,3578,3583,3596,3616,3621,3626,3749,3768],{"type":25,"tag":34,"props":2264,"children":2265},{},[2266],{"type":43,"value":2267},"Die Verwaltung eines Servers mit mehreren Diensten kann knifflig sein. Nicht jede Software ist miteinander kompatibel. Beispielsweise gibt es Anforderungen an Datenbank- oder PHP-Versionen.",{"type":25,"tag":34,"props":2269,"children":2270},{},[2271],{"type":43,"value":2272},"Außerdem sollte die Software auf dem neuesten Stand sein, um mögliche Sicherheitsrisiken zu minimieren.",{"type":25,"tag":34,"props":2274,"children":2275},{},[2276],{"type":43,"value":2277},"Es gibt viele Möglichkeiten, damit umzugehen, wie etwa Ansible, Chef usw.",{"type":25,"tag":34,"props":2279,"children":2280},{},[2281],{"type":43,"value":2282},"Unser Ziel war eine einfach zu bedienende, automatisierte und kostenlose Lösung.",{"type":25,"tag":34,"props":2284,"children":2285},{},[2286],{"type":43,"value":2287},"Hier sind die Ziele:",{"type":25,"tag":85,"props":2289,"children":2290},{},[2291,2296,2301],{"type":25,"tag":89,"props":2292,"children":2293},{},[2294],{"type":43,"value":2295},"den GitOps-Ansatz nutzen, um die Konfiguration zu speichern und per Versionskontrolle nachvollziehbar zu machen",{"type":25,"tag":89,"props":2297,"children":2298},{},[2299],{"type":43,"value":2300},"Container verwenden, um die Software auszuführen",{"type":25,"tag":89,"props":2302,"children":2303},{},[2304],{"type":43,"value":2305},"Sicherheitsupdates automatisch ausspielen und Minor-/Major-Updates per Opt-in steuern",{"type":25,"tag":34,"props":2307,"children":2308},{},[2309],{"type":43,"value":2310},"Wir haben uns am Ende für den folgenden Stack entschieden:",{"type":25,"tag":85,"props":2312,"children":2313},{},[2314,2331,2341],{"type":25,"tag":89,"props":2315,"children":2316},{},[2317,2322,2323,2329],{"type":25,"tag":38,"props":2318,"children":2320},{"href":2319},"https://www.docker.com/",[2321],{"type":43,"value":670},{"type":43,"value":1790},{"type":25,"tag":38,"props":2324,"children":2326},{"href":2325},"https://docs.docker.com/compose/",[2327],{"type":43,"value":2328},"Docker Compose",{"type":43,"value":2330}," zum Verwalten der Software",{"type":25,"tag":89,"props":2332,"children":2333},{},[2334,2339],{"type":25,"tag":38,"props":2335,"children":2337},{"href":2336},"https://about.gitlab.com/",[2338],{"type":43,"value":674},{"type":43,"value":2340}," zum Speichern aller Compose-Dateien",{"type":25,"tag":89,"props":2342,"children":2343},{},[2344,2350],{"type":25,"tag":38,"props":2345,"children":2347},{"href":2346},"https://docs.renovatebot.com",[2348],{"type":43,"value":2349},"Renovate Bot",{"type":43,"value":2351},", um die Software aktuell zu halten",{"type":25,"tag":48,"props":2353,"children":2355},{"id":2354},"über-den-stack",[2356],{"type":43,"value":2357},"Über den Stack",{"type":25,"tag":34,"props":2359,"children":2360},{},[2361,2363,2369],{"type":43,"value":2362},"Wir verwenden Docker bereits seit einiger Zeit in der Produktion. Je nach Situation erstellen wir die Compose-Datei direkt auf dem Server, verwalten sie über Portainer oder übertragen sie per ",{"type":25,"tag":121,"props":2364,"children":2366},{"className":2365},[],[2367],{"type":43,"value":2368},"scp",{"type":43,"value":2370}," in eine Pipeline.",{"type":25,"tag":34,"props":2372,"children":2373},{},[2374,2376,2382],{"type":43,"value":2375},"GitLab ist unser primäres Tool für die Versionskontrolle. Zusätzlich kümmert sich ein ",{"type":25,"tag":38,"props":2377,"children":2379},{"href":2378},"https://docs.gitlab.com/runner/",[2380],{"type":43,"value":2381},"GitLab Runner",{"type":43,"value":2383}," um das Ausführen der Pipelines.",{"type":25,"tag":34,"props":2385,"children":2386},{},[2387],{"type":43,"value":2388},"Renovate automatisiert Abhängigkeitsupdates. PHP, Go, Python, Docker – um nur ein paar zu nennen. Wir nutzen es bereits in verschiedenen Projekten.",{"type":25,"tag":48,"props":2390,"children":2392},{"id":2391},"container-mit-docker-und-docker-compose",[2393],{"type":43,"value":2394},"Container mit Docker und Docker Compose",{"type":25,"tag":34,"props":2396,"children":2397},{},[2398,2400,2406],{"type":43,"value":2399},"Der Hauptgrund, warum wir Docker gewählt haben, ist die Möglichkeit, auf einen remoten Docker-Host zuzugreifen und Docker-Befehle ausführen zu können.\nWeitere Informationen findest du in der ",{"type":25,"tag":38,"props":2401,"children":2403},{"href":2402},"https://docs.docker.com/reference/cli/docker/#host",[2404],{"type":43,"value":2405},"offiziellen Dokumentation",{"type":43,"value":2407},".",{"type":25,"tag":34,"props":2409,"children":2410},{},[2411,2413,2419],{"type":43,"value":2412},"Wir verwenden ",{"type":25,"tag":121,"props":2414,"children":2416},{"className":2415},[],[2417],{"type":43,"value":2418},"ssh",{"type":43,"value":2420},", um auf unseren Zielserver zuzugreifen.",{"type":25,"tag":34,"props":2422,"children":2423},{},[2424],{"type":25,"tag":121,"props":2425,"children":2427},{"className":2426},[],[2428],{"type":43,"value":2429},"DOCKER_HOST=ssh://[username@]\u003CIP or host>[:port] docker compose up --wait",{"type":25,"tag":48,"props":2431,"children":2433},{"id":2432},"gitops-mit-gitlab",[2434],{"type":43,"value":2435},"GitOps mit GitLab",{"type":25,"tag":34,"props":2437,"children":2438},{},[2439],{"type":43,"value":2440},"Die Idee hinter GitOps ist, ein Git-Repository zur Ablage der Konfiguration zu verwenden. Hier ein Beispiel:",{"type":25,"tag":182,"props":2442,"children":2446},{"className":2443,"code":2444,"language":2445,"meta":7,"style":7},"language-shell shiki shiki-themes github-dark github-dark monokai",".\n├──.gitlab-ci.yml             # Pipeline-Definition\n├── renovate.json             # Renovate-Konfiguration\n├── nextcloud\n│   ├── docker-compose.yml   # Nextcloud Datei-Hosting und Zusammenarbeit\n└── traefik\n    └── docker-compose.yml   # Traefik Reverse-Proxy-Konfiguration\n\n","shell",[2447],{"type":25,"tag":121,"props":2448,"children":2449},{"__ignoreMap":7},[2450,2459,2474,2493,2505,2528,2541],{"type":25,"tag":193,"props":2451,"children":2452},{"class":195,"line":196},[2453],{"type":25,"tag":193,"props":2454,"children":2456},{"style":2455},"--shiki-default:#79B8FF;--shiki-dark:#79B8FF;--shiki-sepia:#66D9EF",[2457],{"type":43,"value":2458},".\n",{"type":25,"tag":193,"props":2460,"children":2461},{"class":195,"line":206},[2462,2468],{"type":25,"tag":193,"props":2463,"children":2465},{"style":2464},"--shiki-default:#B392F0;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E",[2466],{"type":43,"value":2467},"├──.gitlab-ci.yml",{"type":25,"tag":193,"props":2469,"children":2471},{"style":2470},"--shiki-default:#6A737D;--shiki-dark:#6A737D;--shiki-sepia:#88846F",[2472],{"type":43,"value":2473},"             # Pipeline-Definition\n",{"type":25,"tag":193,"props":2475,"children":2476},{"class":195,"line":232},[2477,2482,2488],{"type":25,"tag":193,"props":2478,"children":2479},{"style":2464},[2480],{"type":43,"value":2481},"├──",{"type":25,"tag":193,"props":2483,"children":2485},{"style":2484},"--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74",[2486],{"type":43,"value":2487}," renovate.json",{"type":25,"tag":193,"props":2489,"children":2490},{"style":2470},[2491],{"type":43,"value":2492},"             # Renovate-Konfiguration\n",{"type":25,"tag":193,"props":2494,"children":2495},{"class":195,"line":246},[2496,2500],{"type":25,"tag":193,"props":2497,"children":2498},{"style":2464},[2499],{"type":43,"value":2481},{"type":25,"tag":193,"props":2501,"children":2502},{"style":2484},[2503],{"type":43,"value":2504}," nextcloud\n",{"type":25,"tag":193,"props":2506,"children":2507},{"class":195,"line":255},[2508,2513,2518,2523],{"type":25,"tag":193,"props":2509,"children":2510},{"style":2464},[2511],{"type":43,"value":2512},"│",{"type":25,"tag":193,"props":2514,"children":2515},{"style":2484},[2516],{"type":43,"value":2517},"   ├──",{"type":25,"tag":193,"props":2519,"children":2520},{"style":2484},[2521],{"type":43,"value":2522}," docker-compose.yml",{"type":25,"tag":193,"props":2524,"children":2525},{"style":2470},[2526],{"type":43,"value":2527},"   # Nextcloud Datei-Hosting und Zusammenarbeit\n",{"type":25,"tag":193,"props":2529,"children":2530},{"class":195,"line":277},[2531,2536],{"type":25,"tag":193,"props":2532,"children":2533},{"style":2464},[2534],{"type":43,"value":2535},"└──",{"type":25,"tag":193,"props":2537,"children":2538},{"style":2484},[2539],{"type":43,"value":2540}," traefik\n",{"type":25,"tag":193,"props":2542,"children":2543},{"class":195,"line":290},[2544,2549,2553],{"type":25,"tag":193,"props":2545,"children":2546},{"style":2464},[2547],{"type":43,"value":2548},"    └──",{"type":25,"tag":193,"props":2550,"children":2551},{"style":2484},[2552],{"type":43,"value":2522},{"type":25,"tag":193,"props":2554,"children":2555},{"style":2470},[2556],{"type":43,"value":2557},"   # Traefik Reverse-Proxy-Konfiguration\n",{"type":25,"tag":182,"props":2559,"children":2564},{"className":2560,"code":2561,"filename":2562,"language":2563,"meta":7,"style":7},"language-yaml shiki shiki-themes github-dark github-dark monokai","volumes:\n  nextcloud:\n  db:\n\nservices:\n  db:\n    image: mariadb:11.8\n    restart: unless-stopped\n    volumes:\n      - db:/var/lib/mysql\n    environment:\n      - MARIADB_ROOT_PASSWORD=${NEXTCLOUD_MARIADB_ROOT_PASSWORD:?error}\n      - MARIADB_PASSWORD=${NEXTCLOUD_MARIADB_PASSWORD:?error}\n      - MARIADB_DATABASE=nextcloud\n      - MARIADB_USER=nextcloud\n    command:\n      - --transaction-isolation=READ-COMMITTED\n      - --log-bin=binlog\n      - --binlog-format=ROW\n    healthcheck:\n      test: [\"CMD\", \"healthcheck.sh\", \"--connect\", \"--innodb_initialized\"]\n      interval: 15s\n      timeout: 5s\n      retries: 6\n\n  nextcloud:\n    image: nextcloud:32.0.0\n    restart: unless-stopped\n    depends_on:\n      db:\n        condition: service_healthy\n    volumes:\n      - nextcloud:/var/www/html\n    environment:\n      - MYSQL_PASSWORD=${NEXTCLOUD_MARIADB_PASSWORD:?error}\n      - MYSQL_DATABASE=nextcloud\n      - MYSQL_USER=nextcloud\n      - MYSQL_HOST=db\n","nextcloud/docker-compose.yaml","yaml",[2565],{"type":25,"tag":121,"props":2566,"children":2567},{"__ignoreMap":7},[2568,2582,2594,2606,2615,2627,2638,2655,2672,2684,2697,2709,2721,2733,2745,2757,2769,2781,2793,2805,2817,2868,2886,2904,2922,2930,2942,2959,2975,2988,3001,3019,3031,3044,3056,3069,3082,3095],{"type":25,"tag":193,"props":2569,"children":2570},{"class":195,"line":196},[2571,2577],{"type":25,"tag":193,"props":2572,"children":2574},{"style":2573},"--shiki-default:#85E89D;--shiki-dark:#85E89D;--shiki-sepia:#F92672",[2575],{"type":43,"value":2576},"volumes",{"type":25,"tag":193,"props":2578,"children":2579},{"style":200},[2580],{"type":43,"value":2581},":\n",{"type":25,"tag":193,"props":2583,"children":2584},{"class":195,"line":206},[2585,2590],{"type":25,"tag":193,"props":2586,"children":2587},{"style":2573},[2588],{"type":43,"value":2589},"  nextcloud",{"type":25,"tag":193,"props":2591,"children":2592},{"style":200},[2593],{"type":43,"value":2581},{"type":25,"tag":193,"props":2595,"children":2596},{"class":195,"line":232},[2597,2602],{"type":25,"tag":193,"props":2598,"children":2599},{"style":2573},[2600],{"type":43,"value":2601},"  db",{"type":25,"tag":193,"props":2603,"children":2604},{"style":200},[2605],{"type":43,"value":2581},{"type":25,"tag":193,"props":2607,"children":2608},{"class":195,"line":246},[2609],{"type":25,"tag":193,"props":2610,"children":2612},{"emptyLinePlaceholder":2611},true,[2613],{"type":43,"value":2614},"\n",{"type":25,"tag":193,"props":2616,"children":2617},{"class":195,"line":255},[2618,2623],{"type":25,"tag":193,"props":2619,"children":2620},{"style":2573},[2621],{"type":43,"value":2622},"services",{"type":25,"tag":193,"props":2624,"children":2625},{"style":200},[2626],{"type":43,"value":2581},{"type":25,"tag":193,"props":2628,"children":2629},{"class":195,"line":277},[2630,2634],{"type":25,"tag":193,"props":2631,"children":2632},{"style":2573},[2633],{"type":43,"value":2601},{"type":25,"tag":193,"props":2635,"children":2636},{"style":200},[2637],{"type":43,"value":2581},{"type":25,"tag":193,"props":2639,"children":2640},{"class":195,"line":290},[2641,2646,2650],{"type":25,"tag":193,"props":2642,"children":2643},{"style":2573},[2644],{"type":43,"value":2645},"    image",{"type":25,"tag":193,"props":2647,"children":2648},{"style":200},[2649],{"type":43,"value":218},{"type":25,"tag":193,"props":2651,"children":2652},{"style":2484},[2653],{"type":43,"value":2654},"mariadb:11.8\n",{"type":25,"tag":193,"props":2656,"children":2657},{"class":195,"line":299},[2658,2663,2667],{"type":25,"tag":193,"props":2659,"children":2660},{"style":2573},[2661],{"type":43,"value":2662},"    restart",{"type":25,"tag":193,"props":2664,"children":2665},{"style":200},[2666],{"type":43,"value":218},{"type":25,"tag":193,"props":2668,"children":2669},{"style":2484},[2670],{"type":43,"value":2671},"unless-stopped\n",{"type":25,"tag":193,"props":2673,"children":2674},{"class":195,"line":308},[2675,2680],{"type":25,"tag":193,"props":2676,"children":2677},{"style":2573},[2678],{"type":43,"value":2679},"    volumes",{"type":25,"tag":193,"props":2681,"children":2682},{"style":200},[2683],{"type":43,"value":2581},{"type":25,"tag":193,"props":2685,"children":2686},{"class":195,"line":321},[2687,2692],{"type":25,"tag":193,"props":2688,"children":2689},{"style":200},[2690],{"type":43,"value":2691},"      - ",{"type":25,"tag":193,"props":2693,"children":2694},{"style":2484},[2695],{"type":43,"value":2696},"db:/var/lib/mysql\n",{"type":25,"tag":193,"props":2698,"children":2699},{"class":195,"line":334},[2700,2705],{"type":25,"tag":193,"props":2701,"children":2702},{"style":2573},[2703],{"type":43,"value":2704},"    environment",{"type":25,"tag":193,"props":2706,"children":2707},{"style":200},[2708],{"type":43,"value":2581},{"type":25,"tag":193,"props":2710,"children":2711},{"class":195,"line":347},[2712,2716],{"type":25,"tag":193,"props":2713,"children":2714},{"style":200},[2715],{"type":43,"value":2691},{"type":25,"tag":193,"props":2717,"children":2718},{"style":2484},[2719],{"type":43,"value":2720},"MARIADB_ROOT_PASSWORD=${NEXTCLOUD_MARIADB_ROOT_PASSWORD:?error}\n",{"type":25,"tag":193,"props":2722,"children":2723},{"class":195,"line":360},[2724,2728],{"type":25,"tag":193,"props":2725,"children":2726},{"style":200},[2727],{"type":43,"value":2691},{"type":25,"tag":193,"props":2729,"children":2730},{"style":2484},[2731],{"type":43,"value":2732},"MARIADB_PASSWORD=${NEXTCLOUD_MARIADB_PASSWORD:?error}\n",{"type":25,"tag":193,"props":2734,"children":2735},{"class":195,"line":369},[2736,2740],{"type":25,"tag":193,"props":2737,"children":2738},{"style":200},[2739],{"type":43,"value":2691},{"type":25,"tag":193,"props":2741,"children":2742},{"style":2484},[2743],{"type":43,"value":2744},"MARIADB_DATABASE=nextcloud\n",{"type":25,"tag":193,"props":2746,"children":2747},{"class":195,"line":377},[2748,2752],{"type":25,"tag":193,"props":2749,"children":2750},{"style":200},[2751],{"type":43,"value":2691},{"type":25,"tag":193,"props":2753,"children":2754},{"style":2484},[2755],{"type":43,"value":2756},"MARIADB_USER=nextcloud\n",{"type":25,"tag":193,"props":2758,"children":2759},{"class":195,"line":399},[2760,2765],{"type":25,"tag":193,"props":2761,"children":2762},{"style":2573},[2763],{"type":43,"value":2764},"    command",{"type":25,"tag":193,"props":2766,"children":2767},{"style":200},[2768],{"type":43,"value":2581},{"type":25,"tag":193,"props":2770,"children":2771},{"class":195,"line":486},[2772,2776],{"type":25,"tag":193,"props":2773,"children":2774},{"style":200},[2775],{"type":43,"value":2691},{"type":25,"tag":193,"props":2777,"children":2778},{"style":2484},[2779],{"type":43,"value":2780},"--transaction-isolation=READ-COMMITTED\n",{"type":25,"tag":193,"props":2782,"children":2783},{"class":195,"line":504},[2784,2788],{"type":25,"tag":193,"props":2785,"children":2786},{"style":200},[2787],{"type":43,"value":2691},{"type":25,"tag":193,"props":2789,"children":2790},{"style":2484},[2791],{"type":43,"value":2792},"--log-bin=binlog\n",{"type":25,"tag":193,"props":2794,"children":2795},{"class":195,"line":513},[2796,2800],{"type":25,"tag":193,"props":2797,"children":2798},{"style":200},[2799],{"type":43,"value":2691},{"type":25,"tag":193,"props":2801,"children":2802},{"style":2484},[2803],{"type":43,"value":2804},"--binlog-format=ROW\n",{"type":25,"tag":193,"props":2806,"children":2807},{"class":195,"line":522},[2808,2813],{"type":25,"tag":193,"props":2809,"children":2810},{"style":2573},[2811],{"type":43,"value":2812},"    healthcheck",{"type":25,"tag":193,"props":2814,"children":2815},{"style":200},[2816],{"type":43,"value":2581},{"type":25,"tag":193,"props":2818,"children":2820},{"class":195,"line":2819},21,[2821,2826,2831,2836,2840,2845,2849,2854,2858,2863],{"type":25,"tag":193,"props":2822,"children":2823},{"style":2573},[2824],{"type":43,"value":2825},"      test",{"type":25,"tag":193,"props":2827,"children":2828},{"style":200},[2829],{"type":43,"value":2830},": [",{"type":25,"tag":193,"props":2832,"children":2833},{"style":2484},[2834],{"type":43,"value":2835},"\"CMD\"",{"type":25,"tag":193,"props":2837,"children":2838},{"style":200},[2839],{"type":43,"value":549},{"type":25,"tag":193,"props":2841,"children":2842},{"style":2484},[2843],{"type":43,"value":2844},"\"healthcheck.sh\"",{"type":25,"tag":193,"props":2846,"children":2847},{"style":200},[2848],{"type":43,"value":549},{"type":25,"tag":193,"props":2850,"children":2851},{"style":2484},[2852],{"type":43,"value":2853},"\"--connect\"",{"type":25,"tag":193,"props":2855,"children":2856},{"style":200},[2857],{"type":43,"value":549},{"type":25,"tag":193,"props":2859,"children":2860},{"style":2484},[2861],{"type":43,"value":2862},"\"--innodb_initialized\"",{"type":25,"tag":193,"props":2864,"children":2865},{"style":200},[2866],{"type":43,"value":2867},"]\n",{"type":25,"tag":193,"props":2869,"children":2871},{"class":195,"line":2870},22,[2872,2877,2881],{"type":25,"tag":193,"props":2873,"children":2874},{"style":2573},[2875],{"type":43,"value":2876},"      interval",{"type":25,"tag":193,"props":2878,"children":2879},{"style":200},[2880],{"type":43,"value":218},{"type":25,"tag":193,"props":2882,"children":2883},{"style":2484},[2884],{"type":43,"value":2885},"15s\n",{"type":25,"tag":193,"props":2887,"children":2889},{"class":195,"line":2888},23,[2890,2895,2899],{"type":25,"tag":193,"props":2891,"children":2892},{"style":2573},[2893],{"type":43,"value":2894},"      timeout",{"type":25,"tag":193,"props":2896,"children":2897},{"style":200},[2898],{"type":43,"value":218},{"type":25,"tag":193,"props":2900,"children":2901},{"style":2484},[2902],{"type":43,"value":2903},"5s\n",{"type":25,"tag":193,"props":2905,"children":2907},{"class":195,"line":2906},24,[2908,2913,2917],{"type":25,"tag":193,"props":2909,"children":2910},{"style":2573},[2911],{"type":43,"value":2912},"      retries",{"type":25,"tag":193,"props":2914,"children":2915},{"style":200},[2916],{"type":43,"value":218},{"type":25,"tag":193,"props":2918,"children":2919},{"style":417},[2920],{"type":43,"value":2921},"6\n",{"type":25,"tag":193,"props":2923,"children":2925},{"class":195,"line":2924},25,[2926],{"type":25,"tag":193,"props":2927,"children":2928},{"emptyLinePlaceholder":2611},[2929],{"type":43,"value":2614},{"type":25,"tag":193,"props":2931,"children":2933},{"class":195,"line":2932},26,[2934,2938],{"type":25,"tag":193,"props":2935,"children":2936},{"style":2573},[2937],{"type":43,"value":2589},{"type":25,"tag":193,"props":2939,"children":2940},{"style":200},[2941],{"type":43,"value":2581},{"type":25,"tag":193,"props":2943,"children":2945},{"class":195,"line":2944},27,[2946,2950,2954],{"type":25,"tag":193,"props":2947,"children":2948},{"style":2573},[2949],{"type":43,"value":2645},{"type":25,"tag":193,"props":2951,"children":2952},{"style":200},[2953],{"type":43,"value":218},{"type":25,"tag":193,"props":2955,"children":2956},{"style":2484},[2957],{"type":43,"value":2958},"nextcloud:32.0.0\n",{"type":25,"tag":193,"props":2960,"children":2962},{"class":195,"line":2961},28,[2963,2967,2971],{"type":25,"tag":193,"props":2964,"children":2965},{"style":2573},[2966],{"type":43,"value":2662},{"type":25,"tag":193,"props":2968,"children":2969},{"style":200},[2970],{"type":43,"value":218},{"type":25,"tag":193,"props":2972,"children":2973},{"style":2484},[2974],{"type":43,"value":2671},{"type":25,"tag":193,"props":2976,"children":2978},{"class":195,"line":2977},29,[2979,2984],{"type":25,"tag":193,"props":2980,"children":2981},{"style":2573},[2982],{"type":43,"value":2983},"    depends_on",{"type":25,"tag":193,"props":2985,"children":2986},{"style":200},[2987],{"type":43,"value":2581},{"type":25,"tag":193,"props":2989,"children":2991},{"class":195,"line":2990},30,[2992,2997],{"type":25,"tag":193,"props":2993,"children":2994},{"style":2573},[2995],{"type":43,"value":2996},"      db",{"type":25,"tag":193,"props":2998,"children":2999},{"style":200},[3000],{"type":43,"value":2581},{"type":25,"tag":193,"props":3002,"children":3004},{"class":195,"line":3003},31,[3005,3010,3014],{"type":25,"tag":193,"props":3006,"children":3007},{"style":2573},[3008],{"type":43,"value":3009},"        condition",{"type":25,"tag":193,"props":3011,"children":3012},{"style":200},[3013],{"type":43,"value":218},{"type":25,"tag":193,"props":3015,"children":3016},{"style":2484},[3017],{"type":43,"value":3018},"service_healthy\n",{"type":25,"tag":193,"props":3020,"children":3022},{"class":195,"line":3021},32,[3023,3027],{"type":25,"tag":193,"props":3024,"children":3025},{"style":2573},[3026],{"type":43,"value":2679},{"type":25,"tag":193,"props":3028,"children":3029},{"style":200},[3030],{"type":43,"value":2581},{"type":25,"tag":193,"props":3032,"children":3034},{"class":195,"line":3033},33,[3035,3039],{"type":25,"tag":193,"props":3036,"children":3037},{"style":200},[3038],{"type":43,"value":2691},{"type":25,"tag":193,"props":3040,"children":3041},{"style":2484},[3042],{"type":43,"value":3043},"nextcloud:/var/www/html\n",{"type":25,"tag":193,"props":3045,"children":3047},{"class":195,"line":3046},34,[3048,3052],{"type":25,"tag":193,"props":3049,"children":3050},{"style":2573},[3051],{"type":43,"value":2704},{"type":25,"tag":193,"props":3053,"children":3054},{"style":200},[3055],{"type":43,"value":2581},{"type":25,"tag":193,"props":3057,"children":3059},{"class":195,"line":3058},35,[3060,3064],{"type":25,"tag":193,"props":3061,"children":3062},{"style":200},[3063],{"type":43,"value":2691},{"type":25,"tag":193,"props":3065,"children":3066},{"style":2484},[3067],{"type":43,"value":3068},"MYSQL_PASSWORD=${NEXTCLOUD_MARIADB_PASSWORD:?error}\n",{"type":25,"tag":193,"props":3070,"children":3072},{"class":195,"line":3071},36,[3073,3077],{"type":25,"tag":193,"props":3074,"children":3075},{"style":200},[3076],{"type":43,"value":2691},{"type":25,"tag":193,"props":3078,"children":3079},{"style":2484},[3080],{"type":43,"value":3081},"MYSQL_DATABASE=nextcloud\n",{"type":25,"tag":193,"props":3083,"children":3085},{"class":195,"line":3084},37,[3086,3090],{"type":25,"tag":193,"props":3087,"children":3088},{"style":200},[3089],{"type":43,"value":2691},{"type":25,"tag":193,"props":3091,"children":3092},{"style":2484},[3093],{"type":43,"value":3094},"MYSQL_USER=nextcloud\n",{"type":25,"tag":193,"props":3096,"children":3098},{"class":195,"line":3097},38,[3099,3103],{"type":25,"tag":193,"props":3100,"children":3101},{"style":200},[3102],{"type":43,"value":2691},{"type":25,"tag":193,"props":3104,"children":3105},{"style":2484},[3106],{"type":43,"value":3107},"MYSQL_HOST=db\n",{"type":25,"tag":182,"props":3109,"children":3113},{"className":3110,"code":3111,"language":3112,"meta":7,"style":7},"language-dotenv shiki shiki-themes github-dark github-dark monokai","NEXTCLOUD_MARIADB_ROOT_PASSWORD=\nNEXTCLOUD_MARIADB_PASSWORD=\n","dotenv",[3114],{"type":25,"tag":121,"props":3115,"children":3116},{"__ignoreMap":7},[3117,3132],{"type":25,"tag":193,"props":3118,"children":3119},{"class":195,"line":196},[3120,3126],{"type":25,"tag":193,"props":3121,"children":3123},{"style":3122},"--shiki-default:#FFAB70;--shiki-dark:#FFAB70;--shiki-sepia:#F8F8F2",[3124],{"type":43,"value":3125},"NEXTCLOUD_MARIADB_ROOT_PASSWORD",{"type":25,"tag":193,"props":3127,"children":3129},{"style":3128},"--shiki-default:#F97583;--shiki-dark:#F97583;--shiki-sepia:#F92672",[3130],{"type":43,"value":3131},"=\n",{"type":25,"tag":193,"props":3133,"children":3134},{"class":195,"line":206},[3135,3140],{"type":25,"tag":193,"props":3136,"children":3137},{"style":3122},[3138],{"type":43,"value":3139},"NEXTCLOUD_MARIADB_PASSWORD",{"type":25,"tag":193,"props":3141,"children":3142},{"style":3128},[3143],{"type":43,"value":3131},{"type":25,"tag":34,"props":3145,"children":3146},{},[3147,3149,3155],{"type":43,"value":3148},"Werden als ",{"type":25,"tag":38,"props":3150,"children":3152},{"href":3151},"https://docs.gitlab.com/ci/variables/",[3153],{"type":43,"value":3154},"CI/CD-Variablen",{"type":43,"value":3156}," gespeichert.",{"type":25,"tag":869,"props":3158,"children":3159},{},[],{"type":25,"tag":34,"props":3161,"children":3162},{},[3163],{"type":43,"value":3164},"Um den Stack zu deployen, haben wir folgende Pipeline:",{"type":25,"tag":182,"props":3166,"children":3169},{"className":2560,"code":3167,"filename":3168,"language":2563,"meta":7,"style":7},"stages:\n  - deploy\n\ndeploy:\n  stage: deploy\n  image: docker:28\n  variables:\n    DOCKER_HOST: ssh://[username@]\u003CIP or host>[:port]\n  script:\n    - for file in $(find . -type f -name docker-compose.yml); do docker compose -f $file up --remove-orphans --wait; done\n  rules:\n    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH\n\n",".gitlab-ci.yml",[3170],{"type":25,"tag":121,"props":3171,"children":3172},{"__ignoreMap":7},[3173,3185,3198,3205,3217,3233,3250,3262,3279,3291,3304,3316],{"type":25,"tag":193,"props":3174,"children":3175},{"class":195,"line":196},[3176,3181],{"type":25,"tag":193,"props":3177,"children":3178},{"style":2573},[3179],{"type":43,"value":3180},"stages",{"type":25,"tag":193,"props":3182,"children":3183},{"style":200},[3184],{"type":43,"value":2581},{"type":25,"tag":193,"props":3186,"children":3187},{"class":195,"line":206},[3188,3193],{"type":25,"tag":193,"props":3189,"children":3190},{"style":200},[3191],{"type":43,"value":3192},"  - ",{"type":25,"tag":193,"props":3194,"children":3195},{"style":2484},[3196],{"type":43,"value":3197},"deploy\n",{"type":25,"tag":193,"props":3199,"children":3200},{"class":195,"line":232},[3201],{"type":25,"tag":193,"props":3202,"children":3203},{"emptyLinePlaceholder":2611},[3204],{"type":43,"value":2614},{"type":25,"tag":193,"props":3206,"children":3207},{"class":195,"line":246},[3208,3213],{"type":25,"tag":193,"props":3209,"children":3210},{"style":2573},[3211],{"type":43,"value":3212},"deploy",{"type":25,"tag":193,"props":3214,"children":3215},{"style":200},[3216],{"type":43,"value":2581},{"type":25,"tag":193,"props":3218,"children":3219},{"class":195,"line":255},[3220,3225,3229],{"type":25,"tag":193,"props":3221,"children":3222},{"style":2573},[3223],{"type":43,"value":3224},"  stage",{"type":25,"tag":193,"props":3226,"children":3227},{"style":200},[3228],{"type":43,"value":218},{"type":25,"tag":193,"props":3230,"children":3231},{"style":2484},[3232],{"type":43,"value":3197},{"type":25,"tag":193,"props":3234,"children":3235},{"class":195,"line":277},[3236,3241,3245],{"type":25,"tag":193,"props":3237,"children":3238},{"style":2573},[3239],{"type":43,"value":3240},"  image",{"type":25,"tag":193,"props":3242,"children":3243},{"style":200},[3244],{"type":43,"value":218},{"type":25,"tag":193,"props":3246,"children":3247},{"style":2484},[3248],{"type":43,"value":3249},"docker:28\n",{"type":25,"tag":193,"props":3251,"children":3252},{"class":195,"line":290},[3253,3258],{"type":25,"tag":193,"props":3254,"children":3255},{"style":2573},[3256],{"type":43,"value":3257},"  variables",{"type":25,"tag":193,"props":3259,"children":3260},{"style":200},[3261],{"type":43,"value":2581},{"type":25,"tag":193,"props":3263,"children":3264},{"class":195,"line":299},[3265,3270,3274],{"type":25,"tag":193,"props":3266,"children":3267},{"style":2573},[3268],{"type":43,"value":3269},"    DOCKER_HOST",{"type":25,"tag":193,"props":3271,"children":3272},{"style":200},[3273],{"type":43,"value":218},{"type":25,"tag":193,"props":3275,"children":3276},{"style":2484},[3277],{"type":43,"value":3278},"ssh://[username@]\u003CIP or host>[:port]\n",{"type":25,"tag":193,"props":3280,"children":3281},{"class":195,"line":308},[3282,3287],{"type":25,"tag":193,"props":3283,"children":3284},{"style":2573},[3285],{"type":43,"value":3286},"  script",{"type":25,"tag":193,"props":3288,"children":3289},{"style":200},[3290],{"type":43,"value":2581},{"type":25,"tag":193,"props":3292,"children":3293},{"class":195,"line":321},[3294,3299],{"type":25,"tag":193,"props":3295,"children":3296},{"style":200},[3297],{"type":43,"value":3298},"    - ",{"type":25,"tag":193,"props":3300,"children":3301},{"style":2484},[3302],{"type":43,"value":3303},"for file in $(find . -type f -name docker-compose.yml); do docker compose -f $file up --remove-orphans --wait; done\n",{"type":25,"tag":193,"props":3305,"children":3306},{"class":195,"line":334},[3307,3312],{"type":25,"tag":193,"props":3308,"children":3309},{"style":2573},[3310],{"type":43,"value":3311},"  rules",{"type":25,"tag":193,"props":3313,"children":3314},{"style":200},[3315],{"type":43,"value":2581},{"type":25,"tag":193,"props":3317,"children":3318},{"class":195,"line":347},[3319,3323,3328,3332],{"type":25,"tag":193,"props":3320,"children":3321},{"style":200},[3322],{"type":43,"value":3298},{"type":25,"tag":193,"props":3324,"children":3325},{"style":2573},[3326],{"type":43,"value":3327},"if",{"type":25,"tag":193,"props":3329,"children":3330},{"style":200},[3331],{"type":43,"value":218},{"type":25,"tag":193,"props":3333,"children":3334},{"style":2484},[3335],{"type":43,"value":3336},"$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH\n",{"type":25,"tag":34,"props":3338,"children":3339},{},[3340,3342,3348],{"type":43,"value":3341},"Die Pipeline läuft bei jedem Commit auf dem Standard-Branch, iteriert über alle ",{"type":25,"tag":121,"props":3343,"children":3345},{"className":3344},[],[3346],{"type":43,"value":3347},"docker-compose.yml",{"type":43,"value":3349},"-Dateien und deployt sie.",{"type":25,"tag":48,"props":3351,"children":3353},{"id":3352},"halte-deine-software-aktuell-mit-renovate-bot",[3354],{"type":43,"value":3355},"Halte deine Software aktuell mit Renovate-Bot",{"type":25,"tag":34,"props":3357,"children":3358},{},[3359],{"type":43,"value":3360},"Hier kommt Renovate ins Spiel.",{"type":25,"tag":182,"props":3362,"children":3364},{"className":184,"code":3363,"filename":186,"language":187,"meta":7,"style":7},"{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"extends\": [\n    \"config:best-practices\"\n  ]\n}\n",[3365],{"type":25,"tag":121,"props":3366,"children":3367},{"__ignoreMap":7},[3368,3375,3394,3406,3414,3421],{"type":25,"tag":193,"props":3369,"children":3370},{"class":195,"line":196},[3371],{"type":25,"tag":193,"props":3372,"children":3373},{"style":200},[3374],{"type":43,"value":203},{"type":25,"tag":193,"props":3376,"children":3377},{"class":195,"line":206},[3378,3382,3386,3390],{"type":25,"tag":193,"props":3379,"children":3380},{"style":210},[3381],{"type":43,"value":213},{"type":25,"tag":193,"props":3383,"children":3384},{"style":200},[3385],{"type":43,"value":218},{"type":25,"tag":193,"props":3387,"children":3388},{"style":221},[3389],{"type":43,"value":224},{"type":25,"tag":193,"props":3391,"children":3392},{"style":200},[3393],{"type":43,"value":229},{"type":25,"tag":193,"props":3395,"children":3396},{"class":195,"line":232},[3397,3402],{"type":25,"tag":193,"props":3398,"children":3399},{"style":210},[3400],{"type":43,"value":3401},"  \"extends\"",{"type":25,"tag":193,"props":3403,"children":3404},{"style":200},[3405],{"type":43,"value":243},{"type":25,"tag":193,"props":3407,"children":3408},{"class":195,"line":246},[3409],{"type":25,"tag":193,"props":3410,"children":3411},{"style":221},[3412],{"type":43,"value":3413},"    \"config:best-practices\"\n",{"type":25,"tag":193,"props":3415,"children":3416},{"class":195,"line":255},[3417],{"type":25,"tag":193,"props":3418,"children":3419},{"style":200},[3420],{"type":43,"value":519},{"type":25,"tag":193,"props":3422,"children":3423},{"class":195,"line":277},[3424],{"type":25,"tag":193,"props":3425,"children":3426},{"style":200},[3427],{"type":43,"value":528},{"type":25,"tag":34,"props":3429,"children":3430},{},[3431],{"type":43,"value":3432},"Renovate erstellt für jedes Update einen Merge-Request. Super!",{"type":25,"tag":48,"props":3434,"children":3436},{"id":3435},"automatisierte-sicherheitsupdates-und-opt-in-für-minor-major-versionen",[3437],{"type":43,"value":3438},"Automatisierte Sicherheitsupdates und Opt-in für Minor-/Major-Versionen",{"type":25,"tag":34,"props":3440,"children":3441},{},[3442],{"type":43,"value":3443},"Die aktuelle Konfiguration erstellt für jedes Update einen Merge-Request, aber wir möchten, dass Sicherheitsupdates ohne Benutzerinteraktion erfolgen.",{"type":25,"tag":34,"props":3445,"children":3446},{},[3447,3449,3455],{"type":43,"value":3448},"Es ist wichtig zu verstehen, wie Docker-Images versioniert bzw. getaggt werden. Es hängt vom jeweiligen Image ab, aber nehmen wir die offizielle ",{"type":25,"tag":38,"props":3450,"children":3452},{"href":3451},"https://hub.docker.com/_/mariadb",[3453],{"type":43,"value":3454},"MariaDB",{"type":43,"value":3456}," als Beispiel.",{"type":25,"tag":34,"props":3458,"children":3459},{},[3460,3462,3468],{"type":43,"value":3461},"Es gibt ",{"type":25,"tag":121,"props":3463,"children":3465},{"className":3464},[],[3466],{"type":43,"value":3467},"11.8.3-noble, 11.8-noble, 11-noble, lts-noble, 11.8.3, 11.8, 11, lts",{"type":43,"value":3469},", die alle auf dasselbe Image verweisen.",{"type":25,"tag":34,"props":3471,"children":3472},{},[3473,3479,3481,3487,3489,3495,3496,3502],{"type":25,"tag":121,"props":3474,"children":3476},{"className":3475},[],[3477],{"type":43,"value":3478},"11.8.3-noble",{"type":43,"value":3480}," bedeutet, dass wir MariaDB in Version ",{"type":25,"tag":121,"props":3482,"children":3484},{"className":3483},[],[3485],{"type":43,"value":3486},"11.8.3",{"type":43,"value":3488}," auf Basis von Ubuntu Noble erhalten.\n",{"type":25,"tag":121,"props":3490,"children":3492},{"className":3491},[],[3493],{"type":43,"value":3494},"11.8-noble",{"type":43,"value":3480},{"type":25,"tag":121,"props":3497,"children":3499},{"className":3498},[],[3500],{"type":43,"value":3501},"11.8.\u003Clatest_patch>",{"type":43,"value":3503}," auf Basis von Ubuntu Noble erhalten.",{"type":25,"tag":34,"props":3505,"children":3506},{},[3507,3509,3515,3517,3522,3524,3529],{"type":43,"value":3508},"Wenn eine neue Version von MariaDB veröffentlicht wird, z. B. ",{"type":25,"tag":121,"props":3510,"children":3512},{"className":3511},[],[3513],{"type":43,"value":3514},"11.8.4-noble",{"type":43,"value":3516},", wird ein neuer Tag ",{"type":25,"tag":121,"props":3518,"children":3520},{"className":3519},[],[3521],{"type":43,"value":3514},{"type":43,"value":3523}," veröffentlicht, aber der Tag ",{"type":25,"tag":121,"props":3525,"children":3527},{"className":3526},[],[3528],{"type":43,"value":3494},{"type":43,"value":3530}," wird aktualisiert.",{"type":25,"tag":34,"props":3532,"children":3533},{},[3534,3536,3541],{"type":43,"value":3535},"Gleiches gilt für das Ubuntu-Update. Der Tag ",{"type":25,"tag":121,"props":3537,"children":3539},{"className":3538},[],[3540],{"type":43,"value":3478},{"type":43,"value":3542}," kann aktualisiert werden, wenn das Image mit dem neuesten Ubuntu-Image erneut gebaut wird.",{"type":25,"tag":34,"props":3544,"children":3545},{},[3546,3552,3554,3560],{"type":25,"tag":121,"props":3547,"children":3549},{"className":3548},[],[3550],{"type":43,"value":3551},"docker compose up",{"type":43,"value":3553}," mit ",{"type":25,"tag":121,"props":3555,"children":3557},{"className":3556},[],[3558],{"type":43,"value":3559},"mariadb:11.8-noble",{"type":43,"value":3561}," wird nichts bewirken, weil Docker sich dieser Änderung nicht bewusst ist.",{"type":25,"tag":34,"props":3563,"children":3564},{},[3565,3567,3573],{"type":43,"value":3566},"Im Beispiel oben verweisen wir auf ",{"type":25,"tag":121,"props":3568,"children":3570},{"className":3569},[],[3571],{"type":43,"value":3572},"mariadb:11.8",{"type":43,"value":3574},", weil wir die neueste Patch-Version auf Basis des neuesten Betriebssystems verwenden möchten.",{"type":25,"tag":869,"props":3576,"children":3577},{},[],{"type":25,"tag":34,"props":3579,"children":3580},{},[3581],{"type":43,"value":3582},"Wie soll Docker mitgeteilt werden, dass es eine neue Version gibt?",{"type":25,"tag":34,"props":3584,"children":3585},{},[3586,3588,3594],{"type":43,"value":3587},"Die Hauptidee ist, das Docker-Image zusätzlich mit einem ",{"type":25,"tag":38,"props":3589,"children":3591},{"href":3590},"https://docs.docker.com/dhi/core-concepts/digests/",[3592],{"type":43,"value":3593},"Digest",{"type":43,"value":3595}," anzugeben.",{"type":25,"tag":34,"props":3597,"children":3598},{},[3599,3601,3606,3608,3614],{"type":43,"value":3600},"Wenn Renovate das erste Mal läuft, findet es den Verweis auf ",{"type":25,"tag":121,"props":3602,"children":3604},{"className":3603},[],[3605],{"type":43,"value":3572},{"type":43,"value":3607}," und erstellt einen Merge-Request, um den Digest auf so etwas wie ",{"type":25,"tag":121,"props":3609,"children":3611},{"className":3610},[],[3612],{"type":43,"value":3613},"mariadb:11.8@sha256:ae6119716edac6998ae85508431b3d2e666530ddf4e94c61a10710caec9b0f71",{"type":43,"value":3615}," festzulegen.",{"type":25,"tag":34,"props":3617,"children":3618},{},[3619],{"type":43,"value":3620},"Es überwacht das auch, sodass bei jedem Update des Images der Digest wechselt und Renovate einen Merge-Request erstellt.",{"type":25,"tag":34,"props":3622,"children":3623},{},[3624],{"type":43,"value":3625},"Damit diese Updates automatisch gemergt werden, müssen wir ein paar Anpassungen vornehmen.",{"type":25,"tag":182,"props":3627,"children":3630},{"className":184,"code":3628,"filename":186,"highlights":3629,"language":187,"meta":7,"style":7},"{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"extends\": [\n    \"config:best-practices\",\n    \"default:automergeDigest\"\n  ],\n  \"automergeType\": \"branch\",\n  \"ignoreTests\": true\n}\n",[255,277,290,299],[3631],{"type":25,"tag":121,"props":3632,"children":3633},{"__ignoreMap":7},[3634,3641,3660,3671,3683,3693,3702,3724,3742],{"type":25,"tag":193,"props":3635,"children":3636},{"class":195,"line":196},[3637],{"type":25,"tag":193,"props":3638,"children":3639},{"style":200},[3640],{"type":43,"value":203},{"type":25,"tag":193,"props":3642,"children":3643},{"class":195,"line":206},[3644,3648,3652,3656],{"type":25,"tag":193,"props":3645,"children":3646},{"style":210},[3647],{"type":43,"value":213},{"type":25,"tag":193,"props":3649,"children":3650},{"style":200},[3651],{"type":43,"value":218},{"type":25,"tag":193,"props":3653,"children":3654},{"style":221},[3655],{"type":43,"value":224},{"type":25,"tag":193,"props":3657,"children":3658},{"style":200},[3659],{"type":43,"value":229},{"type":25,"tag":193,"props":3661,"children":3662},{"class":195,"line":232},[3663,3667],{"type":25,"tag":193,"props":3664,"children":3665},{"style":210},[3666],{"type":43,"value":3401},{"type":25,"tag":193,"props":3668,"children":3669},{"style":200},[3670],{"type":43,"value":243},{"type":25,"tag":193,"props":3672,"children":3673},{"class":195,"line":246},[3674,3679],{"type":25,"tag":193,"props":3675,"children":3676},{"style":221},[3677],{"type":43,"value":3678},"    \"config:best-practices\"",{"type":25,"tag":193,"props":3680,"children":3681},{"style":200},[3682],{"type":43,"value":229},{"type":25,"tag":193,"props":3684,"children":3687},{"class":3685,"line":255},[195,3686],"highlight",[3688],{"type":25,"tag":193,"props":3689,"children":3690},{"style":221},[3691],{"type":43,"value":3692},"    \"default:automergeDigest\"\n",{"type":25,"tag":193,"props":3694,"children":3696},{"class":3695,"line":277},[195,3686],[3697],{"type":25,"tag":193,"props":3698,"children":3699},{"style":200},[3700],{"type":43,"value":3701},"  ],\n",{"type":25,"tag":193,"props":3703,"children":3705},{"class":3704,"line":290},[195,3686],[3706,3711,3715,3720],{"type":25,"tag":193,"props":3707,"children":3708},{"style":210},[3709],{"type":43,"value":3710},"  \"automergeType\"",{"type":25,"tag":193,"props":3712,"children":3713},{"style":200},[3714],{"type":43,"value":218},{"type":25,"tag":193,"props":3716,"children":3717},{"style":221},[3718],{"type":43,"value":3719},"\"branch\"",{"type":25,"tag":193,"props":3721,"children":3722},{"style":200},[3723],{"type":43,"value":229},{"type":25,"tag":193,"props":3725,"children":3727},{"class":3726,"line":299},[195,3686],[3728,3733,3737],{"type":25,"tag":193,"props":3729,"children":3730},{"style":210},[3731],{"type":43,"value":3732},"  \"ignoreTests\"",{"type":25,"tag":193,"props":3734,"children":3735},{"style":200},[3736],{"type":43,"value":218},{"type":25,"tag":193,"props":3738,"children":3739},{"style":417},[3740],{"type":43,"value":3741},"true\n",{"type":25,"tag":193,"props":3743,"children":3744},{"class":195,"line":308},[3745],{"type":25,"tag":193,"props":3746,"children":3747},{"style":200},[3748],{"type":43,"value":528},{"type":25,"tag":34,"props":3750,"children":3751},{},[3752,3754,3760,3761,3767],{"type":43,"value":3753},"Das weist Renovate an, die Digest-Updates automatisch zu mergen, ohne einen Merge-Request zu erstellen. Das reduziert das \"Rauschen\", weil es keine Merge-Request-Benachrichtigung gibt.\nMehr dazu findest du unter ",{"type":25,"tag":38,"props":3755,"children":3757},{"href":3756},"https://docs.renovatebot.com/key-concepts/automerge/#branch-vs-pr-automerging",[3758],{"type":43,"value":3759},"automergeType",{"type":43,"value":1790},{"type":25,"tag":38,"props":3762,"children":3764},{"href":3763},"https://docs.renovatebot.com/key-concepts/automerge/#absence-of-tests",[3765],{"type":43,"value":3766},"ignoreTests",{"type":43,"value":2407},{"type":25,"tag":602,"props":3769,"children":3770},{},[3771],{"type":43,"value":606},{"title":7,"searchDepth":206,"depth":206,"links":3773},[3774,3775,3776,3777,3778],{"id":2354,"depth":206,"text":2357},{"id":2391,"depth":206,"text":2394},{"id":2432,"depth":206,"text":2435},{"id":3352,"depth":206,"text":3355},{"id":3435,"depth":206,"text":3438},{"_path":3780,"_dir":649,"_draft":6,"_partial":6,"_locale":7,"slug":621,"teams":3781,"primaryTeam":651,"firstName":3782,"lastName":3783,"prefixTitle":3784,"suffixTitle":7,"executiveRole":3785,"education":3786,"role":3794,"workingSince":3793,"inTheCompanySince":3790,"techSkills":3797,"skills":3819,"projects":3831,"contactDetails":3837,"certifications":3840,"image":3846,"_id":3847,"_type":187,"title":3848,"_source":649,"_file":3849,"_stem":3850,"_extension":187},"/employees/jens-bornschein",[651],"Jens","Bornschein","Dr. Ing.","Projektmanager | Consultant",[3787,3791],[3788,3789,3790],"Doktor-Ingenieur der Informatik","TU Dresden","2020",[3792,3789,3793],"Diplom-Medieninformatiker (TU)","2010",[3795,662,663,3796,718,665],"projectManager","UI/UX",[3798,3799,3802,3803,3804,3806,3808,3811,3814,3817],{"name":700,"level":671},{"name":3800,"level":671,"icon":3801},"C#","/images/csharp.svg",{"name":693,"level":694,"icon":695},{"name":697,"level":694,"icon":698},{"name":3805,"level":694,"icon":706},"Vue.js",{"name":3807,"level":694},"Java",{"name":3809,"level":671,"icon":3810},"Adobe Photoshop","/images/adobeps-logo.svg",{"name":3812,"level":671,"icon":3813},"Adobe Illustrator","/images/adobeai-logo.svg",{"name":3815,"level":694,"icon":3816},"Adobe XD","/images/adobexd-logo.svg",{"name":3818,"level":694},"Gitlab",[3820,3822,3823,3824,3826,3828,3829],{"name":3821,"level":671},"projectManagement",{"name":718,"level":671},{"name":3796,"level":671},{"name":3825,"level":694},"consulting",{"name":3827,"level":694},"scrum",{"name":724,"level":694},{"name":3830,"level":694},"training",[3832,3835],{"project":3833,"position":3834},"Montagespezis","project manager",{"project":3836,"position":3834},"Vipr",{"eMail":3838,"phone":3839,"visibility":738},"jens.bornschein@helmundwalter.de","+49 351 799 035 24",[3841],{"image":3842,"link":3843,"title":3844,"pdf":3845},"/images/certifications/KHZG_Badge.svg","https://www.bundesamtsozialesicherung.de/de/themen/innovationsfonds-und-krankenhausstrukturfonds/krankenhausstrukturfonds/","Berechtigung nach § 21 Absatz 5 Satz 1 KHSFV - Management für KHZG geförderte Vorhaben","/certificates/jb_KHSFV_Zertifikat.pdf","images/employees/Portraits/JensBornschein_MS.webp","employees:employees:5.jens-bornschein.json","Jens Bornschein","employees/5.jens-bornschein.json","employees/5.jens-bornschein",{"_path":648,"_dir":649,"_draft":6,"_partial":6,"_locale":7,"slug":10,"teams":3852,"primaryTeam":652,"firstName":653,"lastName":654,"prefixTitle":7,"suffixTitle":655,"education":3853,"role":3855,"workingSince":666,"inTheCompanySince":667,"techSkills":3856,"skills":3870,"projects":3880,"contactDetails":3885,"_image":739,"image":740,"_id":741,"_type":187,"title":742,"_source":649,"_file":743,"_stem":744,"_extension":187},[651,652],[3854],[658,659,660],[662,663,664,665],[3857,3858,3859,3860,3861,3862,3863,3864,3865,3866,3867,3868,3869],{"name":670,"level":671,"icon":672},{"name":674,"level":671},{"name":676,"level":671,"icon":677},{"name":679,"level":671,"icon":680},{"name":682,"level":671,"icon":683},{"name":685,"level":671},{"name":687,"level":671,"icon":688},{"name":690,"level":671,"icon":691},{"name":693,"level":694,"icon":695},{"name":697,"level":694,"icon":698},{"name":700,"level":694},{"name":702,"level":694,"icon":703},{"name":705,"level":694,"icon":706},[3871,3872,3873,3874,3875,3876,3877,3878,3879],{"name":709,"level":671},{"name":711,"level":671},{"name":652,"level":671},{"name":714,"level":671},{"name":716,"level":671},{"name":718,"level":694},{"name":720,"level":694},{"name":722,"level":694},{"name":724,"level":694},[3881,3883,3884],{"project":727,"position":3882},[729,730],{"project":732,"position":730},{"project":734,"position":730},{"eMail":736,"phone":737,"visibility":738},[3887,3901,3913,3925],{"_path":3888,"_dir":3889,"_draft":6,"_partial":2611,"_locale":7,"name":3890,"slug":3889,"text":3891,"hoverText":3892,"image":3893,"customer":3894,"tags":3895,"_id":3897,"_type":2563,"title":3898,"_source":613,"_file":3899,"_stem":3900,"_extension":2563},"/portfolio/bitburger/_teaser","bitburger","Bitburger B2B- und Marken-Shops","Launch des B2B Shops und Migration der Markenshops auf eine neue Plattform","Die Bitburger Braugruppe modernisierte ihr digitales Angebot. Nach dem Start des B2B Shops wurden fünf Markenshops auf eine gemeinsame Plattform migriert und weiterentwickelt.","/images/portfolio/bitburger/Bitburger_HuW_Glaeser.jpg","Bitburger Braugruppe",[19,3896],"e-commerce","common:portfolio:900.bitburger:_teaser.yaml","Teaser","portfolio/900.bitburger/_teaser.yaml","portfolio/900.bitburger/_teaser",{"_path":3902,"_dir":3903,"_draft":6,"_partial":2611,"_locale":7,"name":3904,"slug":3903,"text":3905,"hoverText":3906,"image":3907,"customer":3908,"tags":3909,"_id":3910,"_type":2563,"title":3898,"_source":613,"_file":3911,"_stem":3912,"_extension":2563},"/portfolio/purize/_teaser","purize","Purize Filters","E-Commerce für hochwertige Aktivkohlefilter","Wir unterstützen PURIZE® Filters mit einem vollständigen E-Commerce-Service inklusive Fulfillment-Lösung und Anbindung an Versanddienstleister. Unsere Expertise im Online-Handel ermöglicht dem Hersteller qualitativ hochwertiger Aktivkohlefilter \"Made in Germany\" eine reibungslose Abwicklung ihrer Bestellprozesse.","/images/portfolio/barcode-machine-verdandijpg.jpg","PURIZE® Filters",[19,3896],"common:portfolio:9000.purize:_teaser.yaml","portfolio/9000.purize/_teaser.yaml","portfolio/9000.purize/_teaser",{"_path":3914,"_dir":3915,"_draft":6,"_partial":2611,"_locale":7,"name":3916,"slug":3915,"text":3917,"hoverText":3918,"image":3919,"customer":3916,"tags":3920,"_id":3922,"_type":2563,"title":3898,"_source":613,"_file":3923,"_stem":3924,"_extension":2563},"/portfolio/pixelx/_teaser","pixelx","PixelX","IT-Sicherheit mit Augenmaß und Sachverstand","Für PixelX haben wir eine gezielte Sicherheitsanalyse durchgeführt, bei der wir dank unseres tiefen technischen Verständnisses eine kritische Schwachstelle identifizieren konnten. Mit minimalem Zeitaufwand erzielten wir maximalen Sicherheitsgewinn.","/images/portfolio/pixelx/pixelx_secured.png",[3921,20],"security","common:portfolio:9010.pixelx:_teaser.yaml","portfolio/9010.pixelx/_teaser.yaml","portfolio/9010.pixelx/_teaser",{"_path":3926,"_dir":3927,"_draft":6,"_partial":2611,"_locale":7,"name":3928,"slug":3927,"text":3929,"hoverText":3930,"image":3931,"customer":3928,"tags":3932,"_id":3933,"_type":2563,"title":3898,"_source":613,"_file":3934,"_stem":3935,"_extension":2563},"/portfolio/slimspots/_teaser","slimspots","SlimSpots","Große Datenmengen in Echtzeit verarbeiten","Für SlimSpots, einen weltweit agierenden Anbieter von Ad-Marketing-Lösungen, haben wir eine hochskalierbare Infrastruktur entwickelt, die die Verarbeitung von Billionen Datensätzen in Echtzeit ermöglicht.","/images/portfolio/slimspots/slim_spots_prtfolio.png",[720,20],"common:portfolio:9020.slimspots:_teaser.yaml","portfolio/9020.slimspots/_teaser.yaml","portfolio/9020.slimspots/_teaser",1782284043359]