<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Traefik &#8211; Dr. Jan Brinkhaus</title>
	<atom:link href="https://jan-brinkhaus.de/tag/traefik/feed/" rel="self" type="application/rss+xml" />
	<link>https://jan-brinkhaus.de</link>
	<description>Gründer, Unternehmer, Berater</description>
	<lastBuildDate>Thu, 08 Oct 2020 07:13:46 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1.10</generator>

<image>
	<url>https://jan-brinkhaus.de/wp-content/uploads/2018/11/Logo-80x80.png</url>
	<title>Traefik &#8211; Dr. Jan Brinkhaus</title>
	<link>https://jan-brinkhaus.de</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Beispiel / Vorlage: virtuelles Firmennetzwerk in einer docker-compose-Struktur mit Traefik, Matrix, Kimai, Open Project, DokuWiki, Gogs, MatterMost, Minecraft</title>
		<link>https://jan-brinkhaus.de/example-template-virtual-company-network-in-docker-compose-structure-with-traefik-matrix-kimai-open-project-dokuwiki-gogs-mattermost-minecraft/</link>
					<comments>https://jan-brinkhaus.de/example-template-virtual-company-network-in-docker-compose-structure-with-traefik-matrix-kimai-open-project-dokuwiki-gogs-mattermost-minecraft/#respond</comments>
		
		<dc:creator><![CDATA[janbrinkhaus]]></dc:creator>
		<pubDate>Sun, 20 Sep 2020 15:45:59 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[DokuWiki]]></category>
		<category><![CDATA[Gogos]]></category>
		<category><![CDATA[Kimai]]></category>
		<category><![CDATA[Matrix]]></category>
		<category><![CDATA[MatterMost]]></category>
		<category><![CDATA[Minecraft]]></category>
		<category><![CDATA[OpenProject]]></category>
		<category><![CDATA[Synapse]]></category>
		<category><![CDATA[Traefik]]></category>
		<guid isPermaLink="false">https://jan-brinkhaus.de/?p=585</guid>

					<description><![CDATA[Das untere ist ein Docker-Compose-File, im Zusammenspiel mit einer Traefik-Konfiguration. Der Aufbau entstand bei mir über die letzten Monate. Ich stelle ihn ins Netz, weil ich mir so etwas gewünscht hätte, als ich vor ein paar Monaten begann 🙂 . &#8230; <a href="https://jan-brinkhaus.de/example-template-virtual-company-network-in-docker-compose-structure-with-traefik-matrix-kimai-open-project-dokuwiki-gogs-mattermost-minecraft/">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Das untere ist ein Docker-Compose-File, im Zusammenspiel mit einer Traefik-Konfiguration. Der Aufbau entstand bei mir über die letzten Monate. Ich stelle ihn ins Netz, weil ich mir so etwas gewünscht hätte, als ich vor ein paar Monaten begann <img src="https://s.w.org/images/core/emoji/14.0.0/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> .</p>



<p>Für mich war es insbesondere schwierig, zu verstehen, wie man die Container über Traefik nach außen und über Docker-Compose nach innen &#8222;verdrahtet&#8220;. Ich hoffe, mit dem Dateiset eine Vorlage zu geben, die Euch hilft, in den Hilfedateien von Docker und Traefik zu verstehen, wonach Ihr sucht.</p>



<h2>Ziel</h2>



<ul><li>Bereitstellung modular hinzufügbarer &#8222;Apps&#8220; für eine kleine Firma (Projektverwaltung, Zeiterfassung, etc.)</li><li>Geringer Administrationsaufwand</li><li>Bereitstellung professioneller, aus dem Internet erreichbarer, Firmeninfrastruktur</li><li>Möglichkeit schneller Tests von Anwendungen &#8211; ich wusste nicht, was ich brauche, wollte testen</li><li>Verschlüsselung aller Kommunikation mit https</li></ul>



<h2>Lösung</h2>



<ul><li>Beschreibung von Servern und deren Vernetzung als Docker-Compose-File. Das simulierte Netzwerk besteht aus <strong>9 virtuellen Subnetzen</strong> und <strong>12 virtuell zusammengestöpselten Servern</strong> &#8211;<strong> ohne einen Draht zu ziehen</strong>.</li><li>Je ein virtueller Server pro App (Beispiel: op.my-company.de wird beantwortet durch Docker-Container von OpenProject, kb.my-company.de wird beantwortet durch Docker-Container von DokuWiki, etc.)</li></ul>



<h2>Ziele / Nicht-Ziele dieses Posts</h2>



<p>Ich möchte Personen, die sich mit ähnlicher Zielsetzung in Docker/Traefik etc einarbeiten, ein Set Dateien geben, das &#8222;funktioniert&#8220;. Wer sich einarbeiten möchte, soll sehen können, wo man hin kann/muss.</p>



<p>Ich kann <em>kleine </em>Hilfestellungen zum unteren Aufbau geben. Ich kann aber niemanden davor bewahren, sich im Zweifel in die Dokumentation zu Docker, zu Traefik und und der anderen Container einzulesen.</p>



<p>Wer mein Ingenieurbüro beauftragen möchte, eine hierzu vergleichbare Infrastruktur für seine Firma aufzuziehen, dem helfe ich gern. Die Grundstruktur lässt sich auch sicherlich ungefähr innerhalb 1-2 Arbeitstagen für andere Firmen aufsetzen. Ich kann das insofern empfehlen, als dass sich Eure Einarbeitungszeit dabei drastisch verkürzt. Der konzeptionelle Teil der Einarbeitung, in dem man sich in die Funktionsweisen des Gesamtsystems einarbeiten muss, entfällt.</p>



<h2>Umgesetzte Ansätze</h2>



<ul><li>Einfaches <strong>Ticketsystem</strong>, gern mit Projektverwaltungs- und Zeiterfasungsfunktionen; hier spielte ich mit <strong>OpenProject</strong>; dessen Zeiterfassung nutzte ich hinterher aber nicht. Stattdessen kommt Kimai zum Einsatz.</li><li>Eine <strong>Knowledge-Base</strong> auf Wiki-Basis; hier testete ich Media-Wiki, fand es zu umständlich und nahm <strong>DokuWiki</strong>.</li><li>Ein internes <strong>Team-Messaging-System</strong>; hier fand ich <strong>Matrix/Synapse </strong>sehr interessant, was z.B. von der Bundeswehr oder dem französischen Staat genutzt wird. Für das Team-Messaging halte ich inzwischen die Office365-Lösungen für passender. De facto kommen die Ergebnisse der Matrix-Tests aber nur für eine geschützte Chat-Umgebung im privaten Umfeld zum Einsatz. <br><br>Gründe u.a: Matrix ist in vielen <em>technischen </em>Dingen wirklich technisch toll. Den aktuellen Stand der <em>GUI-</em>Technik bei solchen Systemen stellt es aber m.E. dar, dass man Antworten zu einem Beitrag &#8222;zusammenklappen&#8220; kann bzw. Antworten von vornherein zusammengeklappt angezeigt bekommt. Matrix bietet das nicht.<br><br>Das bewirkt, dass Matrix schnell unübersichtlich wird. Es funktioniert m.E. nur im kleinen Rahmen. Es ist z.B. kein inhaltlicher Austausch in einem Kanal zu verschiedenen Themen möglich, wenn jemand nach 3 Tagen &#8222;Matrix-Pause&#8220; wieder einsteigt und pro Kanal einen unsortierten Wust von Textnachrichten vorfindet, die nicht nach Threads sortiert sind. Matrix hat das nicht, obwohl es seit Jahren gewünscht wird. So technisch schön ich Matrix finde, so wenig können sie auf Dauer unser Messenger sein, wenn das so bleibt. Mattermost hat es zu Ende des Jahres in der Roadmap &#8211; wenn Matrix es dann nicht hat, springen wir evtl. rüber. <strong>Zulip </strong>werde ich mir auch noch ansehen.</li></ul>



<ul><li>Als Erfahrung ferner: Matrix ist in vielen <em>technischen </em>Dingen wirklich technisch toll. Den aktuellen Stand der <em>GUI-</em>Technik bei solchen Systemen stellt es aber m.E. dar, dass man Antworten zu einem Beitrag &#8222;zusammenklappen&#8220; kann bzw. Antworten von vornherein zusammengeklappt angezeigt bekommt. Matrix bietet das nicht.</li></ul>



<ul><li><strong>Mattermost </strong>habe ich &#8211; als Alternative zu Matrix als <strong>Team-Messaging-System</strong> &#8211; ebenfalls getestet. Es gefiel mir sehr gut. Es war überraschend ähnlich zu Slack. Es war aber nicht so gut, dass ich die Teilnehmer der <em>laufenden </em>Matrix-Installation auf ein <em>neues</em> System herübermigriert hätte. Auch Mattermost bietet keine Funktion, Threads in Kanälen zu trennen.</li><li>Was <strong>Minecraft </strong>als <strong>Spiel </strong>in der Reihe der Container zu suchen hat? Ich bin selbstständiger Vater mehrerer Jungs. Ich fördere bei den Jungs Minecraft als Computerspiel, weil sie wunderschön kreativ dabei werden. Gleichzeitig möchte ich verhindern, dass die Jungs mit anderen Erwachsenen zusammen spielen. Außerdem: wenn in Minecraft auf einmal z.B. ein Haus eines Kinders kaputt ist, will ich wenigstens wissen, dass es einer der unserigen Spieler war, damit ich das unter Kontrolle bekomme.<br><br>&#8211;> Minecraft dazu zu bauen, war einfach. So haben die Jungs einen eigenen &#8222;Server&#8220;, spielen in ihrer eigenen Welt.</li></ul>



<h2>Dockerfile (/var/docker_data/composed/docker-compose.yml)</h2>



<div class="is-layout-flow wp-block-group"><div class="wp-block-group__inner-container">
<pre class="wp-block-code"><code>version: "3.7"
networks:
  private_network:
    ipam:
      driver: default
      config:
      - subnet: 192.168.200.0/24

  kimai_network:
    ipam:
      driver: default
      config:
      - subnet: 192.168.201.0/24

  mattermost_network:
    ipam:
      driver: default
      config:
      - subnet: 192.168.202.0/24

  op_network:
    ipam:
      driver: default
      config:
      - subnet: 192.168.203.0/24

  kb_network:
    ipam:
      driver: default
      config:
      - subnet: 192.168.204.0/24

  gogs_network:
    ipam:
      driver: default
      config:
      - subnet: 192.168.205.0/24

  synapse_network:
    ipam:
      driver: default
      config:
      - subnet: 192.168.206.0/24

  gitlab_network:
    ipam:
      driver: default
      config:
      - subnet: 192.168.207.0/24

  public_network:
    driver: bridge

services:

  traefik:

    image: traefik:latest

    container_name: traefik

    ports:
      - "80:80"
      - "8080:8080"
      - "443:443"

    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/docker_data/traefik:/etc/traefik

# block "labels" is not really needed and without function here
    labels:
      - "traefik.http.routers.traefik.rule=Host(`traefik.my-company.de`)"
      - "traefik.http.routers.traefik.entrypoints=https,http"
      - "traefik.http.routers.traefik.tls=true"
      - "traefik.http.routers.traefik.tls.certresolver=traefikresolver"

# let Traefik snif in all networks; target: recognize ports which are opened
# and must be forwarded from outside to the containers
    networks:
      - private_network
      - kimai_network
      - mattermost_network
      - op_network
      - kb_network
      - gogs_network
      - synapse_network
      - public_network

  myprivatechat:
    image: matrixdotorg/synapse
    restart: always
    volumes:
      - /var/docker_data/myprivatechat:/data
# "Ports" is not needed because Traefik does the routing from
# the virtual servers to the containers
#    ports:
#      - "80:80"
#      - "443:443"
    labels:
      - "traefik.http.routers.myprivatechat.rule=Host(`wir.myprivatechat.de`)"
      - "traefik.http.routers.myprivatechat.entrypoints=https,http"
      - "traefik.http.routers.myprivatechat.tls=true"
      - "traefik.http.routers.myprivatechat.tls.certresolver=myprivatechatresolver"
#      - "traefik.http.routers.matrix.port=8008"

    container_name: myprivatechat

    depends_on:
      - db

    networks:
      - synapse_network

  op:
    image: openproject/community:10
    restart: always

# "Ports" is not needed because Traefik does the routing from
# the virtual servers to the containers
#    ports:
#      - "80:80"
#      - "443:443"
    labels:
      - "traefik.http.routers.op.rule=Host(`op.my-company.de`)"
      - "traefik.http.routers.op.entrypoints=https,http"
      - "traefik.http.routers.op.tls=true"
      - "traefik.http.routers.op.tls.certresolver=opresolver"
#      - "traefik.http.routers.matrix.port=8008"

    environment:
      - SECRET_KEY_BASE=your_SECRET_KEY_BASE

    volumes:
      - /var/docker_data/op/pgdata:/var/openproject/pgdata
      - /var/docker_data/op/assets:/var/openproject/assets

    container_name: op

    networks:
      - op_network

  kb:
    image: 'docker.io/bitnami/dokuwiki:0.20180422.202005011246-debian-10-r67'
    restart: always

# "Ports" is not needed because Traefik does the routing from
# the virtual servers to the containers
#    ports:
#      - "80:80"
#      - "443:443"
    labels:
      - "traefik.http.routers.kb.rule=Host(`kb.my-company.de`)"
      - "traefik.http.routers.kb.entrypoints=https,http"
      - "traefik.http.routers.kb.tls=true"
      - "traefik.http.routers.kb.tls.certresolver=kbresolver"
#      - "traefik.http.routers.matrix.port=8008"

    volumes:
      - /var/docker_data/kb:/bitnami/dokuwiki

    container_name: kb

    networks:
      - kb_network

  gitlab:
    image: gitlab/gitlab-ce:latest
    restart: "no"
    hostname: gitlab.my-company.de

# gitlab did not work on strato v-servers
# the "container" is currently primarily an
# example for "commenting out" a container
# --> set start command for container to
# the directly exiting "true"
    command: "true"
    entrypoint: "true"

    environment:
      - GITLAB_OMNIBUS_CONFIG="external_url 'https://gitlab.my-company.de/'"

# "Ports" is not needed because Traefik does the routing from
# the virtual servers to the containers
#    ports:
#      - "2222:22"
#      - "443:443"
    labels:
      - "traefik.http.routers.gitlab.rule=Host(`gitlab.my-company.de`)"
      - "traefik.http.routers.gitlab.entrypoints=https,http"
      - "traefik.http.routers.gitlab.tls=true"
      - "traefik.http.routers.gitlab.tls.certresolver=gitlabresolver"
#      - "traefik.http.routers.matrix.port=8008"

    volumes:
      - /var/docker_data/gitlab/data:/var/opt/gitlab
      - /var/docker_data/gitlab/logs:/var/log/gitlab
      - /var/docker_data/config:/etc/gitlab

    container_name: gitlab

    networks:
      - gitlab_network

  db:
    image: postgres:alpine

    environment:
      - POSTGRES_USER=synapse
      - POSTGRES_PASSWORD=YOUR_MATRIX-DB_PW
      # ensure the database gets created correctly
      # https://github.com/matrix-org/synapse/blob/master/docs/postgres.md#set-up-database
      - POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C
#    ports:
#      - "127.0.0.1:5432:5432"
    volumes:
      # You may store the database tables in a local folder..
      - /var/docker_data/myprivatechatDB:/var/lib/postgresql/data
      # .. or store them on some high performance storage for better results
      # - /path/to/ssd/storage:/var/lib/postgresql/data

    networks:
      - synapse_network

  gogs:
    image: gogs/gogs
    container_name: gogs

    volumes:
      - /var/docker_data/gogs/repositories:/home/git/gogs-repositories
      - /var/docker_data/gogs/data:/data

# SSH port must be routed b the ports statement
# web port is done by Traefik (see below)
    ports:
#      - "443:3000"
      - "10022:22"

    networks:
      - gogs_network

    depends_on:
      - gogsdb

    labels:
      - "traefik.http.routers.gogs.rule=Host(`gogs.my-company.de`)"
      - "traefik.http.routers.gogs.entrypoints=https,http"
      - "traefik.http.routers.gogs.tls=true"
      - "traefik.http.routers.gogs.tls.certresolver=gogsresolver"
      - "traefik.http.routers.gogs.service=gogs@docker"
      - "traefik.http.services.gogs.loadbalancer.server.port=3000"

  gogsdb:
    image: mysql:5.7.16
    container_name: gogsdb
    environment:
#      - MYSQL_ALLOW_EMPTY_PASSWORD=yes
      - MYSQL_ROOT_PASSWORD=your-gogsPW
      - MYSQL_DATABASE=gogs
      - MYSQL_USER=gogs
      - MYSQL_PASSWORD=your-gogsPW

    volumes:
      - /var/docker_data/gogsdb:/var/lib/mysql

    expose:
      - "3306"

    networks:
      - gogs_network

    labels:
      - "traefik.enable=false"

  minecraft:
    image: itzg/minecraft-bedrock-server
    container_name: minecraft
    environment:
      - EULA=TRUE
      - VERSION=latest
      - GAMEMODE=creative
      - SERVER-NAME=your-minecraft-server-name
      - MOTD="Willkommen im xxxxxxx"
      - PUBLIC=false

    labels:
      - "traefik.enable=false"

    ports:
      - "19132:19132/udp"

    volumes:
      - /var/docker_data/minecraft:/data

  kimai_sqldb:
    image: mysql:5.7
    environment:
      - MYSQL_DATABASE=kimai
      - MYSQL_USER=kimaiuser
      - MYSQL_PASSWORD=your_kimaipassword
      - MYSQL_ROOT_PASSWORD=your_rootPassword
    volumes:
      - /var/docker_data/kimaidb/:/var/lib/mysql
    command: --default-storage-engine innodb
    restart: unless-stopped
    healthcheck:
      test: mysqladmin -pyour_kimaipassword ping -h localhost
      interval: 20s
      start_period: 10s
      timeout: 10s
      retries: 3

    networks:
      - kimai_network

    labels:
      - "traefik.enable=false"

  kimai:
    image: bkraul/kimai2:nginx-alpine
    environment:
      # web server
      - PHP_DATE_TIMEZONE=Europe/Berlin
      # kimai2
      - APP_ENV=prod
      - DATABASE_URL=mysql://kimaiuser:your_kimaipassword@kimai_sqldb/kimai
      - MAILER_FROM=kimai@mydomain.com
      - MAILER_URL=smtp://validsmtpurl
      - APP_SECRET=your_SuperSecret
      # initial admin user
      - APP_ADMIN_USER=master
      - APP_ADMIN_EMAIL=master@mydomain.com
      - APP_ADMIN_PASS=your_masterPassword
      - APP_LOG=0
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./local.yaml:/app/config/packages/local.yaml
#    ports:
#      - '8001:80'
    restart: unless-stopped
    depends_on:
      - kimai_sqldb

    labels:
      - "traefik.http.routers.kimai.rule=Host(`kimai.my-company.de`)"
      - "traefik.http.routers.kimai.entrypoints=https,http"
      - "traefik.http.routers.kimai.tls=true"
      - "traefik.http.routers.kimai.tls.certresolver=kimairesolver"

    networks:
      - kimai_network

  kimai_postfix:
    image: catatnight/postfix:latest
    environment:
      - maildomain=kimai.local
      - smtp_user=kimai:kimai
    restart: unless-stopped

    networks:
      - kimai_network

    labels:
      - "traefik.enable=false"
</code></pre>
</div></div>



<h2>Traefik ( /var/docker_data/traefik/traefik.toml )</h2>



<p>Kernfunktionen des folgenden Files:</p>



<ul><li>Beobachten der Portfreigaben gestarteter Docker-Container über den Socket des Docker-Services (siehe unten, docker.sock). </li><li>Alle Zugriffe auf die virtuellen Hosts (wie definiert als labels in docker-compose) umleiten auf die Container.</li><li>Entgegennehmen von http-Anfragen; http-Anfragen auf https umleiten</li><li>Bei https-Zugriffen on-the-fly per Let&#8217;s-Encrypt-Zertifikate beantragen, speichern und verwalten, Verschlüsselung erledigen&#8230; unverschlüsselten Verkehr auf Port 80 der Container weitergeben. </li><li>Toll dabei: Traefik erledigt alles vollautomatisch. Muss man kaum erklären.</li><li>Schwierig dabei: Traefik erledigt alles vollautomatisch. Erklärt auch keiner, weil es ja so einfach (???) ist&#8230;<br><br><strong>Ich</strong> bin beim Aufsetzen des Systems daran verzweifelt, dass das Aufsetzen von Traefik anscheinend sooooooo einfach war, dass es anscheinend keiner Erklärung bedurfte. Ich<strong> </strong>saß aus meiner Sicht vor einem Wust quitschbunt bebilderter Hilfeseiten zu Traefik und wusste nichtmal, wie das Vokabular meiner Probleme in Traefik lautete, so dass ich die Lösungen nicht suchen konnte.<br><br>Unten finden Interessierte einmal ein Gesamtsystem aus Traefik-Konfiguration und Docker-Compose-File.<br>  </li></ul>



<pre class="wp-block-code"><code>logLevel = "DEBUG"

defaultEntryPoints = &#91;"http", "https"]

&#91;entryPoints]

  &#91;entryPoints.http]
  address = ":80"

  &#91;entryPoints.http.http]
    &#91;entryPoints.http.http.redirections]
      &#91;entryPoints.http.http.redirections.entryPoint]
        to = "https"
        scheme = "https"

  &#91;entryPoints.https]
  address = ":443"

&#91;api]
dashboard = true
insecure = false

&#91;certificatesresolvers.traefikresolver.acme]
email = "post@your_private_hp.de"
storage = "/etc/traefik/traefik/acme.json"
&#91;certificatesresolvers.traefikresolver.acme.httpChallenge]
entryPoint = "http"

#onHostRule = true
#acmeLogging =true

&#91;acme.httpChallenge]
entryPoint = "http"

&#91;certificatesresolvers.myprivatechatresolver.acme]
email = "post@your_private_hp.de"
storage = "/etc/traefik/myprivatechat/acme.json"
&#91;certificatesresolvers.myprivatechatresolver.acme.httpChallenge]
entryPoint = "http"

&#91;certificatesresolvers.mattermostnmresolver.acme]
email = "post@your_private_hp.de"
storage = "/etc/traefik/mattermostnm/acme.json"
&#91;certificatesresolvers.mattermostnmresolver.acme.httpChallenge]
entryPoint = "http"

&#91;certificatesresolvers.kimairesolver.acme]
email = "post@your_private_hp.de"
storage = "/etc/traefik/kimai/acme.json"
&#91;certificatesresolvers.kimairesolver.acme.httpChallenge]
entryPoint = "http"

&#91;certificatesresolvers.opresolver.acme]
email = "post@your_private_hp.de"
storage = "/etc/traefik/op/acme.json"
&#91;certificatesresolvers.opresolver.acme.httpChallenge]
entryPoint = "http"

&#91;certificatesresolvers.kbresolver.acme]
email = "post@your_private_hp.de"
storage = "/etc/traefik/kb/acme.json"
&#91;certificatesresolvers.kbresolver.acme.httpChallenge]
entryPoint = "http"

&#91;certificatesresolvers.gitlabresolver.acme]
email = "post@your_private_hp.de"
storage = "/etc/traefik/gitlab/acme.json"
&#91;certificatesresolvers.gitlabresolver.acme.httpChallenge]
entryPoint = "http"

&#91;certificatesresolvers.gogsresolver.acme]
email = "post@your_private_hp.de"
storage = "/etc/traefik/gogs/acme.json"
&#91;certificatesresolvers.gogsresolver.acme.httpChallenge]
entryPoint = "http"

&#91;providers.docker]
  endpoint = "unix:///var/run/docker.sock"
#  exposedByDefault = false
</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://jan-brinkhaus.de/example-template-virtual-company-network-in-docker-compose-structure-with-traefik-matrix-kimai-open-project-dokuwiki-gogs-mattermost-minecraft/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
