[{"data":1,"prerenderedAt":5341},["ShallowReactive",2],{"blog-current-accessibility-legal-statement-template-en":3,"blog-previous-accessibility-legal-statement-template-en":1548,"blog-next-accessibility-legal-statement-template-en":1565,"blog-alt-de-accessibility-legal-statement-template-en":1578,"blog-alt-en-accessibility-legal-statement-template-en":1580,"employee-jens-bornschein":1581,"content-query-8xB9vY4DHX":1670,"content-query-AVfm838iln":4676,"content-query-KtO3wftRle":5221,"related-refs-frontend--en":5303},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"author":10,"image":11,"releaseDate":12,"blogCategories":13,"articleTags":15,"tags":17,"body":19,"_type":1542,"_id":1543,"_source":1544,"_file":1545,"_stem":1546,"_extension":1547},"/en/blog/accessibility-legal-statement-template","blog",false,"","Accessibility Statement (AS) – How to Implement the German Accessibility Strengthening Act and Avoid Potential Warnings","Accessibility Statement according to German BFSG: Template and guide for accessibility declarations. Protect yourself from warnings with our template for an individual Accessibility Strengthening Act. The provisions of the German Accessibility Strengthening Act must be implemented to avoid penalties. You can protect yourself from regulatory enforcement procedures by providing a detailed accessibility statement. You can find a commented template for this in this blog post.","jens-bornschein","/images/Accessibility.png","2025-09-05",[14],"What Moves Us",[16],"Accessibility",[18],"frontend",{"type":20,"children":21,"toc":1527},"root",[22,32,40,64,72,129,144,148,152,158,196,212,240,250,265,271,321,337,417,429,438,665,677,686,799,835,857,972,983,1021,1052,1058,1076,1081,1163,1169,1386,1392,1408,1431,1446,1452,1462,1467,1474,1516,1522],{"type":23,"tag":24,"props":25,"children":31},"element","img",{"alt":26,"aspect-ratio":27,"height":28,"object-fit":29,"src":30},"Fictional draft of a warning letter from the market surveillance authority with the description \"Non-compliance with accessibility requirements.\"","1.7",300,"fill","/blog/Abmahnung-Barrierefreiheitsstaerkungsgesetz.png",[],{"type":23,"tag":33,"props":34,"children":36},"h2",{"id":35},"accessibility-becomes-mandatory-what-the-german-accessibility-strengthening-act-means-for-digital-services-from-2025",[37],{"type":38,"value":39},"text","Accessibility Becomes Mandatory: What the German Accessibility Strengthening Act Means for Digital Services from 2025",{"type":23,"tag":41,"props":42,"children":43},"p",{},[44,50,52,62],{"type":23,"tag":45,"props":46,"children":47},"strong",{},[48],{"type":38,"value":49},"Accessibility has been mandatory for many digital products and services since mid-2025.",{"type":38,"value":51},"\nWe already explained this in our article \"Accessibility Will Be a Recommendation – and a Requirement.\"\nBeyond technical implementation, it's important to note that an\n",{"type":23,"tag":53,"props":54,"children":56},"a",{"href":55},"https://helmundwalter.de/blog/accessibility-will-be-recommended?utm_source=chatgpt.com",[57],{"type":23,"tag":45,"props":58,"children":59},{},[60],{"type":38,"value":61},"Accessibility Statement (AS)",{"type":38,"value":63},"\nis legally required, and incorrect formulation can lead to warnings or regulatory pressure.",{"type":23,"tag":41,"props":65,"children":66},{},[67],{"type":23,"tag":45,"props":68,"children":69},{},[70],{"type":38,"value":71},"Contents of this blog post:",{"type":23,"tag":73,"props":74,"children":75},"ul",{},[76,89,94,104,114,124],{"type":23,"tag":77,"props":78,"children":79},"li",{},[80,82,87],{"type":38,"value":81},"Why an ",{"type":23,"tag":45,"props":83,"children":84},{},[85],{"type":38,"value":86},"Accessibility Statement according to BFSG",{"type":38,"value":88}," is legally required",{"type":23,"tag":77,"props":90,"children":91},{},[92],{"type":38,"value":93},"What this statement must contain",{"type":23,"tag":77,"props":95,"children":96},{},[97,102],{"type":23,"tag":45,"props":98,"children":99},{},[100],{"type":38,"value":101},"A proposal for a possible accessibility statement",{"type":38,"value":103}," / AS",{"type":23,"tag":77,"props":105,"children":106},{},[107,109],{"type":38,"value":108},"Brief explanation of where you should ",{"type":23,"tag":45,"props":110,"children":111},{},[112],{"type":38,"value":113},"customize the statement individually and truthfully to your service",{"type":23,"tag":77,"props":115,"children":116},{},[117,122],{"type":23,"tag":45,"props":118,"children":119},{},[120],{"type":38,"value":121},"Our experience with legal consultation",{"type":38,"value":123}," on formulation",{"type":23,"tag":77,"props":125,"children":126},{},[127],{"type":38,"value":128},"What consequences non-compliance may have",{"type":23,"tag":130,"props":131,"children":134},"span",{"className":132},[133],"text-right",[135],{"type":23,"tag":41,"props":136,"children":137},{},[138],{"type":23,"tag":139,"props":140,"children":141},"em",{},[142],{"type":38,"value":143},"Reading time: approx. 15 minutes",{"type":23,"tag":145,"props":146,"children":147},"br",{},[],{"type":23,"tag":149,"props":150,"children":151},"hr",{},[],{"type":23,"tag":33,"props":153,"children":155},{"id":154},"what-is-the-bfsg-and-accessibility-statement-about",[156],{"type":38,"value":157},"What is the BFSG and Accessibility Statement About?",{"type":23,"tag":41,"props":159,"children":160},{},[161,163,169,171,180,182,187,189,194],{"type":38,"value":162},"The ",{"type":23,"tag":53,"props":164,"children":166},{"href":165},"https://bfsg-gesetz.de",[167],{"type":38,"value":168},"German Accessibility Strengthening Act (BFSG)",{"type":38,"value":170}," requires digital offerings such as online shops, banking apps, or booking portals to be accessibly designed since June 28, 2025.\nThis follows the EU-wide ",{"type":23,"tag":53,"props":172,"children":174},{"href":173},"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",[175],{"type":23,"tag":45,"props":176,"children":177},{},[178],{"type":38,"value":179},"European Accessibility Act (EAA)",{"type":38,"value":181}," and the ",{"type":23,"tag":45,"props":183,"children":184},{},[185],{"type":38,"value":186},"EN 301 549 standard",{"type":38,"value":188},", which usually defines ",{"type":23,"tag":45,"props":190,"children":191},{},[192],{"type":38,"value":193},"WCAG 2.1 AA",{"type":38,"value":195}," as the technical target. Micro-enterprises with fewer than 10 employees and less than\n2 million € annual turnover are exempt.",{"type":23,"tag":41,"props":197,"children":198},{},[199,201,210],{"type":38,"value":200},"According to ",{"type":23,"tag":53,"props":202,"children":204},{"href":203},"https://bfsg-gesetz.de/anlage-3/",[205],{"type":23,"tag":45,"props":206,"children":207},{},[208],{"type":38,"value":209},"§ 14 BFSG and Annex 3",{"type":38,"value":211},", providers must publish an accessibility statement that contains the following points:",{"type":23,"tag":73,"props":213,"children":214},{},[215,220,225,230,235],{"type":23,"tag":77,"props":216,"children":217},{},[218],{"type":38,"value":219},"General description of the digital service",{"type":23,"tag":77,"props":221,"children":222},{},[223],{"type":38,"value":224},"Compliance status of accessibility requirements (e.g., WCAG, EN 301 549)",{"type":23,"tag":77,"props":226,"children":227},{},[228],{"type":38,"value":229},"Contact options of the service provider for feedback on barriers",{"type":23,"tag":77,"props":231,"children":232},{},[233],{"type":38,"value":234},"Market surveillance authority as the responsible control body",{"type":23,"tag":77,"props":236,"children":237},{},[238],{"type":38,"value":239},"Optional information: Date of last review, review methodology, feedback mechanism",{"type":23,"tag":41,"props":241,"children":242},{},[243,248],{"type":23,"tag":45,"props":244,"children":245},{},[246],{"type":38,"value":247},"There is no official template for the accessibility statement.",{"type":38,"value":249},"\nTo our current knowledge, none is planned either.",{"type":23,"tag":41,"props":251,"children":252},{},[253],{"type":23,"tag":45,"props":254,"children":255},{},[256,258,263],{"type":38,"value":257},"Therefore, we will discuss below what such an\n",{"type":23,"tag":139,"props":259,"children":260},{},[261],{"type":38,"value":262},"Accessibility Statement",{"type":38,"value":264}," could look like.",{"type":23,"tag":33,"props":266,"children":268},{"id":267},"our-template-for-your-as",[269],{"type":38,"value":270},"Our Template for Your AS",{"type":23,"tag":272,"props":273,"children":277},"div",{"className":274},[275,276],"doc-sheet","doc-sheet__border-top",[278],{"type":23,"tag":272,"props":279,"children":282},{"className":280},[281],"doc-sheet__section",[283,290,315],{"type":23,"tag":284,"props":285,"children":287},"h1",{"id":286},"accessibility-information",[288],{"type":38,"value":289},"Accessibility Information",{"type":23,"tag":41,"props":291,"children":292},{},[293,295,299,301,306,308,313],{"type":38,"value":294},"We commit to implementing the requirements of the ",{"type":23,"tag":45,"props":296,"children":297},{},[298],{"type":38,"value":168},{"type":38,"value":300}," as well as the underlying ",{"type":23,"tag":45,"props":302,"children":303},{},[304],{"type":38,"value":305},"EU Directive (EU) 2019/882 on accessibility requirements for products and services",{"type":38,"value":307},". Our goal is to design our digital offerings – especially web applications and online services – so that they are ",{"type":23,"tag":45,"props":309,"children":310},{},[311],{"type":38,"value":312},"accessibly available",{"type":38,"value":314}," to all people, regardless of individual abilities or technical assistive devices.",{"type":23,"tag":33,"props":316,"children":318},{"id":317},"service-description",[319],{"type":38,"value":320},"Service Description",{"type":23,"tag":272,"props":322,"children":331},{"className":323},[324,325,326,327,328,329,330],"mt-8","mb-5","pl-0","pr-0","pt-5","pb-5","pa-sm-5",[332],{"type":23,"tag":41,"props":333,"children":334},{},[335],{"type":38,"value":336},"You must individually adapt this part to your digital service.\nWe have provided an example for a classic online shop at this point.",{"type":23,"tag":272,"props":338,"children":341},{"className":339},[275,340],"doc-sheet__border-sides",[342],{"type":23,"tag":272,"props":343,"children":345},{"className":344},[281],[346,358,398],{"type":23,"tag":41,"props":347,"children":348},{},[349,351,356],{"type":38,"value":350},"Our online shop enables users to\n",{"type":23,"tag":45,"props":352,"children":353},{},[354],{"type":38,"value":355},"obtain information about products, digitally select and purchase products",{"type":38,"value":357},".\nThe goods are each offered on their own product page with description, price, and\npossibly available variants such as size or color.",{"type":23,"tag":41,"props":359,"children":360},{},[361,363,368,370,375,377,382,384,389,391,396],{"type":38,"value":362},"The desired products can be added to a ",{"type":23,"tag":45,"props":364,"children":365},{},[366],{"type":38,"value":367},"virtual shopping cart",{"type":38,"value":369},".\nAfter selecting all items, the ordering process leads through the ",{"type":23,"tag":45,"props":371,"children":372},{},[373],{"type":38,"value":374},"checkout area",{"type":38,"value":376},",\nwhere a ",{"type":23,"tag":45,"props":378,"children":379},{},[380],{"type":38,"value":381},"delivery address",{"type":38,"value":383}," and possibly different ",{"type":23,"tag":45,"props":385,"children":386},{},[387],{"type":38,"value":388},"billing address",{"type":38,"value":390},"\nmust be entered, and a ",{"type":23,"tag":45,"props":392,"children":393},{},[394],{"type":38,"value":395},"payment method",{"type":38,"value":397}," must be selected.",{"type":23,"tag":41,"props":399,"children":400},{},[401,403,408,410,415],{"type":38,"value":402},"After successful ordering,\n",{"type":23,"tag":45,"props":404,"children":405},{},[406],{"type":38,"value":407},"order confirmation and shipping confirmations are sent via email",{"type":38,"value":409}," to the email address\nprovided during ordering.\n",{"type":23,"tag":45,"props":411,"children":412},{},[413],{"type":38,"value":414},"Redirection to third-party services",{"type":38,"value":416}," for processing payments may occur.\nWe have limited influence on the design and technical execution of these services.",{"type":23,"tag":130,"props":418,"children":420},{"className":419},[133],[421],{"type":23,"tag":41,"props":422,"children":423},{},[424],{"type":23,"tag":139,"props":425,"children":426},{},[427],{"type":38,"value":428},"Adapt to individual service",{"type":23,"tag":272,"props":430,"children":432},{"className":431},[324,325,326,327,328,329,330],[433],{"type":23,"tag":41,"props":434,"children":435},{},[436],{"type":38,"value":437},"You don't necessarily need to provide the following part.\nHowever, it clarifies your previous efforts and measures, as well as your commitment\nin the area of accessibility, and offers a point of contact beyond the\nmarket surveillance authority.",{"type":23,"tag":272,"props":439,"children":441},{"className":440},[275,340],[442],{"type":23,"tag":272,"props":443,"children":445},{"className":444},[281],[446,452,464,476,515,527,534,573,579,591,599,639],{"type":23,"tag":33,"props":447,"children":449},{"id":448},"accessibility-status",[450],{"type":38,"value":451},"Accessibility Status",{"type":23,"tag":41,"props":453,"children":454},{},[455,457,462],{"type":38,"value":456},"Our website and digital services are continuously adapted to applicable\n",{"type":23,"tag":45,"props":458,"children":459},{},[460],{"type":38,"value":461},"accessibility standards (e.g., WCAG 2.1 AA and EN 301 549)",{"type":38,"value":463},".\nWe actively pursue the goal of identifying, reducing, and ultimately completely eliminating existing barriers.",{"type":23,"tag":41,"props":465,"children":466},{},[467,469,474],{"type":38,"value":468},"Despite all care, ",{"type":23,"tag":45,"props":470,"children":471},{},[472],{"type":38,"value":473},"temporary or partial barriers",{"type":38,"value":475}," may occur in individual cases.\nThis can particularly happen:",{"type":23,"tag":73,"props":477,"children":478},{},[479,491,503],{"type":23,"tag":77,"props":480,"children":481},{},[482,484,489],{"type":38,"value":483},"due to ongoing ",{"type":23,"tag":45,"props":485,"children":486},{},[487],{"type":38,"value":488},"editorial or technical revisions",{"type":38,"value":490}," of individual content and pages,",{"type":23,"tag":77,"props":492,"children":493},{},[494,496,501],{"type":38,"value":495},"due to ",{"type":23,"tag":45,"props":497,"children":498},{},[499],{"type":38,"value":500},"different interpretations",{"type":38,"value":502}," of technical accessibility requirements,",{"type":23,"tag":77,"props":504,"children":505},{},[506,508,513],{"type":38,"value":507},"or with ",{"type":23,"tag":45,"props":509,"children":510},{},[511],{"type":38,"value":512},"complex functionalities",{"type":38,"value":514}," for which no completely accessible solution is yet available.",{"type":23,"tag":41,"props":516,"children":517},{},[518,520,525],{"type":38,"value":519},"We continuously work to identify such deviations and\ndevelop solutions to enable all users ",{"type":23,"tag":45,"props":521,"children":522},{},[523],{"type":38,"value":524},"low-threshold and equivalent access",{"type":38,"value":526},".",{"type":23,"tag":528,"props":529,"children":531},"h3",{"id":530},"last-review",[532],{"type":38,"value":533},"Last Review",{"type":23,"tag":41,"props":535,"children":536},{},[537,539,544,546,551,553,558,560,564,566,571],{"type":38,"value":538},"The last exemplary accessibility review took place on ",{"type":23,"tag":139,"props":540,"children":541},{},[542],{"type":38,"value":543},"[Date of last review]",{"type":38,"value":545},"\nby ",{"type":23,"tag":139,"props":547,"children":548},{},[549],{"type":38,"value":550},"[Enter company – an external company is better here]",{"type":38,"value":552},".\nA ",{"type":23,"tag":45,"props":554,"children":555},{},[556],{"type":38,"value":557},"selection of representative pages and functions",{"type":38,"value":559}," was examined for compliance\nwith the requirements of ",{"type":23,"tag":45,"props":561,"children":562},{},[563],{"type":38,"value":193},{"type":38,"value":565}," and ",{"type":23,"tag":45,"props":567,"children":568},{},[569],{"type":38,"value":570},"EN 301 549",{"type":38,"value":572},".\nNot all content or pages were individually tested.\nThe selection was based on usage frequency and central functionalities\nof our online offering.",{"type":23,"tag":33,"props":574,"children":576},{"id":575},"feedback-and-contact",[577],{"type":38,"value":578},"Feedback and Contact",{"type":23,"tag":41,"props":580,"children":581},{},[582,584,589],{"type":38,"value":583},"Should you notice ",{"type":23,"tag":45,"props":585,"children":586},{},[587],{"type":38,"value":588},"barriers",{"type":38,"value":590}," when visiting our digital offerings,\nwe ask you to inform us.\nEvery hint helps us better understand existing weaknesses and improve them in a targeted manner.",{"type":23,"tag":41,"props":592,"children":593},{},[594],{"type":23,"tag":45,"props":595,"children":596},{},[597],{"type":38,"value":598},"Contact for accessibility feedback:",{"type":23,"tag":41,"props":600,"children":601},{},[602,607,610,615,618,623,626,631,634],{"type":23,"tag":139,"props":603,"children":604},{},[605],{"type":38,"value":606},"[Name or department]",{"type":23,"tag":145,"props":608,"children":609},{},[],{"type":23,"tag":139,"props":611,"children":612},{},[613],{"type":38,"value":614},"[Company]",{"type":23,"tag":145,"props":616,"children":617},{},[],{"type":23,"tag":139,"props":619,"children":620},{},[621],{"type":38,"value":622},"[Address, optional]",{"type":23,"tag":145,"props":624,"children":625},{},[],{"type":23,"tag":139,"props":627,"children":628},{},[629],{"type":38,"value":630},"[Email address]",{"type":23,"tag":145,"props":632,"children":633},{},[],{"type":23,"tag":139,"props":635,"children":636},{},[637],{"type":38,"value":638},"[Phone number, optional]",{"type":23,"tag":41,"props":640,"children":641},{},[642,644,649,651,656,658,663],{"type":38,"value":643},"We assure you that we will ",{"type":23,"tag":45,"props":645,"children":646},{},[647],{"type":38,"value":648},"editorially and technically review",{"type":38,"value":650}," incoming feedback as quickly as possible and, if possible, ",{"type":23,"tag":45,"props":652,"children":653},{},[654],{"type":38,"value":655},"remedy",{"type":38,"value":657}," it within a reasonable timeframe.\nShould a short-term technical solution not be possible, we will work with you to find ",{"type":23,"tag":45,"props":659,"children":660},{},[661],{"type":38,"value":662},"alternative access routes or supporting measures",{"type":38,"value":664}," to still enable you to use the service.",{"type":23,"tag":130,"props":666,"children":668},{"className":667},[133],[669],{"type":23,"tag":41,"props":670,"children":671},{},[672],{"type":23,"tag":139,"props":673,"children":674},{},[675],{"type":38,"value":676},"optional",{"type":23,"tag":272,"props":678,"children":680},{"className":679},[324,325,326,327,328,329,330],[681],{"type":23,"tag":41,"props":682,"children":683},{},[684],{"type":38,"value":685},"The following part is important again, as the market surveillance authority must be named here\nand you should refer to the currently valid Terms and Conditions, which may close possible gaps in the\ndescription of the service or product.",{"type":23,"tag":272,"props":687,"children":689},{"className":688},[275,340],[690],{"type":23,"tag":272,"props":691,"children":693},{"className":692},[281],[694,700,717,736,741,752,758,763],{"type":23,"tag":33,"props":695,"children":697},{"id":696},"additional-information",[698],{"type":38,"value":699},"Additional Information",{"type":23,"tag":41,"props":701,"children":702},{},[703,705,710,712],{"type":38,"value":704},"Please note that the use of our digital services and all associated\nfunctions is additionally subject to our ",{"type":23,"tag":45,"props":706,"children":707},{},[708],{"type":38,"value":709},"General Terms and Conditions (GTC)",{"type":38,"value":711},".\nThese GTC regulate, among other things, contract conclusion, payment processing, and\ndelivery. In case of contradictions or deviations, the GTC in their\ncurrent version apply, insofar as they do not restrict or override accessibility requirements.\nAn accessible version of our GTC is available here: ",{"type":23,"tag":139,"props":713,"children":714},{},[715],{"type":38,"value":716},"[Link to GTC]",{"type":23,"tag":41,"props":718,"children":719},{},[720,722,727,729,734],{"type":38,"value":721},"We understand accessibility not as a one-time measure, but as an\n",{"type":23,"tag":45,"props":723,"children":724},{},[725],{"type":38,"value":726},"ongoing process",{"type":38,"value":728},". Therefore, our content and systems are regularly reviewed\nand revised. In individual cases, this may temporarily lead to\n",{"type":23,"tag":45,"props":730,"children":731},{},[732],{"type":38,"value":733},"limitations in accessibility",{"type":38,"value":735},". We ask for your understanding.",{"type":23,"tag":41,"props":737,"children":738},{},[739],{"type":38,"value":740},"For further information on the German Accessibility Strengthening Act, we refer to\nthe responsible national enforcement agency:",{"type":23,"tag":41,"props":742,"children":743},{},[744,750],{"type":23,"tag":53,"props":745,"children":747},{"href":746},"https://www.bundesfachstelle-barrierefreiheit.de",[748],{"type":38,"value":749},"German Federal Agency for Accessibility",{"type":38,"value":751}," (Operated by: Knappschaft-Bahn-See)",{"type":23,"tag":528,"props":753,"children":755},{"id":754},"responsible-market-surveillance-authority",[756],{"type":38,"value":757},"Responsible Market Surveillance Authority",{"type":23,"tag":41,"props":759,"children":760},{},[761],{"type":38,"value":762},"Market Surveillance Authority of the States for Accessibility of Products and\nServices (MLBF) in Magdeburg, Saxony-Anhalt.",{"type":23,"tag":41,"props":764,"children":765},{},[766,771,774,776,779,781,784,786,789,792,794,797],{"type":23,"tag":45,"props":767,"children":768},{},[769],{"type":38,"value":770},"MLBF (under establishment)",{"type":23,"tag":145,"props":772,"children":773},{},[],{"type":38,"value":775},"\nc/o Ministry of Labor, Social Affairs, Health and Equal Opportunities Saxony-Anhalt",{"type":23,"tag":145,"props":777,"children":778},{},[],{"type":38,"value":780},"\nP.O. Box 39 11 55",{"type":23,"tag":145,"props":782,"children":783},{},[],{"type":38,"value":785},"\n39135 Magdeburg",{"type":23,"tag":145,"props":787,"children":788},{},[],{"type":23,"tag":145,"props":790,"children":791},{},[],{"type":38,"value":793},"\nPhone: 0391 567 6970",{"type":23,"tag":145,"props":795,"children":796},{},[],{"type":38,"value":798},"\nEmail: MLBF(at)ms.sachsen-anhalt.de.",{"type":23,"tag":272,"props":800,"children":805},{"className":801},[802,803,804],"hint","hint--warning","mt-5",[806],{"type":23,"tag":41,"props":807,"children":808},{},[809,814,817,819,826,828,833],{"type":23,"tag":45,"props":810,"children":811},{},[812],{"type":38,"value":813},"Note:",{"type":23,"tag":145,"props":815,"children":816},{},[],{"type":38,"value":818},"\nAccording to ",{"type":23,"tag":139,"props":820,"children":821},{},[822],{"type":23,"tag":53,"props":823,"children":824},{"href":203},[825],{"type":38,"value":203},{"type":38,"value":827}," §1 c,\n\"",{"type":23,"tag":139,"props":829,"children":830},{},[831],{"type":38,"value":832},"a description of how the service fulfills the relevant accessibility requirements\nlisted in the regulation to be issued pursuant to §3 paragraph 2;",{"type":38,"value":834},"\"\nshould be included – i.e., a precise description of how the service was designed to be accessible.",{"type":23,"tag":272,"props":836,"children":840},{"className":837},[838,325,326,327,328,329,330,839],"mt-0","pt-0",[841,847,852],{"type":23,"tag":528,"props":842,"children":844},{"id":843},"example-of-a-description-of-concrete-measures",[845],{"type":38,"value":846},"Example of a Description of Concrete Measures",{"type":23,"tag":41,"props":848,"children":849},{},[850],{"type":38,"value":851},"Below is an example of concrete measures as we typically provide and implement\nas an agency for our clients in projects.",{"type":23,"tag":41,"props":853,"children":854},{},[855],{"type":38,"value":856},"These measures would need to be truthfully and individually adapted to your measures.",{"type":23,"tag":272,"props":858,"children":861},{"className":859},[275,860],"doc-sheet__border-bottom",[862],{"type":23,"tag":272,"props":863,"children":865},{"className":864},[281],[866,872,877,883,888,894,899,905,910,916,921,927,932,938,943,949,967],{"type":23,"tag":33,"props":867,"children":869},{"id":868},"concrete-implementation-of-accessibility-requirements",[870],{"type":38,"value":871},"Concrete Implementation of Accessibility Requirements",{"type":23,"tag":41,"props":873,"children":874},{},[875],{"type":38,"value":876},"To fulfill legal accessibility requirements, the following technical\nand design measures have been implemented:",{"type":23,"tag":528,"props":878,"children":880},{"id":879},"technical-structure-and-semantics",[881],{"type":38,"value":882},"Technical Structure and Semantics",{"type":23,"tag":41,"props":884,"children":885},{},[886],{"type":38,"value":887},"The HTML structures of our website correspond to the semantic purpose of the respective\ncontent and interaction elements. Additionally, ARIA markups were used to make complex\nfunctionalities and their status accessible to assistive technologies.",{"type":23,"tag":528,"props":889,"children":891},{"id":890},"content-design-and-editorial-measures",[892],{"type":38,"value":893},"Content Design and Editorial Measures",{"type":23,"tag":41,"props":895,"children":896},{},[897],{"type":38,"value":898},"Editorially responsible persons have been trained in the correct use of text structures\nand hierarchical heading levels. When creating content, attention is paid to\nclear, understandable language. Complex matters are presented in a structured manner\nand organized with subheadings. Link texts are meaningfully formulated and clearly\ndescribe the destination of the link. Lists and other structuring HTML elements are\nstrategically used to clarify content structure. Tables are provided with appropriate\nheadings and descriptions to make their content and structure understandable.",{"type":23,"tag":528,"props":900,"children":902},{"id":901},"visual-design-and-responsive-design",[903],{"type":38,"value":904},"Visual Design and Responsive Design",{"type":23,"tag":41,"props":906,"children":907},{},[908],{"type":38,"value":909},"In color design, attention was paid to high-contrast presentation according to\nWCAG Level AA. Information is not conveyed exclusively through visual\nproperties such as color, shape, or position, but supplemented by additional\ntextual or structural hints. The website is responsively designed\nand usable on various output devices. Text size can be adjusted using browser zoom\nto at least 200% without loss of functionality. Navigation and\ncontrol elements are consistently designed and positioned in comparable locations.",{"type":23,"tag":528,"props":911,"children":913},{"id":912},"text-alternatives-media-and-time-based-content",[914],{"type":38,"value":915},"Text Alternatives, Media and Time-based Content",{"type":23,"tag":41,"props":917,"children":918},{},[919],{"type":38,"value":920},"Provisions have been made for all images and graphics so that users can\ncreate meaningful alternative texts when creating content or mark pure\ndecorative graphics with empty alternative texts.\nVideo content, insofar as it is under our control, is provided with subtitles.\nTime-controlled displays or automatic notifications have been avoided.\nIf such elements are necessary for functional reasons, they can be paused and\ncontrolled by users.\nContent that might require attention does not blink or flash.",{"type":23,"tag":528,"props":922,"children":924},{"id":923},"navigation-and-operation",[925],{"type":38,"value":926},"Navigation and Operation",{"type":23,"tag":41,"props":928,"children":929},{},[930],{"type":38,"value":931},"The website is fully keyboard operable. The keyboard focus is always clearly\nvisible and follows a logical order corresponding to the page structure.\nUnnecessary focus movement within a page as well as unintended\nreset when reloading pages are avoided to prevent context and\norientation loss.",{"type":23,"tag":528,"props":933,"children":935},{"id":934},"forms-and-input",[936],{"type":38,"value":937},"Forms and Input",{"type":23,"tag":41,"props":939,"children":940},{},[941],{"type":38,"value":942},"In all forms, clear label assignments to the corresponding form and\ncontrol elements are provided.\nError and status messages are presented clearly and accessibly\nto facilitate operation and understanding of inputs.",{"type":23,"tag":528,"props":944,"children":946},{"id":945},"additional-measures",[947],{"type":38,"value":948},"Additional Measures",{"type":23,"tag":73,"props":950,"children":951},{},[952,957,962],{"type":23,"tag":77,"props":953,"children":954},{},[955],{"type":38,"value":956},"Automatic page redirections without user interaction have been avoided.",{"type":23,"tag":77,"props":958,"children":959},{},[960],{"type":38,"value":961},"Click and touch targets have sufficient minimum size for easy operation.",{"type":23,"tag":77,"props":963,"children":964},{},[965],{"type":38,"value":966},"In linear navigation through assistive technologies, content follows a meaningful and understandable order.",{"type":23,"tag":41,"props":968,"children":969},{},[970],{"type":38,"value":971},"These measures ensure a high degree of compatibility with common assistive\ntechnologies and enable equivalent use of our digital services for\npeople with different abilities.",{"type":23,"tag":130,"props":973,"children":975},{"className":974},[133],[976],{"type":23,"tag":41,"props":977,"children":978},{},[979],{"type":23,"tag":139,"props":980,"children":981},{},[982],{"type":38,"value":428},{"type":23,"tag":272,"props":984,"children":987},{"className":985},[802,986],"hint--info",[988,994,1005],{"type":23,"tag":33,"props":989,"children":991},{"id":990},"possible-short-version",[992],{"type":38,"value":993},"Possible Short Version:",{"type":23,"tag":41,"props":995,"children":996},{},[997,999,1003],{"type":38,"value":998},"We design our digital offerings according to the\n",{"type":23,"tag":45,"props":1000,"children":1001},{},[1002],{"type":38,"value":168},{"type":38,"value":1004}," and applicable standards\n(e.g., WCAG 2.1 AA) to be accessible and continuously expand this accessibility.",{"type":23,"tag":41,"props":1006,"children":1007},{},[1008,1009,1014,1016],{"type":38,"value":468},{"type":23,"tag":45,"props":1010,"children":1011},{},[1012],{"type":38,"value":1013},"temporary or technical limitations",{"type":38,"value":1015}," may occasionally occur.\nWe welcome feedback on barriers and strive for quick\nsolutions. ",{"type":23,"tag":139,"props":1017,"children":1018},{},[1019],{"type":38,"value":1020},"[Here's the link to complete accessibility information](LINK)",{"type":23,"tag":272,"props":1022,"children":1024},{"className":1023},[802,803],[1025,1037],{"type":23,"tag":41,"props":1026,"children":1027},{},[1028,1032,1035],{"type":23,"tag":45,"props":1029,"children":1030},{},[1031],{"type":38,"value":813},{"type":23,"tag":145,"props":1033,"children":1034},{},[],{"type":38,"value":1036},"\nDo not incorporate the AS/IBE into the GTC, as this might influence other\n\"legal transactions.\"\nInstead, place an individual \"Accessibility\" link in the footer\nthat refers to the \"Accessibility Information\" as a standalone page.",{"type":23,"tag":1038,"props":1039,"children":1040},"blockquote",{},[1041],{"type":23,"tag":41,"props":1042,"children":1043},{},[1044,1046,1051],{"type":38,"value":1045},"\"",{"type":23,"tag":139,"props":1047,"children":1048},{},[1049],{"type":38,"value":1050},"The service provider indicates in relation to their service within the meaning of\n§ 1 paragraph 3 in their General Terms and Conditions or in another\nclearly perceptible way how they fulfill the accessibility requirements of\nthe regulation to be issued pursuant to § 3 paragraph 2.",{"type":38,"value":1045},{"type":23,"tag":33,"props":1053,"children":1055},{"id":1054},"our-experience-with-legal-consultation-on-this-topic",[1056],{"type":38,"value":1057},"Our Experience with Legal Consultation on This Topic",{"type":23,"tag":41,"props":1059,"children":1060},{},[1061,1063,1068,1069,1074],{"type":38,"value":1062},"It should be noted that among the legal advisors we have had contact with over time on this topic, there has been some discourse regarding the implementation of the measures described in the law. The distinction between a ",{"type":23,"tag":139,"props":1064,"children":1065},{},[1066],{"type":38,"value":1067},"narrow",{"type":38,"value":565},{"type":23,"tag":139,"props":1070,"children":1071},{},[1072],{"type":38,"value":1073},"broad",{"type":38,"value":1075}," interpretation of accessibility requirements is primarily the starting point for the required level of detail and depth of described measures.",{"type":23,"tag":41,"props":1077,"children":1078},{},[1079],{"type":38,"value":1080},"Many law firms dealing with digital accessibility recommend:",{"type":23,"tag":73,"props":1082,"children":1083},{},[1084,1108,1119,1143,1153],{"type":23,"tag":77,"props":1085,"children":1086},{},[1087,1092,1094,1099,1101,1106],{"type":23,"tag":45,"props":1088,"children":1089},{},[1090],{"type":38,"value":1091},"Not integrating",{"type":38,"value":1093}," the AS ",{"type":23,"tag":45,"props":1095,"children":1096},{},[1097],{"type":38,"value":1098},"into the GTC",{"type":38,"value":1100},", but maintaining it as a ",{"type":23,"tag":45,"props":1102,"children":1103},{},[1104],{"type":38,"value":1105},"standalone, easily findable page",{"type":38,"value":1107}," – such as under /accessibility and then linking it in the website footer.",{"type":23,"tag":77,"props":1109,"children":1110},{},[1111,1112,1117],{"type":38,"value":162},{"type":23,"tag":45,"props":1113,"children":1114},{},[1115],{"type":38,"value":1116},"AS must explicitly refer to the GTC",{"type":38,"value":1118}," (e.g., to close explanatory gaps in business activities, etc.)",{"type":23,"tag":77,"props":1120,"children":1121},{},[1122,1127,1129,1134,1136,1141],{"type":23,"tag":45,"props":1123,"children":1124},{},[1125],{"type":38,"value":1126},"Avoid legally binding assurances",{"type":38,"value":1128}," (",{"type":23,"tag":139,"props":1130,"children":1131},{},[1132],{"type":38,"value":1133},"\"complete accessibility\"",{"type":38,"value":1135},", ",{"type":23,"tag":139,"props":1137,"children":1138},{},[1139],{"type":38,"value":1140},"\"guaranteed conformity\"",{"type":38,"value":1142},") if these cannot be fulfilled 100%",{"type":23,"tag":77,"props":1144,"children":1145},{},[1146,1151],{"type":23,"tag":45,"props":1147,"children":1148},{},[1149],{"type":38,"value":1150},"Name a contact person for feedback",{"type":38,"value":1152}," – preferably with email address and optionally phone number",{"type":23,"tag":77,"props":1154,"children":1155},{},[1156,1161],{"type":23,"tag":45,"props":1157,"children":1158},{},[1159],{"type":38,"value":1160},"Specifically:",{"type":38,"value":1162}," To avoid being caught in warning campaigns, the corresponding legal text should be adopted almost verbatim. This reduces the risk of being targeted for omissions in the statement during (semi-)automatic reviews (copy or cite BFSG Annex 3)",{"type":23,"tag":528,"props":1164,"children":1166},{"id":1165},"a-possible-additional-formulation-for-improved-defense-against-warnings",[1167],{"type":38,"value":1168},"A Possible Additional Formulation for Improved Defense Against Warnings",{"type":23,"tag":272,"props":1170,"children":1173},{"className":1171},[275,1172],"doc-sheet__border-all",[1174],{"type":23,"tag":272,"props":1175,"children":1177},{"className":1176},[281],[1178,1184,1189,1232,1238,1243,1281,1320,1326,1331,1337,1342,1375],{"type":23,"tag":33,"props":1179,"children":1181},{"id":1180},"service-design-for-accessible-access",[1182],{"type":38,"value":1183},"Service Design for Accessible Access",{"type":23,"tag":41,"props":1185,"children":1186},{},[1187],{"type":38,"value":1188},"Our digital service has been designed to enable people with\nvarious limitations equivalent use.\nWe base this on the following principles:",{"type":23,"tag":73,"props":1190,"children":1191},{},[1192,1197,1202,1207,1212,1217,1222,1227],{"type":23,"tag":77,"props":1193,"children":1194},{},[1195],{"type":38,"value":1196},"High-contrast user interface design",{"type":23,"tag":77,"props":1198,"children":1199},{},[1200],{"type":38,"value":1201},"Providing information on multiple perception levels (text-based, auditory, visual)",{"type":23,"tag":77,"props":1203,"children":1204},{},[1205],{"type":38,"value":1206},"Alternative content for visual or auditory media",{"type":23,"tag":77,"props":1208,"children":1209},{},[1210],{"type":38,"value":1211},"Operation of all functions via keyboard",{"type":23,"tag":77,"props":1213,"children":1214},{},[1215],{"type":38,"value":1216},"Support for screen readers and comparable assistive technologies",{"type":23,"tag":77,"props":1218,"children":1219},{},[1220],{"type":38,"value":1221},"Avoiding time-critical interactions without accessible alternatives",{"type":23,"tag":77,"props":1223,"children":1224},{},[1225],{"type":38,"value":1226},"Using simple language and understandable content",{"type":23,"tag":77,"props":1228,"children":1229},{},[1230],{"type":38,"value":1231},"Intuitive navigation and logically structured content",{"type":23,"tag":528,"props":1233,"children":1235},{"id":1234},"general-accessible-information-provision",[1236],{"type":38,"value":1237},"General Accessible Information Provision",{"type":23,"tag":41,"props":1239,"children":1240},{},[1241],{"type":38,"value":1242},"Information about our services is conveyed to users so that they:",{"type":23,"tag":73,"props":1244,"children":1245},{},[1246,1251,1256,1261,1266,1271,1276],{"type":23,"tag":77,"props":1247,"children":1248},{},[1249],{"type":38,"value":1250},"can be perceived through multiple user senses (e.g., visually and/or auditorily),",{"type":23,"tag":77,"props":1252,"children":1253},{},[1254],{"type":38,"value":1255},"are provided in an easily findable way for users,",{"type":23,"tag":77,"props":1257,"children":1258},{},[1259],{"type":38,"value":1260},"are written in an understandable manner,",{"type":23,"tag":77,"props":1262,"children":1263},{},[1264],{"type":38,"value":1265},"are available in a universal text format (font, size, contrasts, spacing) to enable conversions to assistive output forms,",{"type":23,"tag":77,"props":1267,"children":1268},{},[1269],{"type":38,"value":1270},"are designed with easily readable font size, appropriate typography, and sufficient contrast and spacing,",{"type":23,"tag":77,"props":1272,"children":1273},{},[1274],{"type":38,"value":1275},"provide alternative textual descriptions for non-text content,",{"type":23,"tag":77,"props":1277,"children":1278},{},[1279],{"type":38,"value":1280},"are digitally designed to function consistently, accessibly, intuitively, and stably.",{"type":23,"tag":41,"props":1282,"children":1283},{},[1284,1286,1291,1292,1297,1298,1303,1305,1310,1312,1318],{"type":38,"value":1285},"Both our web offerings, digital services, and mobile applications\nfollow these principles.\nThe design consistently follows the principles of\n",{"type":23,"tag":45,"props":1287,"children":1288},{},[1289],{"type":38,"value":1290},"Perceivability",{"type":38,"value":1135},{"type":23,"tag":45,"props":1293,"children":1294},{},[1295],{"type":38,"value":1296},"Operability",{"type":38,"value":1135},{"type":23,"tag":45,"props":1299,"children":1300},{},[1301],{"type":38,"value":1302},"Understandability",{"type":38,"value":1304},", and ",{"type":23,"tag":45,"props":1306,"children":1307},{},[1308],{"type":38,"value":1309},"Robustness",{"type":38,"value":1311},"\n(according to ",{"type":23,"tag":53,"props":1313,"children":1315},{"href":1314},"https://www.barrierefreiheit-dienstekonsolidierung.bund.de/Webs/PB/DE/gesetze-und-richtlinien/wcag/wcag-artikel.html",[1316],{"type":38,"value":1317},"WCAG criteria",{"type":38,"value":1319},").",{"type":23,"tag":528,"props":1321,"children":1323},{"id":1322},"accessibility-of-supporting-services",[1324],{"type":38,"value":1325},"Accessibility of Supporting Services",{"type":23,"tag":41,"props":1327,"children":1328},{},[1329],{"type":38,"value":1330},"When additional support services such as support hotlines, training offerings, or\ntechnical consulting are provided, we ensure that these services also\nmake accessibility information and compatibility accessible through accessible means.",{"type":23,"tag":528,"props":1332,"children":1334},{"id":1333},"functional-requirements-for-special-limitations",[1335],{"type":38,"value":1336},"Functional Requirements for Special Limitations",{"type":23,"tag":41,"props":1338,"children":1339},{},[1340],{"type":38,"value":1341},"Our services consider the following accessible interaction forms\nfor users:",{"type":23,"tag":73,"props":1343,"children":1344},{},[1345,1350,1355,1360,1365,1370],{"type":23,"tag":77,"props":1346,"children":1347},{},[1348],{"type":38,"value":1349},"For visual limitations: at least one option without visual elements and one that functions independently of color distinction.",{"type":23,"tag":77,"props":1351,"children":1352},{},[1353],{"type":38,"value":1354},"For people with hearing limitations: at least one usage option without sound and one with adjustable audio functions.",{"type":23,"tag":77,"props":1356,"children":1357},{},[1358],{"type":38,"value":1359},"For vocally limited users: at least one operating variant without voice input.",{"type":23,"tag":77,"props":1361,"children":1362},{},[1363],{"type":38,"value":1364},"For motor-limited users: at least one operating form without complex movement sequences or muscle strength, as well as an option for limited reach.",{"type":23,"tag":77,"props":1366,"children":1367},{},[1368],{"type":38,"value":1369},"For people with cognitive limitations: user-friendly structures, reduced complexity where possible, and supportive hints.",{"type":23,"tag":77,"props":1371,"children":1372},{},[1373],{"type":38,"value":1374},"For all accessibility functions: User privacy is maintained.",{"type":23,"tag":41,"props":1376,"children":1377},{},[1378,1380,1384],{"type":38,"value":1379},"These measures are oriented toward the requirements of the\n",{"type":23,"tag":45,"props":1381,"children":1382},{},[1383],{"type":38,"value":168},{"type":38,"value":1385}," and have been integrated into our technical and\ndesign processes to ensure the most comprehensive accessibility possible.",{"type":23,"tag":33,"props":1387,"children":1389},{"id":1388},"what-are-the-consequences-without-an-as",[1390],{"type":38,"value":1391},"What Are the Consequences Without an AS?",{"type":23,"tag":41,"props":1393,"children":1394},{},[1395,1397,1406],{"type":38,"value":1396},"Without a valid and verifiable statement, according to ",{"type":23,"tag":53,"props":1398,"children":1400},{"href":1399},"https://bfsg-gesetz.de/37-bfsg/",[1401],{"type":23,"tag":45,"props":1402,"children":1403},{},[1404],{"type":38,"value":1405},"§ 37 BFSG",{"type":38,"value":1407},", the following can happen:",{"type":23,"tag":73,"props":1409,"children":1410},{},[1411,1416,1421,1426],{"type":23,"tag":77,"props":1412,"children":1413},{},[1414],{"type":38,"value":1415},"Operating or distribution ban (of the respective services or products)",{"type":23,"tag":77,"props":1417,"children":1418},{},[1419],{"type":38,"value":1420},"Fines up to 100,000 euros (depending on the violation)",{"type":23,"tag":77,"props":1422,"children":1423},{},[1424],{"type":38,"value":1425},"Formal objection by market surveillance",{"type":23,"tag":77,"props":1427,"children":1428},{},[1429],{"type":38,"value":1430},"Warnings from competitors or consumer organizations",{"type":23,"tag":41,"props":1432,"children":1433},{},[1434,1436,1444],{"type":38,"value":1435},"This is particularly relevant\n",{"type":23,"tag":45,"props":1437,"children":1438},{},[1439],{"type":23,"tag":139,"props":1440,"children":1441},{},[1442],{"type":38,"value":1443},"because any institution, company, or natural person can alert inspection bodies to a violation of the BFSG",{"type":38,"value":1445},". Thus, it can be assumed\nthat at least your competition will pay close attention to this!",{"type":23,"tag":33,"props":1447,"children":1449},{"id":1448},"conclusion-clarity-protects-against-warnings",[1450],{"type":38,"value":1451},"Conclusion - Clarity Protects Against Warnings",{"type":23,"tag":41,"props":1453,"children":1454},{},[1455,1456,1460],{"type":38,"value":162},{"type":23,"tag":45,"props":1457,"children":1458},{},[1459],{"type":38,"value":262},{"type":38,"value":1461}," is only a small part of your digital service but with great impact.\nThose who take it seriously and individually tailor it to their own service show not only legal compliance,\nbut also respect toward all users. It also protects against legal pitfalls and economic damage.",{"type":23,"tag":41,"props":1463,"children":1464},{},[1465],{"type":38,"value":1466},"If you need support in creating or formulating one, please contact us.\nWe help create accessible web applications and show how you can meaningfully\nimplement legal requirements.",{"type":23,"tag":1468,"props":1469,"children":1471},"h4",{"id":1470},"legal-notice",[1472],{"type":38,"value":1473},"Legal Notice",{"type":23,"tag":41,"props":1475,"children":1476},{},[1477,1479,1487,1488,1493,1495,1500,1502,1507,1509,1514],{"type":38,"value":1478},"This blog post ",{"type":23,"tag":45,"props":1480,"children":1481},{},[1482],{"type":23,"tag":139,"props":1483,"children":1484},{},[1485],{"type":38,"value":1486},"does not constitute legal advice",{"type":38,"value":565},{"type":23,"tag":45,"props":1489,"children":1490},{},[1491],{"type":38,"value":1492},"does not replace legal review of your accessibility statement",{"type":38,"value":1494},". The contained formulations and hints have been carefully researched, but make ",{"type":23,"tag":45,"props":1496,"children":1497},{},[1498],{"type":38,"value":1499},"no claim to completeness",{"type":38,"value":1501}," or ",{"type":23,"tag":45,"props":1503,"children":1504},{},[1505],{"type":38,"value":1506},"legal binding",{"type":38,"value":1508},". For actual implementation according to ",{"type":23,"tag":45,"props":1510,"children":1511},{},[1512],{"type":38,"value":1513},"BFSG",{"type":38,"value":1515}," and applicable regulations, legal review in individual cases is recommended.",{"type":23,"tag":1468,"props":1517,"children":1519},{"id":1518},"note-on-creating-this-post",[1520],{"type":38,"value":1521},"Note on Creating This Post",{"type":23,"tag":41,"props":1523,"children":1524},{},[1525],{"type":38,"value":1526},"This post was also created and translated with the help of AI OpenAI GPT-4 (2024-06, Model: GPT-4o). The basis was editorial research, personal experiences, legal sources, and a company template. Final editing and professional approval were done by the article author and accessibility officer Dr.-Ing. Jens Bornschein.",{"title":7,"searchDepth":1528,"depth":1528,"links":1529},2,[1530,1531,1532,1536,1537,1540,1541],{"id":35,"depth":1528,"text":39},{"id":154,"depth":1528,"text":157},{"id":267,"depth":1528,"text":270,"children":1533},[1534],{"id":843,"depth":1535,"text":846},3,{"id":990,"depth":1528,"text":993},{"id":1054,"depth":1528,"text":1057,"children":1538},[1539],{"id":1165,"depth":1535,"text":1168},{"id":1388,"depth":1528,"text":1391},{"id":1448,"depth":1528,"text":1451},"markdown","common:en:blog:15.accessibility-legal-statement-template.md","common","en/blog/15.accessibility-legal-statement-template.md","en/blog/15.accessibility-legal-statement-template","md",{"_path":1549,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":1550,"description":1551,"author":1552,"image":1553,"releaseDate":1554,"blogCategories":1555,"articleTags":1558,"tags":1560,"_type":1542,"_id":1562,"_source":1544,"_file":1563,"_stem":1564,"_extension":1547},"/en/blog/gitlab-behind-traefik","Installing Gitlab behind Traefik","It's super easy to install GitLab with docker on a dedicated host. But what when you need to deploy it alongside you outher deployments?","robert-juzak","/images/dev-ops-dark.svg","2025-07-16",[1556,1557],"What moves us","Infrastructure",[1559],"DevOps",[1561],"devops","common:en:blog:14.gitlab-behind-traefik.md","en/blog/14.gitlab-behind-traefik.md","en/blog/14.gitlab-behind-traefik",{"_path":1566,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":1567,"description":1568,"author":1552,"image":1553,"releaseDate":1569,"blogCategories":1570,"articleTags":1571,"tags":1573,"_type":1542,"_id":1575,"_source":1544,"_file":1576,"_stem":1577,"_extension":1547},"/en/blog/shopware-renovate-bot","Configuring Renovate to properly handle Shopware packages","Shopware is using a custom versioning schema. To allow Renovate to automatically create PR's, we need to adjust the Renovate config","2025-09-08",[1556,1559],[1559,1572],"Open Source",[1574,1561],"shopware","common:en:blog:16.shopware-renovate-bot.md","en/blog/16.shopware-renovate-bot.md","en/blog/16.shopware-renovate-bot",{"_path":1579},"/blog/accessibility-legal-statement-template",{"_path":4},{"_path":1582,"_dir":1583,"_draft":6,"_partial":6,"_locale":7,"slug":10,"teams":1584,"primaryTeam":1585,"firstName":1586,"lastName":1587,"prefixTitle":1588,"suffixTitle":7,"executiveRole":1589,"education":1590,"role":1598,"workingSince":1597,"inTheCompanySince":1594,"techSkills":1605,"skills":1635,"projects":1648,"contactDetails":1654,"certifications":1658,"image":1664,"_id":1665,"_type":1666,"title":1667,"_source":1583,"_file":1668,"_stem":1669,"_extension":1666},"/employees/jens-bornschein","employees",[1585],"appDev","Jens","Bornschein","Dr. Ing.","Projektmanager | Consultant",[1591,1595],[1592,1593,1594],"Doktor-Ingenieur der Informatik","TU Dresden","2020",[1596,1593,1597],"Diplom-Medieninformatiker (TU)","2010",[1599,1600,1601,1602,1603,1604],"projectManager","softwareDeveloper","fullstackDeveloper","UI/UX","accessibility","consultant",[1606,1609,1612,1616,1619,1622,1624,1627,1630,1633],{"name":1607,"level":1608},"PHP","expert",{"name":1610,"level":1608,"icon":1611},"C#","/images/csharp.svg",{"name":1613,"level":1614,"icon":1615},"CSS","advanced","/images/css.svg",{"name":1617,"level":1614,"icon":1618},"HTML","/images/html.svg",{"name":1620,"level":1614,"icon":1621},"Vue.js","/images/vuejs.svg",{"name":1623,"level":1614},"Java",{"name":1625,"level":1608,"icon":1626},"Adobe Photoshop","/images/adobeps-logo.svg",{"name":1628,"level":1608,"icon":1629},"Adobe Illustrator","/images/adobeai-logo.svg",{"name":1631,"level":1614,"icon":1632},"Adobe XD","/images/adobexd-logo.svg",{"name":1634,"level":1614},"Gitlab",[1636,1638,1639,1640,1642,1644,1646],{"name":1637,"level":1608},"projectManagement",{"name":1603,"level":1608},{"name":1602,"level":1608},{"name":1641,"level":1614},"consulting",{"name":1643,"level":1614},"scrum",{"name":1645,"level":1614},"softwareArchitect",{"name":1647,"level":1614},"training",[1649,1652],{"project":1650,"position":1651},"Montagespezis","project manager",{"project":1653,"position":1651},"Vipr",{"eMail":1655,"phone":1656,"visibility":1657},"jens.bornschein@helmundwalter.de","+49 351 799 035 24","1",[1659],{"image":1660,"link":1661,"title":1662,"pdf":1663},"/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","json","Jens Bornschein","employees/5.jens-bornschein.json","employees/5.jens-bornschein",{"_path":1549,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":1550,"description":1551,"author":1552,"image":1553,"releaseDate":1554,"blogCategories":1671,"articleTags":1672,"tags":1673,"body":1674,"_type":1542,"_id":1562,"_source":1544,"_file":1563,"_stem":1564,"_extension":1547},[1556,1557],[1559],[1561],{"type":20,"children":1675,"toc":4668},[1676,1681,1687,1698,1985,1990,1996,2001,2006,2011,2118,2124,2129,2369,2375,2380,2398,2404,2420,2777,2782,2845,2851,2866,2890,3269,3273,3309,3312,3322,3325,3328,3334,3345,3355,3368,3371,3378,3777,3781,3806,3809,3812,3822,3828,4184,4188,4201,4204,4209,4642,4646,4662],{"type":23,"tag":24,"props":1677,"children":1680},{"alt":7,"aspect-ratio":1678,"height":28,"object-fit":29,"src":1679},"1.78","/blog/gitlab-traefik.png",[],{"type":23,"tag":33,"props":1682,"children":1684},{"id":1683},"the-simplest-way-to-install-gitlab",[1685],{"type":38,"value":1686},"The simplest way to install GitLab",{"type":23,"tag":41,"props":1688,"children":1689},{},[1690,1692],{"type":38,"value":1691},"GitLab provides official instructions to install it using Docker and Docker Compose. You can find it in ",{"type":23,"tag":53,"props":1693,"children":1695},{"href":1694},"https://docs.gitlab.com/install/docker/installation/#install-gitlab-by-using-docker-compose",[1696],{"type":38,"value":1697},"the official documentation",{"type":23,"tag":1699,"props":1700,"children":1705},"pre",{"className":1701,"code":1702,"filename":1703,"language":1704,"meta":7,"style":7},"language-yaml shiki shiki-themes github-dark github-dark monokai","services:\n  gitlab:\n    image: gitlab/gitlab-ee:\u003Cversion>-ce.0\n    container_name: gitlab\n    restart: always\n    hostname: '\u003Cgitlab.example.com>'\n    environment:\n      GITLAB_OMNIBUS_CONFIG: |\n        # Add any other gitlab.rb configuration here, each on its own line\n        external_url 'https://\u003Cgitlab.example.com>'\n    ports:\n      - '80:80'\n      - '443:443'\n      - '22:22'\n    volumes:\n      - '$GITLAB_HOME/config:/etc/gitlab'\n      - '$GITLAB_HOME/logs:/var/log/gitlab'\n      - '$GITLAB_HOME/data:/var/opt/gitlab'\n    shm_size: '256m'\n","gitlab/docker-compose.yaml","yaml",[1706],{"type":23,"tag":1707,"props":1708,"children":1709},"code",{"__ignoreMap":7},[1710,1727,1739,1758,1776,1794,1812,1825,1844,1853,1862,1875,1889,1902,1915,1928,1941,1954,1967],{"type":23,"tag":130,"props":1711,"children":1714},{"class":1712,"line":1713},"line",1,[1715,1721],{"type":23,"tag":130,"props":1716,"children":1718},{"style":1717},"--shiki-default:#85E89D;--shiki-dark:#85E89D;--shiki-sepia:#F92672",[1719],{"type":38,"value":1720},"services",{"type":23,"tag":130,"props":1722,"children":1724},{"style":1723},"--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2",[1725],{"type":38,"value":1726},":\n",{"type":23,"tag":130,"props":1728,"children":1729},{"class":1712,"line":1528},[1730,1735],{"type":23,"tag":130,"props":1731,"children":1732},{"style":1717},[1733],{"type":38,"value":1734},"  gitlab",{"type":23,"tag":130,"props":1736,"children":1737},{"style":1723},[1738],{"type":38,"value":1726},{"type":23,"tag":130,"props":1740,"children":1741},{"class":1712,"line":1535},[1742,1747,1752],{"type":23,"tag":130,"props":1743,"children":1744},{"style":1717},[1745],{"type":38,"value":1746},"    image",{"type":23,"tag":130,"props":1748,"children":1749},{"style":1723},[1750],{"type":38,"value":1751},": ",{"type":23,"tag":130,"props":1753,"children":1755},{"style":1754},"--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74",[1756],{"type":38,"value":1757},"gitlab/gitlab-ee:\u003Cversion>-ce.0\n",{"type":23,"tag":130,"props":1759,"children":1761},{"class":1712,"line":1760},4,[1762,1767,1771],{"type":23,"tag":130,"props":1763,"children":1764},{"style":1717},[1765],{"type":38,"value":1766},"    container_name",{"type":23,"tag":130,"props":1768,"children":1769},{"style":1723},[1770],{"type":38,"value":1751},{"type":23,"tag":130,"props":1772,"children":1773},{"style":1754},[1774],{"type":38,"value":1775},"gitlab\n",{"type":23,"tag":130,"props":1777,"children":1779},{"class":1712,"line":1778},5,[1780,1785,1789],{"type":23,"tag":130,"props":1781,"children":1782},{"style":1717},[1783],{"type":38,"value":1784},"    restart",{"type":23,"tag":130,"props":1786,"children":1787},{"style":1723},[1788],{"type":38,"value":1751},{"type":23,"tag":130,"props":1790,"children":1791},{"style":1754},[1792],{"type":38,"value":1793},"always\n",{"type":23,"tag":130,"props":1795,"children":1797},{"class":1712,"line":1796},6,[1798,1803,1807],{"type":23,"tag":130,"props":1799,"children":1800},{"style":1717},[1801],{"type":38,"value":1802},"    hostname",{"type":23,"tag":130,"props":1804,"children":1805},{"style":1723},[1806],{"type":38,"value":1751},{"type":23,"tag":130,"props":1808,"children":1809},{"style":1754},[1810],{"type":38,"value":1811},"'\u003Cgitlab.example.com>'\n",{"type":23,"tag":130,"props":1813,"children":1815},{"class":1712,"line":1814},7,[1816,1821],{"type":23,"tag":130,"props":1817,"children":1818},{"style":1717},[1819],{"type":38,"value":1820},"    environment",{"type":23,"tag":130,"props":1822,"children":1823},{"style":1723},[1824],{"type":38,"value":1726},{"type":23,"tag":130,"props":1826,"children":1828},{"class":1712,"line":1827},8,[1829,1834,1838],{"type":23,"tag":130,"props":1830,"children":1831},{"style":1717},[1832],{"type":38,"value":1833},"      GITLAB_OMNIBUS_CONFIG",{"type":23,"tag":130,"props":1835,"children":1836},{"style":1723},[1837],{"type":38,"value":1751},{"type":23,"tag":130,"props":1839,"children":1841},{"style":1840},"--shiki-default:#F97583;--shiki-dark:#F97583;--shiki-sepia:#F92672",[1842],{"type":38,"value":1843},"|\n",{"type":23,"tag":130,"props":1845,"children":1847},{"class":1712,"line":1846},9,[1848],{"type":23,"tag":130,"props":1849,"children":1850},{"style":1754},[1851],{"type":38,"value":1852},"        # Add any other gitlab.rb configuration here, each on its own line\n",{"type":23,"tag":130,"props":1854,"children":1856},{"class":1712,"line":1855},10,[1857],{"type":23,"tag":130,"props":1858,"children":1859},{"style":1754},[1860],{"type":38,"value":1861},"        external_url 'https://\u003Cgitlab.example.com>'\n",{"type":23,"tag":130,"props":1863,"children":1865},{"class":1712,"line":1864},11,[1866,1871],{"type":23,"tag":130,"props":1867,"children":1868},{"style":1717},[1869],{"type":38,"value":1870},"    ports",{"type":23,"tag":130,"props":1872,"children":1873},{"style":1723},[1874],{"type":38,"value":1726},{"type":23,"tag":130,"props":1876,"children":1878},{"class":1712,"line":1877},12,[1879,1884],{"type":23,"tag":130,"props":1880,"children":1881},{"style":1723},[1882],{"type":38,"value":1883},"      - ",{"type":23,"tag":130,"props":1885,"children":1886},{"style":1754},[1887],{"type":38,"value":1888},"'80:80'\n",{"type":23,"tag":130,"props":1890,"children":1892},{"class":1712,"line":1891},13,[1893,1897],{"type":23,"tag":130,"props":1894,"children":1895},{"style":1723},[1896],{"type":38,"value":1883},{"type":23,"tag":130,"props":1898,"children":1899},{"style":1754},[1900],{"type":38,"value":1901},"'443:443'\n",{"type":23,"tag":130,"props":1903,"children":1905},{"class":1712,"line":1904},14,[1906,1910],{"type":23,"tag":130,"props":1907,"children":1908},{"style":1723},[1909],{"type":38,"value":1883},{"type":23,"tag":130,"props":1911,"children":1912},{"style":1754},[1913],{"type":38,"value":1914},"'22:22'\n",{"type":23,"tag":130,"props":1916,"children":1918},{"class":1712,"line":1917},15,[1919,1924],{"type":23,"tag":130,"props":1920,"children":1921},{"style":1717},[1922],{"type":38,"value":1923},"    volumes",{"type":23,"tag":130,"props":1925,"children":1926},{"style":1723},[1927],{"type":38,"value":1726},{"type":23,"tag":130,"props":1929,"children":1931},{"class":1712,"line":1930},16,[1932,1936],{"type":23,"tag":130,"props":1933,"children":1934},{"style":1723},[1935],{"type":38,"value":1883},{"type":23,"tag":130,"props":1937,"children":1938},{"style":1754},[1939],{"type":38,"value":1940},"'$GITLAB_HOME/config:/etc/gitlab'\n",{"type":23,"tag":130,"props":1942,"children":1944},{"class":1712,"line":1943},17,[1945,1949],{"type":23,"tag":130,"props":1946,"children":1947},{"style":1723},[1948],{"type":38,"value":1883},{"type":23,"tag":130,"props":1950,"children":1951},{"style":1754},[1952],{"type":38,"value":1953},"'$GITLAB_HOME/logs:/var/log/gitlab'\n",{"type":23,"tag":130,"props":1955,"children":1957},{"class":1712,"line":1956},18,[1958,1962],{"type":23,"tag":130,"props":1959,"children":1960},{"style":1723},[1961],{"type":38,"value":1883},{"type":23,"tag":130,"props":1963,"children":1964},{"style":1754},[1965],{"type":38,"value":1966},"'$GITLAB_HOME/data:/var/opt/gitlab'\n",{"type":23,"tag":130,"props":1968,"children":1970},{"class":1712,"line":1969},19,[1971,1976,1980],{"type":23,"tag":130,"props":1972,"children":1973},{"style":1717},[1974],{"type":38,"value":1975},"    shm_size",{"type":23,"tag":130,"props":1977,"children":1978},{"style":1723},[1979],{"type":38,"value":1751},{"type":23,"tag":130,"props":1981,"children":1982},{"style":1754},[1983],{"type":38,"value":1984},"'256m'\n",{"type":23,"tag":41,"props":1986,"children":1987},{},[1988],{"type":38,"value":1989},"This assumes you have your server dedicated to GitLab and all required ports (http, https, ssh) are free.\nGitLab will take care of everything, including TLS configuration with Lets Encrypt",{"type":23,"tag":33,"props":1991,"children":1993},{"id":1992},"integrating-gitlab-alongside-other-deployments",[1994],{"type":38,"value":1995},"Integrating GitLab alongside other deployments",{"type":23,"tag":41,"props":1997,"children":1998},{},[1999],{"type":38,"value":2000},"What if you can't or don't want to install GitLab on a dedicated server?",{"type":23,"tag":41,"props":2002,"children":2003},{},[2004],{"type":38,"value":2005},"Maybe you just want a single server for all you services?",{"type":23,"tag":41,"props":2007,"children":2008},{},[2009],{"type":38,"value":2010},"This is an example structure how you could organize your deployments:",{"type":23,"tag":1699,"props":2012,"children":2016},{"className":2013,"code":2014,"language":2015,"meta":7,"style":7},"language-shell shiki shiki-themes github-dark github-dark monokai",".\n├── gitlab/                # GitLab service stack\n├── gitlab-runner/         # GitLab Runner for CI/CD\n├── mattermost/            # Mattermost team collaboration\n├── nextcloud/             # Nextcloud file hosting and collaboration\n└── traefik/               # Traefik reverse proxy configuration\n","shell",[2017],{"type":23,"tag":1707,"props":2018,"children":2019},{"__ignoreMap":7},[2020,2029,2049,2066,2083,2100],{"type":23,"tag":130,"props":2021,"children":2022},{"class":1712,"line":1713},[2023],{"type":23,"tag":130,"props":2024,"children":2026},{"style":2025},"--shiki-default:#79B8FF;--shiki-dark:#79B8FF;--shiki-sepia:#66D9EF",[2027],{"type":38,"value":2028},".\n",{"type":23,"tag":130,"props":2030,"children":2031},{"class":1712,"line":1528},[2032,2038,2043],{"type":23,"tag":130,"props":2033,"children":2035},{"style":2034},"--shiki-default:#B392F0;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E",[2036],{"type":38,"value":2037},"├──",{"type":23,"tag":130,"props":2039,"children":2040},{"style":1754},[2041],{"type":38,"value":2042}," gitlab/",{"type":23,"tag":130,"props":2044,"children":2046},{"style":2045},"--shiki-default:#6A737D;--shiki-dark:#6A737D;--shiki-sepia:#88846F",[2047],{"type":38,"value":2048},"                # GitLab service stack\n",{"type":23,"tag":130,"props":2050,"children":2051},{"class":1712,"line":1535},[2052,2056,2061],{"type":23,"tag":130,"props":2053,"children":2054},{"style":2034},[2055],{"type":38,"value":2037},{"type":23,"tag":130,"props":2057,"children":2058},{"style":1754},[2059],{"type":38,"value":2060}," gitlab-runner/",{"type":23,"tag":130,"props":2062,"children":2063},{"style":2045},[2064],{"type":38,"value":2065},"         # GitLab Runner for CI/CD\n",{"type":23,"tag":130,"props":2067,"children":2068},{"class":1712,"line":1760},[2069,2073,2078],{"type":23,"tag":130,"props":2070,"children":2071},{"style":2034},[2072],{"type":38,"value":2037},{"type":23,"tag":130,"props":2074,"children":2075},{"style":1754},[2076],{"type":38,"value":2077}," mattermost/",{"type":23,"tag":130,"props":2079,"children":2080},{"style":2045},[2081],{"type":38,"value":2082},"            # Mattermost team collaboration\n",{"type":23,"tag":130,"props":2084,"children":2085},{"class":1712,"line":1778},[2086,2090,2095],{"type":23,"tag":130,"props":2087,"children":2088},{"style":2034},[2089],{"type":38,"value":2037},{"type":23,"tag":130,"props":2091,"children":2092},{"style":1754},[2093],{"type":38,"value":2094}," nextcloud/",{"type":23,"tag":130,"props":2096,"children":2097},{"style":2045},[2098],{"type":38,"value":2099},"             # Nextcloud file hosting and collaboration\n",{"type":23,"tag":130,"props":2101,"children":2102},{"class":1712,"line":1796},[2103,2108,2113],{"type":23,"tag":130,"props":2104,"children":2105},{"style":2034},[2106],{"type":38,"value":2107},"└──",{"type":23,"tag":130,"props":2109,"children":2110},{"style":1754},[2111],{"type":38,"value":2112}," traefik/",{"type":23,"tag":130,"props":2114,"children":2115},{"style":2045},[2116],{"type":38,"value":2117},"               # Traefik reverse proxy configuration\n",{"type":23,"tag":528,"props":2119,"children":2121},{"id":2120},"using-a-dedicated-ip",[2122],{"type":38,"value":2123},"Using a dedicated IP",{"type":23,"tag":41,"props":2125,"children":2126},{},[2127],{"type":38,"value":2128},"In case you have a possibility to attach an additional IP to your server (like a Floating IP on Hetzner),\nyou can simply bind the ports to this IP.",{"type":23,"tag":1699,"props":2130,"children":2133},{"className":1701,"code":2131,"filename":1703,"highlights":2132,"language":1704,"meta":7,"style":7},"services:\n  gitlab:\n    image: gitlab/gitlab-ee:\u003Cversion>-ce.0\n    container_name: gitlab\n    restart: always\n    hostname: '\u003Cgitlab.example.com>'\n    environment:\n      GITLAB_OMNIBUS_CONFIG: |\n        # Add any other gitlab.rb configuration here, each on its own line\n        external_url 'https://\u003Cgitlab.example.com>'\n    ports:\n      - '192.168.0.1:80:80'\n      - '192.168.0.1:443:443'\n      - '192.168.0.1:22:22'\n    volumes:\n      - '$GITLAB_HOME/config:/etc/gitlab'\n      - '$GITLAB_HOME/logs:/var/log/gitlab'\n      - '$GITLAB_HOME/data:/var/opt/gitlab'\n    shm_size: '256m'\n",[1877,1891,1904],[2134],{"type":23,"tag":1707,"props":2135,"children":2136},{"__ignoreMap":7},[2137,2148,2159,2174,2189,2204,2219,2230,2245,2252,2259,2270,2284,2297,2310,2321,2332,2343,2354],{"type":23,"tag":130,"props":2138,"children":2139},{"class":1712,"line":1713},[2140,2144],{"type":23,"tag":130,"props":2141,"children":2142},{"style":1717},[2143],{"type":38,"value":1720},{"type":23,"tag":130,"props":2145,"children":2146},{"style":1723},[2147],{"type":38,"value":1726},{"type":23,"tag":130,"props":2149,"children":2150},{"class":1712,"line":1528},[2151,2155],{"type":23,"tag":130,"props":2152,"children":2153},{"style":1717},[2154],{"type":38,"value":1734},{"type":23,"tag":130,"props":2156,"children":2157},{"style":1723},[2158],{"type":38,"value":1726},{"type":23,"tag":130,"props":2160,"children":2161},{"class":1712,"line":1535},[2162,2166,2170],{"type":23,"tag":130,"props":2163,"children":2164},{"style":1717},[2165],{"type":38,"value":1746},{"type":23,"tag":130,"props":2167,"children":2168},{"style":1723},[2169],{"type":38,"value":1751},{"type":23,"tag":130,"props":2171,"children":2172},{"style":1754},[2173],{"type":38,"value":1757},{"type":23,"tag":130,"props":2175,"children":2176},{"class":1712,"line":1760},[2177,2181,2185],{"type":23,"tag":130,"props":2178,"children":2179},{"style":1717},[2180],{"type":38,"value":1766},{"type":23,"tag":130,"props":2182,"children":2183},{"style":1723},[2184],{"type":38,"value":1751},{"type":23,"tag":130,"props":2186,"children":2187},{"style":1754},[2188],{"type":38,"value":1775},{"type":23,"tag":130,"props":2190,"children":2191},{"class":1712,"line":1778},[2192,2196,2200],{"type":23,"tag":130,"props":2193,"children":2194},{"style":1717},[2195],{"type":38,"value":1784},{"type":23,"tag":130,"props":2197,"children":2198},{"style":1723},[2199],{"type":38,"value":1751},{"type":23,"tag":130,"props":2201,"children":2202},{"style":1754},[2203],{"type":38,"value":1793},{"type":23,"tag":130,"props":2205,"children":2206},{"class":1712,"line":1796},[2207,2211,2215],{"type":23,"tag":130,"props":2208,"children":2209},{"style":1717},[2210],{"type":38,"value":1802},{"type":23,"tag":130,"props":2212,"children":2213},{"style":1723},[2214],{"type":38,"value":1751},{"type":23,"tag":130,"props":2216,"children":2217},{"style":1754},[2218],{"type":38,"value":1811},{"type":23,"tag":130,"props":2220,"children":2221},{"class":1712,"line":1814},[2222,2226],{"type":23,"tag":130,"props":2223,"children":2224},{"style":1717},[2225],{"type":38,"value":1820},{"type":23,"tag":130,"props":2227,"children":2228},{"style":1723},[2229],{"type":38,"value":1726},{"type":23,"tag":130,"props":2231,"children":2232},{"class":1712,"line":1827},[2233,2237,2241],{"type":23,"tag":130,"props":2234,"children":2235},{"style":1717},[2236],{"type":38,"value":1833},{"type":23,"tag":130,"props":2238,"children":2239},{"style":1723},[2240],{"type":38,"value":1751},{"type":23,"tag":130,"props":2242,"children":2243},{"style":1840},[2244],{"type":38,"value":1843},{"type":23,"tag":130,"props":2246,"children":2247},{"class":1712,"line":1846},[2248],{"type":23,"tag":130,"props":2249,"children":2250},{"style":1754},[2251],{"type":38,"value":1852},{"type":23,"tag":130,"props":2253,"children":2254},{"class":1712,"line":1855},[2255],{"type":23,"tag":130,"props":2256,"children":2257},{"style":1754},[2258],{"type":38,"value":1861},{"type":23,"tag":130,"props":2260,"children":2261},{"class":1712,"line":1864},[2262,2266],{"type":23,"tag":130,"props":2263,"children":2264},{"style":1717},[2265],{"type":38,"value":1870},{"type":23,"tag":130,"props":2267,"children":2268},{"style":1723},[2269],{"type":38,"value":1726},{"type":23,"tag":130,"props":2271,"children":2274},{"class":2272,"line":1877},[1712,2273],"highlight",[2275,2279],{"type":23,"tag":130,"props":2276,"children":2277},{"style":1723},[2278],{"type":38,"value":1883},{"type":23,"tag":130,"props":2280,"children":2281},{"style":1754},[2282],{"type":38,"value":2283},"'192.168.0.1:80:80'\n",{"type":23,"tag":130,"props":2285,"children":2287},{"class":2286,"line":1891},[1712,2273],[2288,2292],{"type":23,"tag":130,"props":2289,"children":2290},{"style":1723},[2291],{"type":38,"value":1883},{"type":23,"tag":130,"props":2293,"children":2294},{"style":1754},[2295],{"type":38,"value":2296},"'192.168.0.1:443:443'\n",{"type":23,"tag":130,"props":2298,"children":2300},{"class":2299,"line":1904},[1712,2273],[2301,2305],{"type":23,"tag":130,"props":2302,"children":2303},{"style":1723},[2304],{"type":38,"value":1883},{"type":23,"tag":130,"props":2306,"children":2307},{"style":1754},[2308],{"type":38,"value":2309},"'192.168.0.1:22:22'\n",{"type":23,"tag":130,"props":2311,"children":2312},{"class":1712,"line":1917},[2313,2317],{"type":23,"tag":130,"props":2314,"children":2315},{"style":1717},[2316],{"type":38,"value":1923},{"type":23,"tag":130,"props":2318,"children":2319},{"style":1723},[2320],{"type":38,"value":1726},{"type":23,"tag":130,"props":2322,"children":2323},{"class":1712,"line":1930},[2324,2328],{"type":23,"tag":130,"props":2325,"children":2326},{"style":1723},[2327],{"type":38,"value":1883},{"type":23,"tag":130,"props":2329,"children":2330},{"style":1754},[2331],{"type":38,"value":1940},{"type":23,"tag":130,"props":2333,"children":2334},{"class":1712,"line":1943},[2335,2339],{"type":23,"tag":130,"props":2336,"children":2337},{"style":1723},[2338],{"type":38,"value":1883},{"type":23,"tag":130,"props":2340,"children":2341},{"style":1754},[2342],{"type":38,"value":1953},{"type":23,"tag":130,"props":2344,"children":2345},{"class":1712,"line":1956},[2346,2350],{"type":23,"tag":130,"props":2347,"children":2348},{"style":1723},[2349],{"type":38,"value":1883},{"type":23,"tag":130,"props":2351,"children":2352},{"style":1754},[2353],{"type":38,"value":1966},{"type":23,"tag":130,"props":2355,"children":2356},{"class":1712,"line":1969},[2357,2361,2365],{"type":23,"tag":130,"props":2358,"children":2359},{"style":1717},[2360],{"type":38,"value":1975},{"type":23,"tag":130,"props":2362,"children":2363},{"style":1723},[2364],{"type":38,"value":1751},{"type":23,"tag":130,"props":2366,"children":2367},{"style":1754},[2368],{"type":38,"value":1984},{"type":23,"tag":528,"props":2370,"children":2372},{"id":2371},"using-traefik-as-a-reverse-proxy",[2373],{"type":38,"value":2374},"Using Traefik as a reverse proxy",{"type":23,"tag":41,"props":2376,"children":2377},{},[2378],{"type":38,"value":2379},"In this case I assume that you:",{"type":23,"tag":73,"props":2381,"children":2382},{},[2383,2388,2393],{"type":23,"tag":77,"props":2384,"children":2385},{},[2386],{"type":38,"value":2387},"can't or don't want to assign a dedicated IP for GitLab",{"type":23,"tag":77,"props":2389,"children":2390},{},[2391],{"type":38,"value":2392},"can't or don't want to change you default ssh port",{"type":23,"tag":77,"props":2394,"children":2395},{},[2396],{"type":38,"value":2397},"want to use Traefik as a reverse proxy",{"type":23,"tag":1468,"props":2399,"children":2401},{"id":2400},"the-traefik-deployment",[2402],{"type":38,"value":2403},"The Traefik deployment",{"type":23,"tag":41,"props":2405,"children":2406},{},[2407,2409,2418],{"type":38,"value":2408},"Remember to replace ",{"type":23,"tag":45,"props":2410,"children":2411},{},[2412],{"type":23,"tag":1707,"props":2413,"children":2415},{"className":2414},[],[2416],{"type":38,"value":2417},"\u003Cinfo@example.com>",{"type":38,"value":2419}," with your own email.",{"type":23,"tag":1699,"props":2421,"children":2424},{"className":1701,"code":2422,"filename":2423,"language":1704,"meta":7,"style":7},"volumes:\n  letsencrypt:\n\nservices:\n  traefik:\n    image: traefik:3\n    container_name: traefik\n    restart: always\n    network_mode: host\n    volumes:\n      - /var/run/docker.sock:/var/run/docker.sock:ro\n      - letsencrypt:/letsencrypt\n    command:\n      - --log.level=INFO\n\n      - --entrypoints.web.address=:80\n      - --entrypoints.web.http.redirections.entrypoint.to=websecure\n      - --entrypoints.web.http.redirections.entrypoint.scheme=https\n\n      - --entrypoints.websecure.address=:443\n      - --entrypoints.websecure.http.tls.certresolver=letsencrypt\n\n      - --providers.docker=true\n      - --providers.docker.exposedByDefault=false\n\n      - --certificatesresolvers.letsencrypt.acme.email=\u003Cinfo@example.com>\n      - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json\n      - --certificatesresolvers.letsencrypt.acme.httpchallenge=true\n      - --certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web\n","traefik/docker-compose.yaml",[2425],{"type":23,"tag":1707,"props":2426,"children":2427},{"__ignoreMap":7},[2428,2440,2452,2461,2472,2484,2500,2516,2531,2548,2559,2571,2583,2595,2607,2614,2626,2638,2650,2657,2670,2683,2691,2704,2717,2725,2738,2751,2764],{"type":23,"tag":130,"props":2429,"children":2430},{"class":1712,"line":1713},[2431,2436],{"type":23,"tag":130,"props":2432,"children":2433},{"style":1717},[2434],{"type":38,"value":2435},"volumes",{"type":23,"tag":130,"props":2437,"children":2438},{"style":1723},[2439],{"type":38,"value":1726},{"type":23,"tag":130,"props":2441,"children":2442},{"class":1712,"line":1528},[2443,2448],{"type":23,"tag":130,"props":2444,"children":2445},{"style":1717},[2446],{"type":38,"value":2447},"  letsencrypt",{"type":23,"tag":130,"props":2449,"children":2450},{"style":1723},[2451],{"type":38,"value":1726},{"type":23,"tag":130,"props":2453,"children":2454},{"class":1712,"line":1535},[2455],{"type":23,"tag":130,"props":2456,"children":2458},{"emptyLinePlaceholder":2457},true,[2459],{"type":38,"value":2460},"\n",{"type":23,"tag":130,"props":2462,"children":2463},{"class":1712,"line":1760},[2464,2468],{"type":23,"tag":130,"props":2465,"children":2466},{"style":1717},[2467],{"type":38,"value":1720},{"type":23,"tag":130,"props":2469,"children":2470},{"style":1723},[2471],{"type":38,"value":1726},{"type":23,"tag":130,"props":2473,"children":2474},{"class":1712,"line":1778},[2475,2480],{"type":23,"tag":130,"props":2476,"children":2477},{"style":1717},[2478],{"type":38,"value":2479},"  traefik",{"type":23,"tag":130,"props":2481,"children":2482},{"style":1723},[2483],{"type":38,"value":1726},{"type":23,"tag":130,"props":2485,"children":2486},{"class":1712,"line":1796},[2487,2491,2495],{"type":23,"tag":130,"props":2488,"children":2489},{"style":1717},[2490],{"type":38,"value":1746},{"type":23,"tag":130,"props":2492,"children":2493},{"style":1723},[2494],{"type":38,"value":1751},{"type":23,"tag":130,"props":2496,"children":2497},{"style":1754},[2498],{"type":38,"value":2499},"traefik:3\n",{"type":23,"tag":130,"props":2501,"children":2502},{"class":1712,"line":1814},[2503,2507,2511],{"type":23,"tag":130,"props":2504,"children":2505},{"style":1717},[2506],{"type":38,"value":1766},{"type":23,"tag":130,"props":2508,"children":2509},{"style":1723},[2510],{"type":38,"value":1751},{"type":23,"tag":130,"props":2512,"children":2513},{"style":1754},[2514],{"type":38,"value":2515},"traefik\n",{"type":23,"tag":130,"props":2517,"children":2518},{"class":1712,"line":1827},[2519,2523,2527],{"type":23,"tag":130,"props":2520,"children":2521},{"style":1717},[2522],{"type":38,"value":1784},{"type":23,"tag":130,"props":2524,"children":2525},{"style":1723},[2526],{"type":38,"value":1751},{"type":23,"tag":130,"props":2528,"children":2529},{"style":1754},[2530],{"type":38,"value":1793},{"type":23,"tag":130,"props":2532,"children":2533},{"class":1712,"line":1846},[2534,2539,2543],{"type":23,"tag":130,"props":2535,"children":2536},{"style":1717},[2537],{"type":38,"value":2538},"    network_mode",{"type":23,"tag":130,"props":2540,"children":2541},{"style":1723},[2542],{"type":38,"value":1751},{"type":23,"tag":130,"props":2544,"children":2545},{"style":1754},[2546],{"type":38,"value":2547},"host\n",{"type":23,"tag":130,"props":2549,"children":2550},{"class":1712,"line":1855},[2551,2555],{"type":23,"tag":130,"props":2552,"children":2553},{"style":1717},[2554],{"type":38,"value":1923},{"type":23,"tag":130,"props":2556,"children":2557},{"style":1723},[2558],{"type":38,"value":1726},{"type":23,"tag":130,"props":2560,"children":2561},{"class":1712,"line":1864},[2562,2566],{"type":23,"tag":130,"props":2563,"children":2564},{"style":1723},[2565],{"type":38,"value":1883},{"type":23,"tag":130,"props":2567,"children":2568},{"style":1754},[2569],{"type":38,"value":2570},"/var/run/docker.sock:/var/run/docker.sock:ro\n",{"type":23,"tag":130,"props":2572,"children":2573},{"class":1712,"line":1877},[2574,2578],{"type":23,"tag":130,"props":2575,"children":2576},{"style":1723},[2577],{"type":38,"value":1883},{"type":23,"tag":130,"props":2579,"children":2580},{"style":1754},[2581],{"type":38,"value":2582},"letsencrypt:/letsencrypt\n",{"type":23,"tag":130,"props":2584,"children":2585},{"class":1712,"line":1891},[2586,2591],{"type":23,"tag":130,"props":2587,"children":2588},{"style":1717},[2589],{"type":38,"value":2590},"    command",{"type":23,"tag":130,"props":2592,"children":2593},{"style":1723},[2594],{"type":38,"value":1726},{"type":23,"tag":130,"props":2596,"children":2597},{"class":1712,"line":1904},[2598,2602],{"type":23,"tag":130,"props":2599,"children":2600},{"style":1723},[2601],{"type":38,"value":1883},{"type":23,"tag":130,"props":2603,"children":2604},{"style":1754},[2605],{"type":38,"value":2606},"--log.level=INFO\n",{"type":23,"tag":130,"props":2608,"children":2609},{"class":1712,"line":1917},[2610],{"type":23,"tag":130,"props":2611,"children":2612},{"emptyLinePlaceholder":2457},[2613],{"type":38,"value":2460},{"type":23,"tag":130,"props":2615,"children":2616},{"class":1712,"line":1930},[2617,2621],{"type":23,"tag":130,"props":2618,"children":2619},{"style":1723},[2620],{"type":38,"value":1883},{"type":23,"tag":130,"props":2622,"children":2623},{"style":1754},[2624],{"type":38,"value":2625},"--entrypoints.web.address=:80\n",{"type":23,"tag":130,"props":2627,"children":2628},{"class":1712,"line":1943},[2629,2633],{"type":23,"tag":130,"props":2630,"children":2631},{"style":1723},[2632],{"type":38,"value":1883},{"type":23,"tag":130,"props":2634,"children":2635},{"style":1754},[2636],{"type":38,"value":2637},"--entrypoints.web.http.redirections.entrypoint.to=websecure\n",{"type":23,"tag":130,"props":2639,"children":2640},{"class":1712,"line":1956},[2641,2645],{"type":23,"tag":130,"props":2642,"children":2643},{"style":1723},[2644],{"type":38,"value":1883},{"type":23,"tag":130,"props":2646,"children":2647},{"style":1754},[2648],{"type":38,"value":2649},"--entrypoints.web.http.redirections.entrypoint.scheme=https\n",{"type":23,"tag":130,"props":2651,"children":2652},{"class":1712,"line":1969},[2653],{"type":23,"tag":130,"props":2654,"children":2655},{"emptyLinePlaceholder":2457},[2656],{"type":38,"value":2460},{"type":23,"tag":130,"props":2658,"children":2660},{"class":1712,"line":2659},20,[2661,2665],{"type":23,"tag":130,"props":2662,"children":2663},{"style":1723},[2664],{"type":38,"value":1883},{"type":23,"tag":130,"props":2666,"children":2667},{"style":1754},[2668],{"type":38,"value":2669},"--entrypoints.websecure.address=:443\n",{"type":23,"tag":130,"props":2671,"children":2673},{"class":1712,"line":2672},21,[2674,2678],{"type":23,"tag":130,"props":2675,"children":2676},{"style":1723},[2677],{"type":38,"value":1883},{"type":23,"tag":130,"props":2679,"children":2680},{"style":1754},[2681],{"type":38,"value":2682},"--entrypoints.websecure.http.tls.certresolver=letsencrypt\n",{"type":23,"tag":130,"props":2684,"children":2686},{"class":1712,"line":2685},22,[2687],{"type":23,"tag":130,"props":2688,"children":2689},{"emptyLinePlaceholder":2457},[2690],{"type":38,"value":2460},{"type":23,"tag":130,"props":2692,"children":2694},{"class":1712,"line":2693},23,[2695,2699],{"type":23,"tag":130,"props":2696,"children":2697},{"style":1723},[2698],{"type":38,"value":1883},{"type":23,"tag":130,"props":2700,"children":2701},{"style":1754},[2702],{"type":38,"value":2703},"--providers.docker=true\n",{"type":23,"tag":130,"props":2705,"children":2707},{"class":1712,"line":2706},24,[2708,2712],{"type":23,"tag":130,"props":2709,"children":2710},{"style":1723},[2711],{"type":38,"value":1883},{"type":23,"tag":130,"props":2713,"children":2714},{"style":1754},[2715],{"type":38,"value":2716},"--providers.docker.exposedByDefault=false\n",{"type":23,"tag":130,"props":2718,"children":2720},{"class":1712,"line":2719},25,[2721],{"type":23,"tag":130,"props":2722,"children":2723},{"emptyLinePlaceholder":2457},[2724],{"type":38,"value":2460},{"type":23,"tag":130,"props":2726,"children":2728},{"class":1712,"line":2727},26,[2729,2733],{"type":23,"tag":130,"props":2730,"children":2731},{"style":1723},[2732],{"type":38,"value":1883},{"type":23,"tag":130,"props":2734,"children":2735},{"style":1754},[2736],{"type":38,"value":2737},"--certificatesresolvers.letsencrypt.acme.email=\u003Cinfo@example.com>\n",{"type":23,"tag":130,"props":2739,"children":2741},{"class":1712,"line":2740},27,[2742,2746],{"type":23,"tag":130,"props":2743,"children":2744},{"style":1723},[2745],{"type":38,"value":1883},{"type":23,"tag":130,"props":2747,"children":2748},{"style":1754},[2749],{"type":38,"value":2750},"--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json\n",{"type":23,"tag":130,"props":2752,"children":2754},{"class":1712,"line":2753},28,[2755,2759],{"type":23,"tag":130,"props":2756,"children":2757},{"style":1723},[2758],{"type":38,"value":1883},{"type":23,"tag":130,"props":2760,"children":2761},{"style":1754},[2762],{"type":38,"value":2763},"--certificatesresolvers.letsencrypt.acme.httpchallenge=true\n",{"type":23,"tag":130,"props":2765,"children":2767},{"class":1712,"line":2766},29,[2768,2772],{"type":23,"tag":130,"props":2769,"children":2770},{"style":1723},[2771],{"type":38,"value":1883},{"type":23,"tag":130,"props":2773,"children":2774},{"style":1754},[2775],{"type":38,"value":2776},"--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web\n",{"type":23,"tag":41,"props":2778,"children":2779},{},[2780],{"type":38,"value":2781},"This setup will:",{"type":23,"tag":73,"props":2783,"children":2784},{},[2785,2794,2803,2808,2825,2834],{"type":23,"tag":77,"props":2786,"children":2787},{},[2788],{"type":23,"tag":53,"props":2789,"children":2791},{"href":2790},"https://doc.traefik.io/traefik/reference/install-configuration/providers/docker/",[2792],{"type":38,"value":2793},"enable the docker provider",{"type":23,"tag":77,"props":2795,"children":2796},{},[2797],{"type":23,"tag":53,"props":2798,"children":2800},{"href":2799},"https://doc.traefik.io/traefik/providers/docker/#exposedbydefault",[2801],{"type":38,"value":2802},"disable the container discovery",{"type":23,"tag":77,"props":2804,"children":2805},{},[2806],{"type":38,"value":2807},"redirect all HTTP traffic to HTTPS",{"type":23,"tag":77,"props":2809,"children":2810},{},[2811],{"type":23,"tag":53,"props":2812,"children":2814},{"href":2813},"https://doc.traefik.io/traefik/https/acme/#httpchallenge",[2815,2817,2823],{"type":38,"value":2816},"configure Let's Encrypt with ",{"type":23,"tag":1707,"props":2818,"children":2820},{"className":2819},[],[2821],{"type":38,"value":2822},"HTTP-01",{"type":38,"value":2824}," challenge",{"type":23,"tag":77,"props":2826,"children":2827},{},[2828],{"type":23,"tag":53,"props":2829,"children":2831},{"href":2830},"https://doc.traefik.io/traefik/routing/entrypoints/#tls",[2832],{"type":38,"value":2833},"apply the TLS configuration to all routes",{"type":23,"tag":77,"props":2835,"children":2836},{},[2837,2843],{"type":23,"tag":53,"props":2838,"children":2840},{"href":2839},"https://docs.docker.com/engine/network/tutorials/host/",[2841],{"type":38,"value":2842},"start the Traefik container bound directly to host's network",{"type":38,"value":2844},", so no addition configuration is required for traefik",{"type":23,"tag":1468,"props":2846,"children":2848},{"id":2847},"the-gitlab-deployment",[2849],{"type":38,"value":2850},"The GitLab deployment",{"type":23,"tag":41,"props":2852,"children":2853},{},[2854,2855,2864],{"type":38,"value":2408},{"type":23,"tag":45,"props":2856,"children":2857},{},[2858],{"type":23,"tag":1707,"props":2859,"children":2861},{"className":2860},[],[2862],{"type":38,"value":2863},"\u003Cgitlab.example.com>",{"type":38,"value":2865}," with your own domain.",{"type":23,"tag":41,"props":2867,"children":2868},{},[2869,2871,2877,2879,2888],{"type":38,"value":2870},"Please take a look in the ",{"type":23,"tag":53,"props":2872,"children":2874},{"href":2873},"https://docs.gitlab.com/install/docker/installation/#create-a-directory-for-the-volumes",[2875],{"type":38,"value":2876},"official dokumentation",{"type":38,"value":2878}," about ",{"type":23,"tag":45,"props":2880,"children":2881},{},[2882],{"type":23,"tag":1707,"props":2883,"children":2885},{"className":2884},[],[2886],{"type":38,"value":2887},"GITLAB_HOME",{"type":38,"value":2889}," directory",{"type":23,"tag":1699,"props":2891,"children":2894},{"className":1701,"code":2892,"filename":1703,"highlights":2893,"language":1704,"meta":7,"style":7},"services:\n  gitlab:\n    image: gitlab/gitlab-ce:\u003Cversion>-ce.0\n    container_name: gitlab\n    labels:\n      - \"traefik.enable=true\"\n      - \"traefik.http.routers.gitlab.rule=Host(`\u003Cgitlab.example.com>`)\"\n      - \"traefik.http.routers.gitlab.service=gitlab\"\n      - \"traefik.http.services.gitlab.loadbalancer.server.port=80\"\n    restart: always\n    hostname: 'gitlab.example.com'\n    environment:\n      GITLAB_OMNIBUS_CONFIG: |\n        # Add any other gitlab.rb configuration here, each on its own line\n        external_url '\u003Chttps://gitlab.example.com>'\n        \n        letsencrypt['enable'] = false\n        \n        nginx['listen_port'] = 80\n        nginx['listen_https'] = false\n        nginx['proxy_set_headers'] = {\n          \"X-Forwarded-Proto\" => \"https\",\n          \"X-Forwarded-Ssl\" => \"on\"\n        }\n        \n        gitlab_rails['gitlab_shell_ssh_port'] = 2424\n    ports:\n      - '2424:22'\n    volumes:\n      - '$GITLAB_HOME/config:/etc/gitlab'\n      - '$GITLAB_HOME/logs:/var/log/gitlab'\n      - '$GITLAB_HOME/data:/var/opt/gitlab'\n    shm_size: '256m'\n",[1778,1796,1814,1827,1846,1943,1969,2659,2672,2685,2693,2706,2727,2753],[2895],{"type":23,"tag":1707,"props":2896,"children":2897},{"__ignoreMap":7},[2898,2909,2920,2936,2951,2964,2977,2990,3003,3016,3031,3047,3058,3073,3080,3088,3096,3105,3112,3121,3130,3139,3148,3157,3166,3173,3182,3193,3206,3217,3229,3241,3253],{"type":23,"tag":130,"props":2899,"children":2900},{"class":1712,"line":1713},[2901,2905],{"type":23,"tag":130,"props":2902,"children":2903},{"style":1717},[2904],{"type":38,"value":1720},{"type":23,"tag":130,"props":2906,"children":2907},{"style":1723},[2908],{"type":38,"value":1726},{"type":23,"tag":130,"props":2910,"children":2911},{"class":1712,"line":1528},[2912,2916],{"type":23,"tag":130,"props":2913,"children":2914},{"style":1717},[2915],{"type":38,"value":1734},{"type":23,"tag":130,"props":2917,"children":2918},{"style":1723},[2919],{"type":38,"value":1726},{"type":23,"tag":130,"props":2921,"children":2922},{"class":1712,"line":1535},[2923,2927,2931],{"type":23,"tag":130,"props":2924,"children":2925},{"style":1717},[2926],{"type":38,"value":1746},{"type":23,"tag":130,"props":2928,"children":2929},{"style":1723},[2930],{"type":38,"value":1751},{"type":23,"tag":130,"props":2932,"children":2933},{"style":1754},[2934],{"type":38,"value":2935},"gitlab/gitlab-ce:\u003Cversion>-ce.0\n",{"type":23,"tag":130,"props":2937,"children":2938},{"class":1712,"line":1760},[2939,2943,2947],{"type":23,"tag":130,"props":2940,"children":2941},{"style":1717},[2942],{"type":38,"value":1766},{"type":23,"tag":130,"props":2944,"children":2945},{"style":1723},[2946],{"type":38,"value":1751},{"type":23,"tag":130,"props":2948,"children":2949},{"style":1754},[2950],{"type":38,"value":1775},{"type":23,"tag":130,"props":2952,"children":2954},{"class":2953,"line":1778},[1712,2273],[2955,2960],{"type":23,"tag":130,"props":2956,"children":2957},{"style":1717},[2958],{"type":38,"value":2959},"    labels",{"type":23,"tag":130,"props":2961,"children":2962},{"style":1723},[2963],{"type":38,"value":1726},{"type":23,"tag":130,"props":2965,"children":2967},{"class":2966,"line":1796},[1712,2273],[2968,2972],{"type":23,"tag":130,"props":2969,"children":2970},{"style":1723},[2971],{"type":38,"value":1883},{"type":23,"tag":130,"props":2973,"children":2974},{"style":1754},[2975],{"type":38,"value":2976},"\"traefik.enable=true\"\n",{"type":23,"tag":130,"props":2978,"children":2980},{"class":2979,"line":1814},[1712,2273],[2981,2985],{"type":23,"tag":130,"props":2982,"children":2983},{"style":1723},[2984],{"type":38,"value":1883},{"type":23,"tag":130,"props":2986,"children":2987},{"style":1754},[2988],{"type":38,"value":2989},"\"traefik.http.routers.gitlab.rule=Host(`\u003Cgitlab.example.com>`)\"\n",{"type":23,"tag":130,"props":2991,"children":2993},{"class":2992,"line":1827},[1712,2273],[2994,2998],{"type":23,"tag":130,"props":2995,"children":2996},{"style":1723},[2997],{"type":38,"value":1883},{"type":23,"tag":130,"props":2999,"children":3000},{"style":1754},[3001],{"type":38,"value":3002},"\"traefik.http.routers.gitlab.service=gitlab\"\n",{"type":23,"tag":130,"props":3004,"children":3006},{"class":3005,"line":1846},[1712,2273],[3007,3011],{"type":23,"tag":130,"props":3008,"children":3009},{"style":1723},[3010],{"type":38,"value":1883},{"type":23,"tag":130,"props":3012,"children":3013},{"style":1754},[3014],{"type":38,"value":3015},"\"traefik.http.services.gitlab.loadbalancer.server.port=80\"\n",{"type":23,"tag":130,"props":3017,"children":3018},{"class":1712,"line":1855},[3019,3023,3027],{"type":23,"tag":130,"props":3020,"children":3021},{"style":1717},[3022],{"type":38,"value":1784},{"type":23,"tag":130,"props":3024,"children":3025},{"style":1723},[3026],{"type":38,"value":1751},{"type":23,"tag":130,"props":3028,"children":3029},{"style":1754},[3030],{"type":38,"value":1793},{"type":23,"tag":130,"props":3032,"children":3033},{"class":1712,"line":1864},[3034,3038,3042],{"type":23,"tag":130,"props":3035,"children":3036},{"style":1717},[3037],{"type":38,"value":1802},{"type":23,"tag":130,"props":3039,"children":3040},{"style":1723},[3041],{"type":38,"value":1751},{"type":23,"tag":130,"props":3043,"children":3044},{"style":1754},[3045],{"type":38,"value":3046},"'gitlab.example.com'\n",{"type":23,"tag":130,"props":3048,"children":3049},{"class":1712,"line":1877},[3050,3054],{"type":23,"tag":130,"props":3051,"children":3052},{"style":1717},[3053],{"type":38,"value":1820},{"type":23,"tag":130,"props":3055,"children":3056},{"style":1723},[3057],{"type":38,"value":1726},{"type":23,"tag":130,"props":3059,"children":3060},{"class":1712,"line":1891},[3061,3065,3069],{"type":23,"tag":130,"props":3062,"children":3063},{"style":1717},[3064],{"type":38,"value":1833},{"type":23,"tag":130,"props":3066,"children":3067},{"style":1723},[3068],{"type":38,"value":1751},{"type":23,"tag":130,"props":3070,"children":3071},{"style":1840},[3072],{"type":38,"value":1843},{"type":23,"tag":130,"props":3074,"children":3075},{"class":1712,"line":1904},[3076],{"type":23,"tag":130,"props":3077,"children":3078},{"style":1754},[3079],{"type":38,"value":1852},{"type":23,"tag":130,"props":3081,"children":3082},{"class":1712,"line":1917},[3083],{"type":23,"tag":130,"props":3084,"children":3085},{"style":1754},[3086],{"type":38,"value":3087},"        external_url '\u003Chttps://gitlab.example.com>'\n",{"type":23,"tag":130,"props":3089,"children":3090},{"class":1712,"line":1930},[3091],{"type":23,"tag":130,"props":3092,"children":3093},{"style":1754},[3094],{"type":38,"value":3095},"        \n",{"type":23,"tag":130,"props":3097,"children":3099},{"class":3098,"line":1943},[1712,2273],[3100],{"type":23,"tag":130,"props":3101,"children":3102},{"style":1754},[3103],{"type":38,"value":3104},"        letsencrypt['enable'] = false\n",{"type":23,"tag":130,"props":3106,"children":3107},{"class":1712,"line":1956},[3108],{"type":23,"tag":130,"props":3109,"children":3110},{"style":1754},[3111],{"type":38,"value":3095},{"type":23,"tag":130,"props":3113,"children":3115},{"class":3114,"line":1969},[1712,2273],[3116],{"type":23,"tag":130,"props":3117,"children":3118},{"style":1754},[3119],{"type":38,"value":3120},"        nginx['listen_port'] = 80\n",{"type":23,"tag":130,"props":3122,"children":3124},{"class":3123,"line":2659},[1712,2273],[3125],{"type":23,"tag":130,"props":3126,"children":3127},{"style":1754},[3128],{"type":38,"value":3129},"        nginx['listen_https'] = false\n",{"type":23,"tag":130,"props":3131,"children":3133},{"class":3132,"line":2672},[1712,2273],[3134],{"type":23,"tag":130,"props":3135,"children":3136},{"style":1754},[3137],{"type":38,"value":3138},"        nginx['proxy_set_headers'] = {\n",{"type":23,"tag":130,"props":3140,"children":3142},{"class":3141,"line":2685},[1712,2273],[3143],{"type":23,"tag":130,"props":3144,"children":3145},{"style":1754},[3146],{"type":38,"value":3147},"          \"X-Forwarded-Proto\" => \"https\",\n",{"type":23,"tag":130,"props":3149,"children":3151},{"class":3150,"line":2693},[1712,2273],[3152],{"type":23,"tag":130,"props":3153,"children":3154},{"style":1754},[3155],{"type":38,"value":3156},"          \"X-Forwarded-Ssl\" => \"on\"\n",{"type":23,"tag":130,"props":3158,"children":3160},{"class":3159,"line":2706},[1712,2273],[3161],{"type":23,"tag":130,"props":3162,"children":3163},{"style":1754},[3164],{"type":38,"value":3165},"        }\n",{"type":23,"tag":130,"props":3167,"children":3168},{"class":1712,"line":2719},[3169],{"type":23,"tag":130,"props":3170,"children":3171},{"style":1754},[3172],{"type":38,"value":3095},{"type":23,"tag":130,"props":3174,"children":3176},{"class":3175,"line":2727},[1712,2273],[3177],{"type":23,"tag":130,"props":3178,"children":3179},{"style":1754},[3180],{"type":38,"value":3181},"        gitlab_rails['gitlab_shell_ssh_port'] = 2424\n",{"type":23,"tag":130,"props":3183,"children":3184},{"class":1712,"line":2740},[3185,3189],{"type":23,"tag":130,"props":3186,"children":3187},{"style":1717},[3188],{"type":38,"value":1870},{"type":23,"tag":130,"props":3190,"children":3191},{"style":1723},[3192],{"type":38,"value":1726},{"type":23,"tag":130,"props":3194,"children":3196},{"class":3195,"line":2753},[1712,2273],[3197,3201],{"type":23,"tag":130,"props":3198,"children":3199},{"style":1723},[3200],{"type":38,"value":1883},{"type":23,"tag":130,"props":3202,"children":3203},{"style":1754},[3204],{"type":38,"value":3205},"'2424:22'\n",{"type":23,"tag":130,"props":3207,"children":3208},{"class":1712,"line":2766},[3209,3213],{"type":23,"tag":130,"props":3210,"children":3211},{"style":1717},[3212],{"type":38,"value":1923},{"type":23,"tag":130,"props":3214,"children":3215},{"style":1723},[3216],{"type":38,"value":1726},{"type":23,"tag":130,"props":3218,"children":3220},{"class":1712,"line":3219},30,[3221,3225],{"type":23,"tag":130,"props":3222,"children":3223},{"style":1723},[3224],{"type":38,"value":1883},{"type":23,"tag":130,"props":3226,"children":3227},{"style":1754},[3228],{"type":38,"value":1940},{"type":23,"tag":130,"props":3230,"children":3232},{"class":1712,"line":3231},31,[3233,3237],{"type":23,"tag":130,"props":3234,"children":3235},{"style":1723},[3236],{"type":38,"value":1883},{"type":23,"tag":130,"props":3238,"children":3239},{"style":1754},[3240],{"type":38,"value":1953},{"type":23,"tag":130,"props":3242,"children":3244},{"class":1712,"line":3243},32,[3245,3249],{"type":23,"tag":130,"props":3246,"children":3247},{"style":1723},[3248],{"type":38,"value":1883},{"type":23,"tag":130,"props":3250,"children":3251},{"style":1754},[3252],{"type":38,"value":1966},{"type":23,"tag":130,"props":3254,"children":3256},{"class":1712,"line":3255},33,[3257,3261,3265],{"type":23,"tag":130,"props":3258,"children":3259},{"style":1717},[3260],{"type":38,"value":1975},{"type":23,"tag":130,"props":3262,"children":3263},{"style":1723},[3264],{"type":38,"value":1751},{"type":23,"tag":130,"props":3266,"children":3267},{"style":1754},[3268],{"type":38,"value":1984},{"type":23,"tag":41,"props":3270,"children":3271},{},[3272],{"type":38,"value":2781},{"type":23,"tag":73,"props":3274,"children":3275},{},[3276,3281,3286,3291,3296],{"type":23,"tag":77,"props":3277,"children":3278},{},[3279],{"type":38,"value":3280},"disable the Let's Encrypt",{"type":23,"tag":77,"props":3282,"children":3283},{},[3284],{"type":38,"value":3285},"disable listening on https and listen on port 80",{"type":23,"tag":77,"props":3287,"children":3288},{},[3289],{"type":38,"value":3290},"set the required proxy headers",{"type":23,"tag":77,"props":3292,"children":3293},{},[3294],{"type":38,"value":3295},"change the ssh port to 2424",{"type":23,"tag":77,"props":3297,"children":3298},{},[3299,3301,3307],{"type":38,"value":3300},"instruct Traefik to route all traffic for ",{"type":23,"tag":1707,"props":3302,"children":3304},{"className":3303},[],[3305],{"type":38,"value":3306},"gitlab.example.com",{"type":38,"value":3308}," to port 80 of the container",{"type":23,"tag":145,"props":3310,"children":3311},{},[],{"type":23,"tag":41,"props":3313,"children":3314},{},[3315],{"type":23,"tag":130,"props":3316,"children":3319},{"className":3317},[3318],"text-h2",[3320],{"type":38,"value":3321},"That's it!",{"type":23,"tag":145,"props":3323,"children":3324},{},[],{"type":23,"tag":149,"props":3326,"children":3327},{},[],{"type":23,"tag":528,"props":3329,"children":3331},{"id":3330},"gitlab-container-registry",[3332],{"type":38,"value":3333},"GitLab Container registry",{"type":23,"tag":41,"props":3335,"children":3336},{},[3337,3339],{"type":38,"value":3338},"When you got so far, you probably also want to set up the ",{"type":23,"tag":53,"props":3340,"children":3342},{"href":3341},"https://docs.gitlab.com/administration/packages/container_registry/",[3343],{"type":38,"value":3344},"container registry",{"type":23,"tag":1468,"props":3346,"children":3348},{"id":3347},"configure-container-registry-under-its-own-domain",[3349],{"type":23,"tag":53,"props":3350,"children":3352},{"href":3351},"https://docs.gitlab.com/administration/packages/container_registry/#configure-container-registry-under-its-own-domain",[3353],{"type":38,"value":3354},"Configure container registry under its own domain",{"type":23,"tag":41,"props":3356,"children":3357},{},[3358,3360,3366],{"type":38,"value":3359},"This setup is easy. We just need to set the ",{"type":23,"tag":1707,"props":3361,"children":3363},{"className":3362},[],[3364],{"type":38,"value":3365},"registry_external_url",{"type":38,"value":3367}," and instruct Traefik where to route the requests",{"type":23,"tag":145,"props":3369,"children":3370},{},[],{"type":23,"tag":3372,"props":3373,"children":3375},"h5",{"id":3374},"update-the-gitlab-config",[3376],{"type":38,"value":3377},"Update the GitLab config",{"type":23,"tag":1699,"props":3379,"children":3382},{"className":1701,"code":3380,"filename":1703,"highlights":3381,"language":1704,"meta":7,"style":7},"services:\n  gitlab:\n    image: gitlab/gitlab-ce:\u003Cversion>-ce.0\n    container_name: gitlab\n    labels:\n      - \"traefik.enable=true\"\n      - \"traefik.http.routers.gitlab.rule=Host(`\u003Cgitlab.example.com>`)\"\n      - \"traefik.http.routers.gitlab.service=gitlab\"\n      - \"traefik.http.services.gitlab.loadbalancer.server.port=80\"\n      - \"traefik.http.routers.container-registry.rule=Host(`registry.gitlab.example.com`)\"\n      - \"traefik.http.services.container-registry.loadbalancer.server.port=5000\"\n    restart: always\n    hostname: 'gitlab.example.com'\n    environment:\n      GITLAB_OMNIBUS_CONFIG: |\n        # Add any other gitlab.rb configuration here, each on its own line\n        external_url '\u003Chttps://gitlab.example.com>'\n\n        letsencrypt['enable'] = false\n\n        nginx['listen_port'] = 80\n        nginx['listen_https'] = false\n        nginx['proxy_set_headers'] = {\n          \"X-Forwarded-Proto\" => \"https\",\n          \"X-Forwarded-Ssl\" => \"on\"\n        }\n\n        gitlab_rails['gitlab_shell_ssh_port'] = 2424\n\n        registry_external_url '\u003Chttps://registry.gitlab.example.com>'\n        registry_nginx['enable'] = false\n    ports:\n      - '2424:22'\n    volumes:\n      - '$GITLAB_HOME/config:/etc/gitlab'\n      - '$GITLAB_HOME/logs:/var/log/gitlab'\n      - '$GITLAB_HOME/data:/var/opt/gitlab'\n    shm_size: '256m'\n",[1855,1864,3219,3231],[3383],{"type":23,"tag":1707,"props":3384,"children":3385},{"__ignoreMap":7},[3386,3397,3408,3423,3438,3449,3460,3471,3482,3493,3506,3519,3534,3549,3560,3575,3582,3589,3596,3603,3610,3617,3624,3631,3638,3645,3652,3659,3666,3673,3682,3691,3702,3713,3725,3737,3749,3761],{"type":23,"tag":130,"props":3387,"children":3388},{"class":1712,"line":1713},[3389,3393],{"type":23,"tag":130,"props":3390,"children":3391},{"style":1717},[3392],{"type":38,"value":1720},{"type":23,"tag":130,"props":3394,"children":3395},{"style":1723},[3396],{"type":38,"value":1726},{"type":23,"tag":130,"props":3398,"children":3399},{"class":1712,"line":1528},[3400,3404],{"type":23,"tag":130,"props":3401,"children":3402},{"style":1717},[3403],{"type":38,"value":1734},{"type":23,"tag":130,"props":3405,"children":3406},{"style":1723},[3407],{"type":38,"value":1726},{"type":23,"tag":130,"props":3409,"children":3410},{"class":1712,"line":1535},[3411,3415,3419],{"type":23,"tag":130,"props":3412,"children":3413},{"style":1717},[3414],{"type":38,"value":1746},{"type":23,"tag":130,"props":3416,"children":3417},{"style":1723},[3418],{"type":38,"value":1751},{"type":23,"tag":130,"props":3420,"children":3421},{"style":1754},[3422],{"type":38,"value":2935},{"type":23,"tag":130,"props":3424,"children":3425},{"class":1712,"line":1760},[3426,3430,3434],{"type":23,"tag":130,"props":3427,"children":3428},{"style":1717},[3429],{"type":38,"value":1766},{"type":23,"tag":130,"props":3431,"children":3432},{"style":1723},[3433],{"type":38,"value":1751},{"type":23,"tag":130,"props":3435,"children":3436},{"style":1754},[3437],{"type":38,"value":1775},{"type":23,"tag":130,"props":3439,"children":3440},{"class":1712,"line":1778},[3441,3445],{"type":23,"tag":130,"props":3442,"children":3443},{"style":1717},[3444],{"type":38,"value":2959},{"type":23,"tag":130,"props":3446,"children":3447},{"style":1723},[3448],{"type":38,"value":1726},{"type":23,"tag":130,"props":3450,"children":3451},{"class":1712,"line":1796},[3452,3456],{"type":23,"tag":130,"props":3453,"children":3454},{"style":1723},[3455],{"type":38,"value":1883},{"type":23,"tag":130,"props":3457,"children":3458},{"style":1754},[3459],{"type":38,"value":2976},{"type":23,"tag":130,"props":3461,"children":3462},{"class":1712,"line":1814},[3463,3467],{"type":23,"tag":130,"props":3464,"children":3465},{"style":1723},[3466],{"type":38,"value":1883},{"type":23,"tag":130,"props":3468,"children":3469},{"style":1754},[3470],{"type":38,"value":2989},{"type":23,"tag":130,"props":3472,"children":3473},{"class":1712,"line":1827},[3474,3478],{"type":23,"tag":130,"props":3475,"children":3476},{"style":1723},[3477],{"type":38,"value":1883},{"type":23,"tag":130,"props":3479,"children":3480},{"style":1754},[3481],{"type":38,"value":3002},{"type":23,"tag":130,"props":3483,"children":3484},{"class":1712,"line":1846},[3485,3489],{"type":23,"tag":130,"props":3486,"children":3487},{"style":1723},[3488],{"type":38,"value":1883},{"type":23,"tag":130,"props":3490,"children":3491},{"style":1754},[3492],{"type":38,"value":3015},{"type":23,"tag":130,"props":3494,"children":3496},{"class":3495,"line":1855},[1712,2273],[3497,3501],{"type":23,"tag":130,"props":3498,"children":3499},{"style":1723},[3500],{"type":38,"value":1883},{"type":23,"tag":130,"props":3502,"children":3503},{"style":1754},[3504],{"type":38,"value":3505},"\"traefik.http.routers.container-registry.rule=Host(`registry.gitlab.example.com`)\"\n",{"type":23,"tag":130,"props":3507,"children":3509},{"class":3508,"line":1864},[1712,2273],[3510,3514],{"type":23,"tag":130,"props":3511,"children":3512},{"style":1723},[3513],{"type":38,"value":1883},{"type":23,"tag":130,"props":3515,"children":3516},{"style":1754},[3517],{"type":38,"value":3518},"\"traefik.http.services.container-registry.loadbalancer.server.port=5000\"\n",{"type":23,"tag":130,"props":3520,"children":3521},{"class":1712,"line":1877},[3522,3526,3530],{"type":23,"tag":130,"props":3523,"children":3524},{"style":1717},[3525],{"type":38,"value":1784},{"type":23,"tag":130,"props":3527,"children":3528},{"style":1723},[3529],{"type":38,"value":1751},{"type":23,"tag":130,"props":3531,"children":3532},{"style":1754},[3533],{"type":38,"value":1793},{"type":23,"tag":130,"props":3535,"children":3536},{"class":1712,"line":1891},[3537,3541,3545],{"type":23,"tag":130,"props":3538,"children":3539},{"style":1717},[3540],{"type":38,"value":1802},{"type":23,"tag":130,"props":3542,"children":3543},{"style":1723},[3544],{"type":38,"value":1751},{"type":23,"tag":130,"props":3546,"children":3547},{"style":1754},[3548],{"type":38,"value":3046},{"type":23,"tag":130,"props":3550,"children":3551},{"class":1712,"line":1904},[3552,3556],{"type":23,"tag":130,"props":3553,"children":3554},{"style":1717},[3555],{"type":38,"value":1820},{"type":23,"tag":130,"props":3557,"children":3558},{"style":1723},[3559],{"type":38,"value":1726},{"type":23,"tag":130,"props":3561,"children":3562},{"class":1712,"line":1917},[3563,3567,3571],{"type":23,"tag":130,"props":3564,"children":3565},{"style":1717},[3566],{"type":38,"value":1833},{"type":23,"tag":130,"props":3568,"children":3569},{"style":1723},[3570],{"type":38,"value":1751},{"type":23,"tag":130,"props":3572,"children":3573},{"style":1840},[3574],{"type":38,"value":1843},{"type":23,"tag":130,"props":3576,"children":3577},{"class":1712,"line":1930},[3578],{"type":23,"tag":130,"props":3579,"children":3580},{"style":1754},[3581],{"type":38,"value":1852},{"type":23,"tag":130,"props":3583,"children":3584},{"class":1712,"line":1943},[3585],{"type":23,"tag":130,"props":3586,"children":3587},{"style":1754},[3588],{"type":38,"value":3087},{"type":23,"tag":130,"props":3590,"children":3591},{"class":1712,"line":1956},[3592],{"type":23,"tag":130,"props":3593,"children":3594},{"emptyLinePlaceholder":2457},[3595],{"type":38,"value":2460},{"type":23,"tag":130,"props":3597,"children":3598},{"class":1712,"line":1969},[3599],{"type":23,"tag":130,"props":3600,"children":3601},{"style":1754},[3602],{"type":38,"value":3104},{"type":23,"tag":130,"props":3604,"children":3605},{"class":1712,"line":2659},[3606],{"type":23,"tag":130,"props":3607,"children":3608},{"emptyLinePlaceholder":2457},[3609],{"type":38,"value":2460},{"type":23,"tag":130,"props":3611,"children":3612},{"class":1712,"line":2672},[3613],{"type":23,"tag":130,"props":3614,"children":3615},{"style":1754},[3616],{"type":38,"value":3120},{"type":23,"tag":130,"props":3618,"children":3619},{"class":1712,"line":2685},[3620],{"type":23,"tag":130,"props":3621,"children":3622},{"style":1754},[3623],{"type":38,"value":3129},{"type":23,"tag":130,"props":3625,"children":3626},{"class":1712,"line":2693},[3627],{"type":23,"tag":130,"props":3628,"children":3629},{"style":1754},[3630],{"type":38,"value":3138},{"type":23,"tag":130,"props":3632,"children":3633},{"class":1712,"line":2706},[3634],{"type":23,"tag":130,"props":3635,"children":3636},{"style":1754},[3637],{"type":38,"value":3147},{"type":23,"tag":130,"props":3639,"children":3640},{"class":1712,"line":2719},[3641],{"type":23,"tag":130,"props":3642,"children":3643},{"style":1754},[3644],{"type":38,"value":3156},{"type":23,"tag":130,"props":3646,"children":3647},{"class":1712,"line":2727},[3648],{"type":23,"tag":130,"props":3649,"children":3650},{"style":1754},[3651],{"type":38,"value":3165},{"type":23,"tag":130,"props":3653,"children":3654},{"class":1712,"line":2740},[3655],{"type":23,"tag":130,"props":3656,"children":3657},{"emptyLinePlaceholder":2457},[3658],{"type":38,"value":2460},{"type":23,"tag":130,"props":3660,"children":3661},{"class":1712,"line":2753},[3662],{"type":23,"tag":130,"props":3663,"children":3664},{"style":1754},[3665],{"type":38,"value":3181},{"type":23,"tag":130,"props":3667,"children":3668},{"class":1712,"line":2766},[3669],{"type":23,"tag":130,"props":3670,"children":3671},{"emptyLinePlaceholder":2457},[3672],{"type":38,"value":2460},{"type":23,"tag":130,"props":3674,"children":3676},{"class":3675,"line":3219},[1712,2273],[3677],{"type":23,"tag":130,"props":3678,"children":3679},{"style":1754},[3680],{"type":38,"value":3681},"        registry_external_url '\u003Chttps://registry.gitlab.example.com>'\n",{"type":23,"tag":130,"props":3683,"children":3685},{"class":3684,"line":3231},[1712,2273],[3686],{"type":23,"tag":130,"props":3687,"children":3688},{"style":1754},[3689],{"type":38,"value":3690},"        registry_nginx['enable'] = false\n",{"type":23,"tag":130,"props":3692,"children":3693},{"class":1712,"line":3243},[3694,3698],{"type":23,"tag":130,"props":3695,"children":3696},{"style":1717},[3697],{"type":38,"value":1870},{"type":23,"tag":130,"props":3699,"children":3700},{"style":1723},[3701],{"type":38,"value":1726},{"type":23,"tag":130,"props":3703,"children":3704},{"class":1712,"line":3255},[3705,3709],{"type":23,"tag":130,"props":3706,"children":3707},{"style":1723},[3708],{"type":38,"value":1883},{"type":23,"tag":130,"props":3710,"children":3711},{"style":1754},[3712],{"type":38,"value":3205},{"type":23,"tag":130,"props":3714,"children":3716},{"class":1712,"line":3715},34,[3717,3721],{"type":23,"tag":130,"props":3718,"children":3719},{"style":1717},[3720],{"type":38,"value":1923},{"type":23,"tag":130,"props":3722,"children":3723},{"style":1723},[3724],{"type":38,"value":1726},{"type":23,"tag":130,"props":3726,"children":3728},{"class":1712,"line":3727},35,[3729,3733],{"type":23,"tag":130,"props":3730,"children":3731},{"style":1723},[3732],{"type":38,"value":1883},{"type":23,"tag":130,"props":3734,"children":3735},{"style":1754},[3736],{"type":38,"value":1940},{"type":23,"tag":130,"props":3738,"children":3740},{"class":1712,"line":3739},36,[3741,3745],{"type":23,"tag":130,"props":3742,"children":3743},{"style":1723},[3744],{"type":38,"value":1883},{"type":23,"tag":130,"props":3746,"children":3747},{"style":1754},[3748],{"type":38,"value":1953},{"type":23,"tag":130,"props":3750,"children":3752},{"class":1712,"line":3751},37,[3753,3757],{"type":23,"tag":130,"props":3754,"children":3755},{"style":1723},[3756],{"type":38,"value":1883},{"type":23,"tag":130,"props":3758,"children":3759},{"style":1754},[3760],{"type":38,"value":1966},{"type":23,"tag":130,"props":3762,"children":3764},{"class":1712,"line":3763},38,[3765,3769,3773],{"type":23,"tag":130,"props":3766,"children":3767},{"style":1717},[3768],{"type":38,"value":1975},{"type":23,"tag":130,"props":3770,"children":3771},{"style":1723},[3772],{"type":38,"value":1751},{"type":23,"tag":130,"props":3774,"children":3775},{"style":1754},[3776],{"type":38,"value":1984},{"type":23,"tag":41,"props":3778,"children":3779},{},[3780],{"type":38,"value":2781},{"type":23,"tag":73,"props":3782,"children":3783},{},[3784,3789,3794],{"type":23,"tag":77,"props":3785,"children":3786},{},[3787],{"type":38,"value":3788},"set the registry external url",{"type":23,"tag":77,"props":3790,"children":3791},{},[3792],{"type":38,"value":3793},"disable the nginx for the registry",{"type":23,"tag":77,"props":3795,"children":3796},{},[3797,3798,3804],{"type":38,"value":3300},{"type":23,"tag":1707,"props":3799,"children":3801},{"className":3800},[],[3802],{"type":38,"value":3803},"registry.gitlab.example.com",{"type":38,"value":3805}," to port 5000 of the container",{"type":23,"tag":145,"props":3807,"children":3808},{},[],{"type":23,"tag":149,"props":3810,"children":3811},{},[],{"type":23,"tag":1468,"props":3813,"children":3815},{"id":3814},"configure-container-registry-under-an-existing-gitlab-domain",[3816],{"type":23,"tag":53,"props":3817,"children":3819},{"href":3818},"https://docs.gitlab.com/administration/packages/container_registry/#configure-container-registry-under-an-existing-gitlab-domain",[3820],{"type":38,"value":3821},"Configure container registry under an existing GitLab domain",{"type":23,"tag":3372,"props":3823,"children":3825},{"id":3824},"update-the-traefik-config",[3826],{"type":38,"value":3827},"Update the Traefik config",{"type":23,"tag":1699,"props":3829,"children":3832},{"className":1701,"code":3830,"filename":2423,"highlights":3831,"language":1704,"meta":7,"style":7},"volumes:\n  letsencrypt:\n\nservices:\n  traefik:\n    image: traefik:3\n    container_name: traefik\n    restart: always\n    network_mode: host\n    volumes:\n      - /var/run/docker.sock:/var/run/docker.sock:ro\n      - letsencrypt:/letsencrypt\n    command:\n      - --log.level=INFO\n\n      - --entrypoints.web.address=:80\n      - --entrypoints.web.http.redirections.entrypoint.to=websecure\n      - --entrypoints.web.http.redirections.entrypoint.scheme=https\n\n      - --entrypoints.websecure.address=:443\n      - --entrypoints.websecure.http.tls.certresolver=letsencrypt\n        \n      - --entrypoints.container-registry.address=:5050\n      - --entrypoints.container-registry.http.tls.certresolver=letsencrypt\n\n      - --providers.docker=true\n      - --providers.docker.exposedByDefault=false\n\n      - --certificatesresolvers.letsencrypt.acme.email=\u003Cinfo@example.com>\n      - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json\n      - --certificatesresolvers.letsencrypt.acme.httpchallenge=true\n      - --certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web\n",[2693,2706],[3833],{"type":23,"tag":1707,"props":3834,"children":3835},{"__ignoreMap":7},[3836,3847,3858,3865,3876,3887,3902,3917,3932,3947,3958,3969,3980,3991,4002,4009,4020,4031,4042,4049,4060,4071,4078,4091,4104,4111,4122,4133,4140,4151,4162,4173],{"type":23,"tag":130,"props":3837,"children":3838},{"class":1712,"line":1713},[3839,3843],{"type":23,"tag":130,"props":3840,"children":3841},{"style":1717},[3842],{"type":38,"value":2435},{"type":23,"tag":130,"props":3844,"children":3845},{"style":1723},[3846],{"type":38,"value":1726},{"type":23,"tag":130,"props":3848,"children":3849},{"class":1712,"line":1528},[3850,3854],{"type":23,"tag":130,"props":3851,"children":3852},{"style":1717},[3853],{"type":38,"value":2447},{"type":23,"tag":130,"props":3855,"children":3856},{"style":1723},[3857],{"type":38,"value":1726},{"type":23,"tag":130,"props":3859,"children":3860},{"class":1712,"line":1535},[3861],{"type":23,"tag":130,"props":3862,"children":3863},{"emptyLinePlaceholder":2457},[3864],{"type":38,"value":2460},{"type":23,"tag":130,"props":3866,"children":3867},{"class":1712,"line":1760},[3868,3872],{"type":23,"tag":130,"props":3869,"children":3870},{"style":1717},[3871],{"type":38,"value":1720},{"type":23,"tag":130,"props":3873,"children":3874},{"style":1723},[3875],{"type":38,"value":1726},{"type":23,"tag":130,"props":3877,"children":3878},{"class":1712,"line":1778},[3879,3883],{"type":23,"tag":130,"props":3880,"children":3881},{"style":1717},[3882],{"type":38,"value":2479},{"type":23,"tag":130,"props":3884,"children":3885},{"style":1723},[3886],{"type":38,"value":1726},{"type":23,"tag":130,"props":3888,"children":3889},{"class":1712,"line":1796},[3890,3894,3898],{"type":23,"tag":130,"props":3891,"children":3892},{"style":1717},[3893],{"type":38,"value":1746},{"type":23,"tag":130,"props":3895,"children":3896},{"style":1723},[3897],{"type":38,"value":1751},{"type":23,"tag":130,"props":3899,"children":3900},{"style":1754},[3901],{"type":38,"value":2499},{"type":23,"tag":130,"props":3903,"children":3904},{"class":1712,"line":1814},[3905,3909,3913],{"type":23,"tag":130,"props":3906,"children":3907},{"style":1717},[3908],{"type":38,"value":1766},{"type":23,"tag":130,"props":3910,"children":3911},{"style":1723},[3912],{"type":38,"value":1751},{"type":23,"tag":130,"props":3914,"children":3915},{"style":1754},[3916],{"type":38,"value":2515},{"type":23,"tag":130,"props":3918,"children":3919},{"class":1712,"line":1827},[3920,3924,3928],{"type":23,"tag":130,"props":3921,"children":3922},{"style":1717},[3923],{"type":38,"value":1784},{"type":23,"tag":130,"props":3925,"children":3926},{"style":1723},[3927],{"type":38,"value":1751},{"type":23,"tag":130,"props":3929,"children":3930},{"style":1754},[3931],{"type":38,"value":1793},{"type":23,"tag":130,"props":3933,"children":3934},{"class":1712,"line":1846},[3935,3939,3943],{"type":23,"tag":130,"props":3936,"children":3937},{"style":1717},[3938],{"type":38,"value":2538},{"type":23,"tag":130,"props":3940,"children":3941},{"style":1723},[3942],{"type":38,"value":1751},{"type":23,"tag":130,"props":3944,"children":3945},{"style":1754},[3946],{"type":38,"value":2547},{"type":23,"tag":130,"props":3948,"children":3949},{"class":1712,"line":1855},[3950,3954],{"type":23,"tag":130,"props":3951,"children":3952},{"style":1717},[3953],{"type":38,"value":1923},{"type":23,"tag":130,"props":3955,"children":3956},{"style":1723},[3957],{"type":38,"value":1726},{"type":23,"tag":130,"props":3959,"children":3960},{"class":1712,"line":1864},[3961,3965],{"type":23,"tag":130,"props":3962,"children":3963},{"style":1723},[3964],{"type":38,"value":1883},{"type":23,"tag":130,"props":3966,"children":3967},{"style":1754},[3968],{"type":38,"value":2570},{"type":23,"tag":130,"props":3970,"children":3971},{"class":1712,"line":1877},[3972,3976],{"type":23,"tag":130,"props":3973,"children":3974},{"style":1723},[3975],{"type":38,"value":1883},{"type":23,"tag":130,"props":3977,"children":3978},{"style":1754},[3979],{"type":38,"value":2582},{"type":23,"tag":130,"props":3981,"children":3982},{"class":1712,"line":1891},[3983,3987],{"type":23,"tag":130,"props":3984,"children":3985},{"style":1717},[3986],{"type":38,"value":2590},{"type":23,"tag":130,"props":3988,"children":3989},{"style":1723},[3990],{"type":38,"value":1726},{"type":23,"tag":130,"props":3992,"children":3993},{"class":1712,"line":1904},[3994,3998],{"type":23,"tag":130,"props":3995,"children":3996},{"style":1723},[3997],{"type":38,"value":1883},{"type":23,"tag":130,"props":3999,"children":4000},{"style":1754},[4001],{"type":38,"value":2606},{"type":23,"tag":130,"props":4003,"children":4004},{"class":1712,"line":1917},[4005],{"type":23,"tag":130,"props":4006,"children":4007},{"emptyLinePlaceholder":2457},[4008],{"type":38,"value":2460},{"type":23,"tag":130,"props":4010,"children":4011},{"class":1712,"line":1930},[4012,4016],{"type":23,"tag":130,"props":4013,"children":4014},{"style":1723},[4015],{"type":38,"value":1883},{"type":23,"tag":130,"props":4017,"children":4018},{"style":1754},[4019],{"type":38,"value":2625},{"type":23,"tag":130,"props":4021,"children":4022},{"class":1712,"line":1943},[4023,4027],{"type":23,"tag":130,"props":4024,"children":4025},{"style":1723},[4026],{"type":38,"value":1883},{"type":23,"tag":130,"props":4028,"children":4029},{"style":1754},[4030],{"type":38,"value":2637},{"type":23,"tag":130,"props":4032,"children":4033},{"class":1712,"line":1956},[4034,4038],{"type":23,"tag":130,"props":4035,"children":4036},{"style":1723},[4037],{"type":38,"value":1883},{"type":23,"tag":130,"props":4039,"children":4040},{"style":1754},[4041],{"type":38,"value":2649},{"type":23,"tag":130,"props":4043,"children":4044},{"class":1712,"line":1969},[4045],{"type":23,"tag":130,"props":4046,"children":4047},{"emptyLinePlaceholder":2457},[4048],{"type":38,"value":2460},{"type":23,"tag":130,"props":4050,"children":4051},{"class":1712,"line":2659},[4052,4056],{"type":23,"tag":130,"props":4053,"children":4054},{"style":1723},[4055],{"type":38,"value":1883},{"type":23,"tag":130,"props":4057,"children":4058},{"style":1754},[4059],{"type":38,"value":2669},{"type":23,"tag":130,"props":4061,"children":4062},{"class":1712,"line":2672},[4063,4067],{"type":23,"tag":130,"props":4064,"children":4065},{"style":1723},[4066],{"type":38,"value":1883},{"type":23,"tag":130,"props":4068,"children":4069},{"style":1754},[4070],{"type":38,"value":2682},{"type":23,"tag":130,"props":4072,"children":4073},{"class":1712,"line":2685},[4074],{"type":23,"tag":130,"props":4075,"children":4076},{"style":1723},[4077],{"type":38,"value":3095},{"type":23,"tag":130,"props":4079,"children":4081},{"class":4080,"line":2693},[1712,2273],[4082,4086],{"type":23,"tag":130,"props":4083,"children":4084},{"style":1723},[4085],{"type":38,"value":1883},{"type":23,"tag":130,"props":4087,"children":4088},{"style":1754},[4089],{"type":38,"value":4090},"--entrypoints.container-registry.address=:5050\n",{"type":23,"tag":130,"props":4092,"children":4094},{"class":4093,"line":2706},[1712,2273],[4095,4099],{"type":23,"tag":130,"props":4096,"children":4097},{"style":1723},[4098],{"type":38,"value":1883},{"type":23,"tag":130,"props":4100,"children":4101},{"style":1754},[4102],{"type":38,"value":4103},"--entrypoints.container-registry.http.tls.certresolver=letsencrypt\n",{"type":23,"tag":130,"props":4105,"children":4106},{"class":1712,"line":2719},[4107],{"type":23,"tag":130,"props":4108,"children":4109},{"emptyLinePlaceholder":2457},[4110],{"type":38,"value":2460},{"type":23,"tag":130,"props":4112,"children":4113},{"class":1712,"line":2727},[4114,4118],{"type":23,"tag":130,"props":4115,"children":4116},{"style":1723},[4117],{"type":38,"value":1883},{"type":23,"tag":130,"props":4119,"children":4120},{"style":1754},[4121],{"type":38,"value":2703},{"type":23,"tag":130,"props":4123,"children":4124},{"class":1712,"line":2740},[4125,4129],{"type":23,"tag":130,"props":4126,"children":4127},{"style":1723},[4128],{"type":38,"value":1883},{"type":23,"tag":130,"props":4130,"children":4131},{"style":1754},[4132],{"type":38,"value":2716},{"type":23,"tag":130,"props":4134,"children":4135},{"class":1712,"line":2753},[4136],{"type":23,"tag":130,"props":4137,"children":4138},{"emptyLinePlaceholder":2457},[4139],{"type":38,"value":2460},{"type":23,"tag":130,"props":4141,"children":4142},{"class":1712,"line":2766},[4143,4147],{"type":23,"tag":130,"props":4144,"children":4145},{"style":1723},[4146],{"type":38,"value":1883},{"type":23,"tag":130,"props":4148,"children":4149},{"style":1754},[4150],{"type":38,"value":2737},{"type":23,"tag":130,"props":4152,"children":4153},{"class":1712,"line":3219},[4154,4158],{"type":23,"tag":130,"props":4155,"children":4156},{"style":1723},[4157],{"type":38,"value":1883},{"type":23,"tag":130,"props":4159,"children":4160},{"style":1754},[4161],{"type":38,"value":2750},{"type":23,"tag":130,"props":4163,"children":4164},{"class":1712,"line":3231},[4165,4169],{"type":23,"tag":130,"props":4166,"children":4167},{"style":1723},[4168],{"type":38,"value":1883},{"type":23,"tag":130,"props":4170,"children":4171},{"style":1754},[4172],{"type":38,"value":2763},{"type":23,"tag":130,"props":4174,"children":4175},{"class":1712,"line":3243},[4176,4180],{"type":23,"tag":130,"props":4177,"children":4178},{"style":1723},[4179],{"type":38,"value":1883},{"type":23,"tag":130,"props":4181,"children":4182},{"style":1754},[4183],{"type":38,"value":2776},{"type":23,"tag":41,"props":4185,"children":4186},{},[4187],{"type":38,"value":2781},{"type":23,"tag":73,"props":4189,"children":4190},{},[4191,4196],{"type":23,"tag":77,"props":4192,"children":4193},{},[4194],{"type":38,"value":4195},"add a new entry point for the container registry",{"type":23,"tag":77,"props":4197,"children":4198},{},[4199],{"type":38,"value":4200},"apply the TLS configuration to all routes in this entrypoint",{"type":23,"tag":145,"props":4202,"children":4203},{},[],{"type":23,"tag":3372,"props":4205,"children":4207},{"id":4206},"update-the-gitlab-config-1",[4208],{"type":38,"value":3377},{"type":23,"tag":1699,"props":4210,"children":4213},{"className":1701,"code":4211,"filename":1703,"highlights":4212,"language":1704,"meta":7,"style":7},"services:\n  gitlab:\n    image: gitlab/gitlab-ce:\u003Cversion>-ce.0\n    container_name: gitlab\n    labels:\n      - \"traefik.enable=true\"\n      - \"traefik.http.routers.gitlab.rule=Host(`\u003Cgitlab.example.com>`)\"\n      - \"traefik.http.routers.gitlab.entrypoints=web,websecure\"\n      - \"traefik.http.routers.gitlab.service=gitlab\"\n      - \"traefik.http.services.gitlab.loadbalancer.server.port=80\"\n      - \"traefik.http.routers.container-registry.rule=Host(`gitlab.example.com`)\"\n      - \"traefik.http.routers.container-registry.entrypoints=container-registry\"\n      - \"traefik.http.routers.container-registry.service=container-registry\"\n      - \"traefik.http.services.container-registry.loadbalancer.server.port=5000\"\n    restart: always\n    hostname: 'gitlab.example.com'\n    environment:\n      GITLAB_OMNIBUS_CONFIG: |\n        # Add any other gitlab.rb configuration here, each on its own line\n        external_url '\u003Chttps://gitlab.example.com>'\n\n        letsencrypt['enable'] = false\n\n        nginx['listen_port'] = 80\n        nginx['listen_https'] = false\n        nginx['proxy_set_headers'] = {\n          \"X-Forwarded-Proto\" => \"https\",\n          \"X-Forwarded-Ssl\" => \"on\"\n        }\n\n        gitlab_rails['gitlab_shell_ssh_port'] = 2424\n\n        registry_external_url '\u003Chttps://gitlab.example.com:5050>'\n        registry_nginx['enable'] = false\n    ports:\n      - '2424:22'\n    volumes:\n      - '$GITLAB_HOME/config:/etc/gitlab'\n      - '$GITLAB_HOME/logs:/var/log/gitlab'\n      - '$GITLAB_HOME/data:/var/opt/gitlab'\n    shm_size: '256m'\n",[1827,1864,1877,1891,1904,3255],[4214],{"type":23,"tag":1707,"props":4215,"children":4216},{"__ignoreMap":7},[4217,4228,4239,4254,4269,4280,4291,4302,4315,4326,4337,4350,4363,4376,4388,4403,4418,4429,4444,4451,4458,4465,4472,4479,4486,4493,4500,4507,4514,4521,4528,4535,4542,4551,4558,4569,4580,4591,4602,4614,4626],{"type":23,"tag":130,"props":4218,"children":4219},{"class":1712,"line":1713},[4220,4224],{"type":23,"tag":130,"props":4221,"children":4222},{"style":1717},[4223],{"type":38,"value":1720},{"type":23,"tag":130,"props":4225,"children":4226},{"style":1723},[4227],{"type":38,"value":1726},{"type":23,"tag":130,"props":4229,"children":4230},{"class":1712,"line":1528},[4231,4235],{"type":23,"tag":130,"props":4232,"children":4233},{"style":1717},[4234],{"type":38,"value":1734},{"type":23,"tag":130,"props":4236,"children":4237},{"style":1723},[4238],{"type":38,"value":1726},{"type":23,"tag":130,"props":4240,"children":4241},{"class":1712,"line":1535},[4242,4246,4250],{"type":23,"tag":130,"props":4243,"children":4244},{"style":1717},[4245],{"type":38,"value":1746},{"type":23,"tag":130,"props":4247,"children":4248},{"style":1723},[4249],{"type":38,"value":1751},{"type":23,"tag":130,"props":4251,"children":4252},{"style":1754},[4253],{"type":38,"value":2935},{"type":23,"tag":130,"props":4255,"children":4256},{"class":1712,"line":1760},[4257,4261,4265],{"type":23,"tag":130,"props":4258,"children":4259},{"style":1717},[4260],{"type":38,"value":1766},{"type":23,"tag":130,"props":4262,"children":4263},{"style":1723},[4264],{"type":38,"value":1751},{"type":23,"tag":130,"props":4266,"children":4267},{"style":1754},[4268],{"type":38,"value":1775},{"type":23,"tag":130,"props":4270,"children":4271},{"class":1712,"line":1778},[4272,4276],{"type":23,"tag":130,"props":4273,"children":4274},{"style":1717},[4275],{"type":38,"value":2959},{"type":23,"tag":130,"props":4277,"children":4278},{"style":1723},[4279],{"type":38,"value":1726},{"type":23,"tag":130,"props":4281,"children":4282},{"class":1712,"line":1796},[4283,4287],{"type":23,"tag":130,"props":4284,"children":4285},{"style":1723},[4286],{"type":38,"value":1883},{"type":23,"tag":130,"props":4288,"children":4289},{"style":1754},[4290],{"type":38,"value":2976},{"type":23,"tag":130,"props":4292,"children":4293},{"class":1712,"line":1814},[4294,4298],{"type":23,"tag":130,"props":4295,"children":4296},{"style":1723},[4297],{"type":38,"value":1883},{"type":23,"tag":130,"props":4299,"children":4300},{"style":1754},[4301],{"type":38,"value":2989},{"type":23,"tag":130,"props":4303,"children":4305},{"class":4304,"line":1827},[1712,2273],[4306,4310],{"type":23,"tag":130,"props":4307,"children":4308},{"style":1723},[4309],{"type":38,"value":1883},{"type":23,"tag":130,"props":4311,"children":4312},{"style":1754},[4313],{"type":38,"value":4314},"\"traefik.http.routers.gitlab.entrypoints=web,websecure\"\n",{"type":23,"tag":130,"props":4316,"children":4317},{"class":1712,"line":1846},[4318,4322],{"type":23,"tag":130,"props":4319,"children":4320},{"style":1723},[4321],{"type":38,"value":1883},{"type":23,"tag":130,"props":4323,"children":4324},{"style":1754},[4325],{"type":38,"value":3002},{"type":23,"tag":130,"props":4327,"children":4328},{"class":1712,"line":1855},[4329,4333],{"type":23,"tag":130,"props":4330,"children":4331},{"style":1723},[4332],{"type":38,"value":1883},{"type":23,"tag":130,"props":4334,"children":4335},{"style":1754},[4336],{"type":38,"value":3015},{"type":23,"tag":130,"props":4338,"children":4340},{"class":4339,"line":1864},[1712,2273],[4341,4345],{"type":23,"tag":130,"props":4342,"children":4343},{"style":1723},[4344],{"type":38,"value":1883},{"type":23,"tag":130,"props":4346,"children":4347},{"style":1754},[4348],{"type":38,"value":4349},"\"traefik.http.routers.container-registry.rule=Host(`gitlab.example.com`)\"\n",{"type":23,"tag":130,"props":4351,"children":4353},{"class":4352,"line":1877},[1712,2273],[4354,4358],{"type":23,"tag":130,"props":4355,"children":4356},{"style":1723},[4357],{"type":38,"value":1883},{"type":23,"tag":130,"props":4359,"children":4360},{"style":1754},[4361],{"type":38,"value":4362},"\"traefik.http.routers.container-registry.entrypoints=container-registry\"\n",{"type":23,"tag":130,"props":4364,"children":4366},{"class":4365,"line":1891},[1712,2273],[4367,4371],{"type":23,"tag":130,"props":4368,"children":4369},{"style":1723},[4370],{"type":38,"value":1883},{"type":23,"tag":130,"props":4372,"children":4373},{"style":1754},[4374],{"type":38,"value":4375},"\"traefik.http.routers.container-registry.service=container-registry\"\n",{"type":23,"tag":130,"props":4377,"children":4379},{"class":4378,"line":1904},[1712,2273],[4380,4384],{"type":23,"tag":130,"props":4381,"children":4382},{"style":1723},[4383],{"type":38,"value":1883},{"type":23,"tag":130,"props":4385,"children":4386},{"style":1754},[4387],{"type":38,"value":3518},{"type":23,"tag":130,"props":4389,"children":4390},{"class":1712,"line":1917},[4391,4395,4399],{"type":23,"tag":130,"props":4392,"children":4393},{"style":1717},[4394],{"type":38,"value":1784},{"type":23,"tag":130,"props":4396,"children":4397},{"style":1723},[4398],{"type":38,"value":1751},{"type":23,"tag":130,"props":4400,"children":4401},{"style":1754},[4402],{"type":38,"value":1793},{"type":23,"tag":130,"props":4404,"children":4405},{"class":1712,"line":1930},[4406,4410,4414],{"type":23,"tag":130,"props":4407,"children":4408},{"style":1717},[4409],{"type":38,"value":1802},{"type":23,"tag":130,"props":4411,"children":4412},{"style":1723},[4413],{"type":38,"value":1751},{"type":23,"tag":130,"props":4415,"children":4416},{"style":1754},[4417],{"type":38,"value":3046},{"type":23,"tag":130,"props":4419,"children":4420},{"class":1712,"line":1943},[4421,4425],{"type":23,"tag":130,"props":4422,"children":4423},{"style":1717},[4424],{"type":38,"value":1820},{"type":23,"tag":130,"props":4426,"children":4427},{"style":1723},[4428],{"type":38,"value":1726},{"type":23,"tag":130,"props":4430,"children":4431},{"class":1712,"line":1956},[4432,4436,4440],{"type":23,"tag":130,"props":4433,"children":4434},{"style":1717},[4435],{"type":38,"value":1833},{"type":23,"tag":130,"props":4437,"children":4438},{"style":1723},[4439],{"type":38,"value":1751},{"type":23,"tag":130,"props":4441,"children":4442},{"style":1840},[4443],{"type":38,"value":1843},{"type":23,"tag":130,"props":4445,"children":4446},{"class":1712,"line":1969},[4447],{"type":23,"tag":130,"props":4448,"children":4449},{"style":1754},[4450],{"type":38,"value":1852},{"type":23,"tag":130,"props":4452,"children":4453},{"class":1712,"line":2659},[4454],{"type":23,"tag":130,"props":4455,"children":4456},{"style":1754},[4457],{"type":38,"value":3087},{"type":23,"tag":130,"props":4459,"children":4460},{"class":1712,"line":2672},[4461],{"type":23,"tag":130,"props":4462,"children":4463},{"emptyLinePlaceholder":2457},[4464],{"type":38,"value":2460},{"type":23,"tag":130,"props":4466,"children":4467},{"class":1712,"line":2685},[4468],{"type":23,"tag":130,"props":4469,"children":4470},{"style":1754},[4471],{"type":38,"value":3104},{"type":23,"tag":130,"props":4473,"children":4474},{"class":1712,"line":2693},[4475],{"type":23,"tag":130,"props":4476,"children":4477},{"emptyLinePlaceholder":2457},[4478],{"type":38,"value":2460},{"type":23,"tag":130,"props":4480,"children":4481},{"class":1712,"line":2706},[4482],{"type":23,"tag":130,"props":4483,"children":4484},{"style":1754},[4485],{"type":38,"value":3120},{"type":23,"tag":130,"props":4487,"children":4488},{"class":1712,"line":2719},[4489],{"type":23,"tag":130,"props":4490,"children":4491},{"style":1754},[4492],{"type":38,"value":3129},{"type":23,"tag":130,"props":4494,"children":4495},{"class":1712,"line":2727},[4496],{"type":23,"tag":130,"props":4497,"children":4498},{"style":1754},[4499],{"type":38,"value":3138},{"type":23,"tag":130,"props":4501,"children":4502},{"class":1712,"line":2740},[4503],{"type":23,"tag":130,"props":4504,"children":4505},{"style":1754},[4506],{"type":38,"value":3147},{"type":23,"tag":130,"props":4508,"children":4509},{"class":1712,"line":2753},[4510],{"type":23,"tag":130,"props":4511,"children":4512},{"style":1754},[4513],{"type":38,"value":3156},{"type":23,"tag":130,"props":4515,"children":4516},{"class":1712,"line":2766},[4517],{"type":23,"tag":130,"props":4518,"children":4519},{"style":1754},[4520],{"type":38,"value":3165},{"type":23,"tag":130,"props":4522,"children":4523},{"class":1712,"line":3219},[4524],{"type":23,"tag":130,"props":4525,"children":4526},{"emptyLinePlaceholder":2457},[4527],{"type":38,"value":2460},{"type":23,"tag":130,"props":4529,"children":4530},{"class":1712,"line":3231},[4531],{"type":23,"tag":130,"props":4532,"children":4533},{"style":1754},[4534],{"type":38,"value":3181},{"type":23,"tag":130,"props":4536,"children":4537},{"class":1712,"line":3243},[4538],{"type":23,"tag":130,"props":4539,"children":4540},{"emptyLinePlaceholder":2457},[4541],{"type":38,"value":2460},{"type":23,"tag":130,"props":4543,"children":4545},{"class":4544,"line":3255},[1712,2273],[4546],{"type":23,"tag":130,"props":4547,"children":4548},{"style":1754},[4549],{"type":38,"value":4550},"        registry_external_url '\u003Chttps://gitlab.example.com:5050>'\n",{"type":23,"tag":130,"props":4552,"children":4553},{"class":1712,"line":3715},[4554],{"type":23,"tag":130,"props":4555,"children":4556},{"style":1754},[4557],{"type":38,"value":3690},{"type":23,"tag":130,"props":4559,"children":4560},{"class":1712,"line":3727},[4561,4565],{"type":23,"tag":130,"props":4562,"children":4563},{"style":1717},[4564],{"type":38,"value":1870},{"type":23,"tag":130,"props":4566,"children":4567},{"style":1723},[4568],{"type":38,"value":1726},{"type":23,"tag":130,"props":4570,"children":4571},{"class":1712,"line":3739},[4572,4576],{"type":23,"tag":130,"props":4573,"children":4574},{"style":1723},[4575],{"type":38,"value":1883},{"type":23,"tag":130,"props":4577,"children":4578},{"style":1754},[4579],{"type":38,"value":3205},{"type":23,"tag":130,"props":4581,"children":4582},{"class":1712,"line":3751},[4583,4587],{"type":23,"tag":130,"props":4584,"children":4585},{"style":1717},[4586],{"type":38,"value":1923},{"type":23,"tag":130,"props":4588,"children":4589},{"style":1723},[4590],{"type":38,"value":1726},{"type":23,"tag":130,"props":4592,"children":4593},{"class":1712,"line":3763},[4594,4598],{"type":23,"tag":130,"props":4595,"children":4596},{"style":1723},[4597],{"type":38,"value":1883},{"type":23,"tag":130,"props":4599,"children":4600},{"style":1754},[4601],{"type":38,"value":1940},{"type":23,"tag":130,"props":4603,"children":4605},{"class":1712,"line":4604},39,[4606,4610],{"type":23,"tag":130,"props":4607,"children":4608},{"style":1723},[4609],{"type":38,"value":1883},{"type":23,"tag":130,"props":4611,"children":4612},{"style":1754},[4613],{"type":38,"value":1953},{"type":23,"tag":130,"props":4615,"children":4617},{"class":1712,"line":4616},40,[4618,4622],{"type":23,"tag":130,"props":4619,"children":4620},{"style":1723},[4621],{"type":38,"value":1883},{"type":23,"tag":130,"props":4623,"children":4624},{"style":1754},[4625],{"type":38,"value":1966},{"type":23,"tag":130,"props":4627,"children":4629},{"class":1712,"line":4628},41,[4630,4634,4638],{"type":23,"tag":130,"props":4631,"children":4632},{"style":1717},[4633],{"type":38,"value":1975},{"type":23,"tag":130,"props":4635,"children":4636},{"style":1723},[4637],{"type":38,"value":1751},{"type":23,"tag":130,"props":4639,"children":4640},{"style":1754},[4641],{"type":38,"value":1984},{"type":23,"tag":41,"props":4643,"children":4644},{},[4645],{"type":38,"value":2781},{"type":23,"tag":73,"props":4647,"children":4648},{},[4649,4653,4657],{"type":23,"tag":77,"props":4650,"children":4651},{},[4652],{"type":38,"value":3788},{"type":23,"tag":77,"props":4654,"children":4655},{},[4656],{"type":38,"value":3793},{"type":23,"tag":77,"props":4658,"children":4659},{},[4660],{"type":38,"value":4661},"instruct Traefik to route all traffic from port 5050 to port 5000 of the container",{"type":23,"tag":4663,"props":4664,"children":4665},"style",{},[4666],{"type":38,"value":4667},"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":1528,"depth":1528,"links":4669},[4670,4671],{"id":1683,"depth":1528,"text":1686},{"id":1992,"depth":1528,"text":1995,"children":4672},[4673,4674,4675],{"id":2120,"depth":1535,"text":2123},{"id":2371,"depth":1535,"text":2374},{"id":3330,"depth":1535,"text":3333},{"_path":1566,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":1567,"description":1568,"author":1552,"image":1553,"releaseDate":1569,"blogCategories":4677,"articleTags":4678,"tags":4679,"body":4680,"_type":1542,"_id":1575,"_source":1544,"_file":1576,"_stem":1577,"_extension":1547},[1556,1559],[1559,1572],[1574,1561],{"type":20,"children":4681,"toc":5217},[4682,4686,4697,4703,4716,4724,4755,4761,4786,4791,4820,5142,5147,5213],{"type":23,"tag":24,"props":4683,"children":4685},{"alt":7,"aspect-ratio":1678,"height":28,"object-fit":29,"src":4684},"/blog/shopware-renovate.png",[],{"type":23,"tag":41,"props":4687,"children":4688},{},[4689,4695],{"type":23,"tag":53,"props":4690,"children":4692},{"href":4691},"https://docs.renovatebot.com/",[4693],{"type":38,"value":4694},"Renovate",{"type":38,"value":4696}," is a tool to track your project dependencies and create merge/pull request for them. It works perfectly for most common packages managers, but...",{"type":23,"tag":33,"props":4698,"children":4700},{"id":4699},"shopware-versioning-scheme",[4701],{"type":38,"value":4702},"Shopware versioning scheme",{"type":23,"tag":41,"props":4704,"children":4705},{},[4706,4708,4714],{"type":38,"value":4707},"Shopware is using a custom versioning scheme. You can read the ",{"type":23,"tag":53,"props":4709,"children":4711},{"href":4710},"https://www.shopware.com/en/news/shopware-6-versioning-strategy/",[4712],{"type":38,"value":4713},"official article",{"type":38,"value":4715},", but in short:",{"type":23,"tag":1038,"props":4717,"children":4718},{},[4719],{"type":23,"tag":41,"props":4720,"children":4721},{},[4722],{"type":38,"value":4723},"Shopware implemented SemVer as  \"SemVer with benefits\".",{"type":23,"tag":1038,"props":4725,"children":4726},{},[4727,4732,4750],{"type":23,"tag":41,"props":4728,"children":4729},{},[4730],{"type":38,"value":4731},"A SemVer compliant version has three numbers: Major, Minor, and Patch. They are incremented following this ruleset:",{"type":23,"tag":73,"props":4733,"children":4734},{},[4735,4740,4745],{"type":23,"tag":77,"props":4736,"children":4737},{},[4738],{"type":38,"value":4739},"MAJOR: Incompatible API changes are made",{"type":23,"tag":77,"props":4741,"children":4742},{},[4743],{"type":38,"value":4744},"MINOR: Functionality is added in a backward-compatible manner",{"type":23,"tag":77,"props":4746,"children":4747},{},[4748],{"type":38,"value":4749},"PATCH: Backward-compatible bug fixes are made",{"type":23,"tag":41,"props":4751,"children":4752},{},[4753],{"type":38,"value":4754},"The \"with benefits\" part is: We keep the big marketing number. So Shopware 6 still is the product, but there's a Shopware 6.3.0.0. With 3.0.0 being the SemVer part.",{"type":23,"tag":33,"props":4756,"children":4758},{"id":4757},"renovate-configuration",[4759],{"type":38,"value":4760},"Renovate configuration",{"type":23,"tag":41,"props":4762,"children":4763},{},[4764,4765,4771,4772,4778,4780],{"type":38,"value":162},{"type":23,"tag":1707,"props":4766,"children":4768},{"className":4767},[],[4769],{"type":38,"value":4770},"\"big marketing number\"",{"type":38,"value":1501},{"type":23,"tag":1707,"props":4773,"children":4775},{"className":4774},[],[4776],{"type":38,"value":4777},"\"generation\"",{"type":38,"value":4779}," is reflected in Renovate as ",{"type":23,"tag":1707,"props":4781,"children":4783},{"className":4782},[],[4784],{"type":38,"value":4785},"compatibility",{"type":23,"tag":41,"props":4787,"children":4788},{},[4789],{"type":38,"value":4790},"The following configuration will:",{"type":23,"tag":4792,"props":4793,"children":4794},"ol",{},[4795,4800,4810,4815],{"type":23,"tag":77,"props":4796,"children":4797},{},[4798],{"type":38,"value":4799},"Group all shopware specific updates",{"type":23,"tag":77,"props":4801,"children":4802},{},[4803,4805],{"type":38,"value":4804},"Group the updates as ",{"type":23,"tag":1707,"props":4806,"children":4808},{"className":4807},[],[4809],{"type":38,"value":1574},{"type":23,"tag":77,"props":4811,"children":4812},{},[4813],{"type":38,"value":4814},"Tell Renovate how to extract the version",{"type":23,"tag":77,"props":4816,"children":4817},{},[4818],{"type":38,"value":4819},"Tell Renovate where to find changelog information",{"type":23,"tag":1699,"props":4821,"children":4825},{"className":4822,"code":4823,"filename":4824,"language":1666,"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",[4826],{"type":23,"tag":1707,"props":4827,"children":4828},{"__ignoreMap":7},[4829,4837,4861,4874,4882,4903,4915,4923,4931,4943,4955,4967,4979,4987,4994,5015,5101,5118,5126,5134],{"type":23,"tag":130,"props":4830,"children":4831},{"class":1712,"line":1713},[4832],{"type":23,"tag":130,"props":4833,"children":4834},{"style":1723},[4835],{"type":38,"value":4836},"{\n",{"type":23,"tag":130,"props":4838,"children":4839},{"class":1712,"line":1528},[4840,4846,4850,4856],{"type":23,"tag":130,"props":4841,"children":4843},{"style":4842},"--shiki-default:#79B8FF;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic",[4844],{"type":38,"value":4845},"  \"$schema\"",{"type":23,"tag":130,"props":4847,"children":4848},{"style":1723},[4849],{"type":38,"value":1751},{"type":23,"tag":130,"props":4851,"children":4853},{"style":4852},"--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF;--shiki-sepia:#CFCFC2",[4854],{"type":38,"value":4855},"\"https://docs.renovatebot.com/renovate-schema.json\"",{"type":23,"tag":130,"props":4857,"children":4858},{"style":1723},[4859],{"type":38,"value":4860},",\n",{"type":23,"tag":130,"props":4862,"children":4863},{"class":1712,"line":1535},[4864,4869],{"type":23,"tag":130,"props":4865,"children":4866},{"style":4842},[4867],{"type":38,"value":4868},"  \"packageRules\"",{"type":23,"tag":130,"props":4870,"children":4871},{"style":1723},[4872],{"type":38,"value":4873},": [\n",{"type":23,"tag":130,"props":4875,"children":4876},{"class":1712,"line":1760},[4877],{"type":23,"tag":130,"props":4878,"children":4879},{"style":1723},[4880],{"type":38,"value":4881},"    {\n",{"type":23,"tag":130,"props":4883,"children":4884},{"class":1712,"line":1778},[4885,4890,4894,4899],{"type":23,"tag":130,"props":4886,"children":4887},{"style":4842},[4888],{"type":38,"value":4889},"      \"description\"",{"type":23,"tag":130,"props":4891,"children":4892},{"style":1723},[4893],{"type":38,"value":1751},{"type":23,"tag":130,"props":4895,"children":4896},{"style":4852},[4897],{"type":38,"value":4898},"\"Follow Shopware version schema\"",{"type":23,"tag":130,"props":4900,"children":4901},{"style":1723},[4902],{"type":38,"value":4860},{"type":23,"tag":130,"props":4904,"children":4905},{"class":1712,"line":1796},[4906,4911],{"type":23,"tag":130,"props":4907,"children":4908},{"style":4842},[4909],{"type":38,"value":4910},"      \"matchDatasources\"",{"type":23,"tag":130,"props":4912,"children":4913},{"style":1723},[4914],{"type":38,"value":4873},{"type":23,"tag":130,"props":4916,"children":4917},{"class":1712,"line":1814},[4918],{"type":23,"tag":130,"props":4919,"children":4920},{"style":4852},[4921],{"type":38,"value":4922},"        \"packagist\"\n",{"type":23,"tag":130,"props":4924,"children":4925},{"class":1712,"line":1827},[4926],{"type":23,"tag":130,"props":4927,"children":4928},{"style":1723},[4929],{"type":38,"value":4930},"      ],\n",{"type":23,"tag":130,"props":4932,"children":4933},{"class":1712,"line":1846},[4934,4939],{"type":23,"tag":130,"props":4935,"children":4936},{"style":4842},[4937],{"type":38,"value":4938},"      \"matchPackageNames\"",{"type":23,"tag":130,"props":4940,"children":4941},{"style":1723},[4942],{"type":38,"value":4873},{"type":23,"tag":130,"props":4944,"children":4945},{"class":1712,"line":1855},[4946,4951],{"type":23,"tag":130,"props":4947,"children":4948},{"style":4852},[4949],{"type":38,"value":4950},"        \"shopware/core\"",{"type":23,"tag":130,"props":4952,"children":4953},{"style":1723},[4954],{"type":38,"value":4860},{"type":23,"tag":130,"props":4956,"children":4957},{"class":1712,"line":1864},[4958,4963],{"type":23,"tag":130,"props":4959,"children":4960},{"style":4852},[4961],{"type":38,"value":4962},"        \"shopware/administration\"",{"type":23,"tag":130,"props":4964,"children":4965},{"style":1723},[4966],{"type":38,"value":4860},{"type":23,"tag":130,"props":4968,"children":4969},{"class":1712,"line":1877},[4970,4975],{"type":23,"tag":130,"props":4971,"children":4972},{"style":4852},[4973],{"type":38,"value":4974},"        \"shopware/elasticsearch\"",{"type":23,"tag":130,"props":4976,"children":4977},{"style":1723},[4978],{"type":38,"value":4860},{"type":23,"tag":130,"props":4980,"children":4981},{"class":1712,"line":1891},[4982],{"type":23,"tag":130,"props":4983,"children":4984},{"style":4852},[4985],{"type":38,"value":4986},"        \"shopware/storefront\"\n",{"type":23,"tag":130,"props":4988,"children":4989},{"class":1712,"line":1904},[4990],{"type":23,"tag":130,"props":4991,"children":4992},{"style":1723},[4993],{"type":38,"value":4930},{"type":23,"tag":130,"props":4995,"children":4996},{"class":1712,"line":1917},[4997,5002,5006,5011],{"type":23,"tag":130,"props":4998,"children":4999},{"style":4842},[5000],{"type":38,"value":5001},"      \"groupName\"",{"type":23,"tag":130,"props":5003,"children":5004},{"style":1723},[5005],{"type":38,"value":1751},{"type":23,"tag":130,"props":5007,"children":5008},{"style":4852},[5009],{"type":38,"value":5010},"\"shopware\"",{"type":23,"tag":130,"props":5012,"children":5013},{"style":1723},[5014],{"type":38,"value":4860},{"type":23,"tag":130,"props":5016,"children":5017},{"class":1712,"line":1930},[5018,5023,5027,5032,5038,5043,5047,5052,5056,5061,5065,5070,5074,5079,5083,5088,5092,5097],{"type":23,"tag":130,"props":5019,"children":5020},{"style":4842},[5021],{"type":38,"value":5022},"      \"versioning\"",{"type":23,"tag":130,"props":5024,"children":5025},{"style":1723},[5026],{"type":38,"value":1751},{"type":23,"tag":130,"props":5028,"children":5029},{"style":4852},[5030],{"type":38,"value":5031},"\"regex:(?\u003Ccompatibility>",{"type":23,"tag":130,"props":5033,"children":5035},{"style":5034},"--shiki-default:#79B8FF;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF",[5036],{"type":38,"value":5037},"\\\\",{"type":23,"tag":130,"props":5039,"children":5040},{"style":4852},[5041],{"type":38,"value":5042},"d+)",{"type":23,"tag":130,"props":5044,"children":5045},{"style":5034},[5046],{"type":38,"value":5037},{"type":23,"tag":130,"props":5048,"children":5049},{"style":4852},[5050],{"type":38,"value":5051},".(?\u003Cmajor>",{"type":23,"tag":130,"props":5053,"children":5054},{"style":5034},[5055],{"type":38,"value":5037},{"type":23,"tag":130,"props":5057,"children":5058},{"style":4852},[5059],{"type":38,"value":5060},"d+)(",{"type":23,"tag":130,"props":5062,"children":5063},{"style":5034},[5064],{"type":38,"value":5037},{"type":23,"tag":130,"props":5066,"children":5067},{"style":4852},[5068],{"type":38,"value":5069},".(?\u003Cminor>",{"type":23,"tag":130,"props":5071,"children":5072},{"style":5034},[5073],{"type":38,"value":5037},{"type":23,"tag":130,"props":5075,"children":5076},{"style":4852},[5077],{"type":38,"value":5078},"d+))?(",{"type":23,"tag":130,"props":5080,"children":5081},{"style":5034},[5082],{"type":38,"value":5037},{"type":23,"tag":130,"props":5084,"children":5085},{"style":4852},[5086],{"type":38,"value":5087},".(?\u003Cpatch>",{"type":23,"tag":130,"props":5089,"children":5090},{"style":5034},[5091],{"type":38,"value":5037},{"type":23,"tag":130,"props":5093,"children":5094},{"style":4852},[5095],{"type":38,"value":5096},"d+))?$\"",{"type":23,"tag":130,"props":5098,"children":5099},{"style":1723},[5100],{"type":38,"value":4860},{"type":23,"tag":130,"props":5102,"children":5103},{"class":1712,"line":1943},[5104,5109,5113],{"type":23,"tag":130,"props":5105,"children":5106},{"style":4842},[5107],{"type":38,"value":5108},"      \"sourceUrl\"",{"type":23,"tag":130,"props":5110,"children":5111},{"style":1723},[5112],{"type":38,"value":1751},{"type":23,"tag":130,"props":5114,"children":5115},{"style":4852},[5116],{"type":38,"value":5117},"\"https://github.com/shopware/shopware\"\n",{"type":23,"tag":130,"props":5119,"children":5120},{"class":1712,"line":1956},[5121],{"type":23,"tag":130,"props":5122,"children":5123},{"style":1723},[5124],{"type":38,"value":5125},"    }\n",{"type":23,"tag":130,"props":5127,"children":5128},{"class":1712,"line":1969},[5129],{"type":23,"tag":130,"props":5130,"children":5131},{"style":1723},[5132],{"type":38,"value":5133},"  ]\n",{"type":23,"tag":130,"props":5135,"children":5136},{"class":1712,"line":2659},[5137],{"type":23,"tag":130,"props":5138,"children":5139},{"style":1723},[5140],{"type":38,"value":5141},"}\n",{"type":23,"tag":41,"props":5143,"children":5144},{},[5145],{"type":38,"value":5146},"This should result in creation of following merge/pull requests",{"type":23,"tag":73,"props":5148,"children":5149},{},[5150,5184],{"type":23,"tag":77,"props":5151,"children":5152},{},[5153,5155,5161,5162,5168,5169,5175,5176,5182],{"type":38,"value":5154},"fix(deps): update shopware (",{"type":23,"tag":1707,"props":5156,"children":5158},{"className":5157},[],[5159],{"type":38,"value":5160},"shopware/administration",{"type":38,"value":1135},{"type":23,"tag":1707,"props":5163,"children":5165},{"className":5164},[],[5166],{"type":38,"value":5167},"shopware/core",{"type":38,"value":1135},{"type":23,"tag":1707,"props":5170,"children":5172},{"className":5171},[],[5173],{"type":38,"value":5174},"shopware/elasticsearch",{"type":38,"value":1135},{"type":23,"tag":1707,"props":5177,"children":5179},{"className":5178},[],[5180],{"type":38,"value":5181},"shopware/storefront",{"type":38,"value":5183},")`",{"type":23,"tag":77,"props":5185,"children":5186},{},[5187,5189,5194,5195,5200,5201,5206,5207,5212],{"type":38,"value":5188},"fix(deps): update shopware to v7 (major) (",{"type":23,"tag":1707,"props":5190,"children":5192},{"className":5191},[],[5193],{"type":38,"value":5160},{"type":38,"value":1135},{"type":23,"tag":1707,"props":5196,"children":5198},{"className":5197},[],[5199],{"type":38,"value":5167},{"type":38,"value":1135},{"type":23,"tag":1707,"props":5202,"children":5204},{"className":5203},[],[5205],{"type":38,"value":5174},{"type":38,"value":1135},{"type":23,"tag":1707,"props":5208,"children":5210},{"className":5209},[],[5211],{"type":38,"value":5181},{"type":38,"value":5183},{"type":23,"tag":4663,"props":5214,"children":5215},{},[5216],{"type":38,"value":4667},{"title":7,"searchDepth":1528,"depth":1528,"links":5218},[5219,5220],{"id":4699,"depth":1528,"text":4702},{"id":4757,"depth":1528,"text":4760},{"_path":5222,"_dir":1583,"_draft":6,"_partial":6,"_locale":7,"slug":1552,"teams":5223,"primaryTeam":5224,"firstName":5225,"lastName":5226,"prefixTitle":7,"suffixTitle":5227,"education":5228,"role":5233,"workingSince":5235,"inTheCompanySince":5236,"techSkills":5237,"skills":5268,"projects":5284,"contactDetails":5294,"_image":5297,"image":5298,"_id":5299,"_type":1666,"title":5300,"_source":1583,"_file":5301,"_stem":5302,"_extension":1666},"/employees/robert-juzak",[1585,5224],"devOps","Robert","Juzak","B.Sc.",[5229],[5230,5231,5232],"Bachelor of Computer Science","Technische Universität Breslau","2016",[1600,1601,5234,1604],"admin","2015","2018",[5238,5241,5243,5246,5249,5252,5254,5257,5260,5261,5262,5263,5266],{"name":5239,"level":1608,"icon":5240},"Docker","/images/Docker.svg",{"name":5242,"level":1608},"GitLab",{"name":5244,"level":1608,"icon":5245},"Kubernetes","/images/Kubernetes.svg",{"name":5247,"level":1608,"icon":5248},"PHPUnit","/images/PHP-Unit.svg",{"name":5250,"level":1608,"icon":5251},"Portainer","/images/Portainer.svg",{"name":5253,"level":1608},"Sentry",{"name":5255,"level":1608,"icon":5256},"Sonarqube","/images/Sonarqube.svg",{"name":5258,"level":1608,"icon":5259},"Linux","/images/linux_os-mono.svg",{"name":1613,"level":1614,"icon":1615},{"name":1617,"level":1614,"icon":1618},{"name":1607,"level":1614},{"name":5264,"level":1614,"icon":5265},"SQL","/images/SQL.svg",{"name":5267,"level":1614,"icon":1621},"VueJS",[5269,5271,5273,5274,5276,5278,5279,5281,5283],{"name":5270,"level":1608},"CI/CD",{"name":5272,"level":1608},"qualityAssurance",{"name":5224,"level":1608},{"name":5275,"level":1608},"testDrivenBugfix",{"name":5277,"level":1608},"testDrivenDevelopment",{"name":1603,"level":1614},{"name":5280,"level":1614},"databases",{"name":5282,"level":1614},"linuxServerAdministration",{"name":1645,"level":1614},[5285,5290,5292],{"project":5286,"position":5287},"Herole",[5288,5289],"Dev-Ops","Frontend Developer",{"project":5291,"position":5289},"Huawei-Calibration-aaS",{"project":5293,"position":5289},"Huawei-Inspect-3D",{"eMail":5295,"phone":5296,"visibility":1657},"robert.juzak@helmundwalter.de","+49 351 799 035 26","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",[5304,5318,5330],{"_path":5305,"_dir":5306,"_draft":6,"_partial":2457,"_locale":7,"name":5307,"slug":5306,"text":5308,"hoverText":5309,"image":5310,"customer":5311,"tags":5312,"_id":5314,"_type":1704,"title":5315,"_source":1544,"_file":5316,"_stem":5317,"_extension":1704},"/en/portfolio/gridside/_teaser","gridside","Gridside HANS","Reconstruction planning of supra-regional power grids","Helm & Walter IT-Solutions GmbH was commissioned to develop a web application for the reconstruction planning of supra-regional power grids.","/images/portfolio/gridside/hero.png","A large international electronics company",[18,5313],"backend","common:en:portfolio:890.gridside:_teaser.yaml","Teaser","en/portfolio/890.gridside/_teaser.yaml","en/portfolio/890.gridside/_teaser",{"_path":5319,"_dir":5320,"_draft":6,"_partial":2457,"_locale":7,"name":5321,"slug":5320,"text":5322,"hoverText":5323,"image":5324,"customer":5311,"tags":5325,"_id":5327,"_type":1704,"title":5315,"_source":1544,"_file":5328,"_stem":5329,"_extension":1704},"/en/portfolio/inspect3d/_teaser","inspect3d","Object Inspection","Component Inspection and Quality Assurance","As part of the project, a user interface was designed and developed that enables interaction within a previously created point cloud. This 3D view results from a workpiece captured with an industrial camera. Tools can subsequently be applied to the created point cloud.","/images/portfolio/inspect_3d/inspect_3d_medium.png",[5326,18],"3d","common:en:portfolio:998.inspect3d:_teaser.yaml","en/portfolio/998.inspect3d/_teaser.yaml","en/portfolio/998.inspect3d/_teaser",{"_path":5331,"_dir":5332,"_draft":6,"_partial":2457,"_locale":7,"name":5333,"slug":5332,"text":5334,"hoverText":5335,"image":5336,"customer":5311,"tags":5337,"_id":5338,"_type":1704,"title":5315,"_source":1544,"_file":5339,"_stem":5340,"_extension":1704},"/en/portfolio/camera-calibration/_teaser","camera-calibration","Camera Calibration Service","User-friendly calibration of industrial cameras","For a large manufacturing electronics company, we developed a web-based application that guides users step by step through the calibration process of industrial cameras.","/images/portfolio/inspect_3d/CAAS.jpg",[5326,18],"common:en:portfolio:999.camera-calibration:_teaser.yaml","en/portfolio/999.camera-calibration/_teaser.yaml","en/portfolio/999.camera-calibration/_teaser",1782284057159]