<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Docker_Caddy</id>
	<title>Docker Caddy - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Docker_Caddy"/>
	<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Docker_Caddy&amp;action=history"/>
	<updated>2026-11-02T23:13:49Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://wiki.ixheim.de/index.php?title=Docker_Caddy&amp;diff=73841&amp;oldid=prev</id>
		<title>Thomas.will: /* Container mit Docker: Caddy, Uptime Kuma und HedgeDoc */</title>
		<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Docker_Caddy&amp;diff=73841&amp;oldid=prev"/>
		<updated>2026-10-20T18:06:49Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Container mit Docker: Caddy, Uptime Kuma und HedgeDoc&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 20. Oktober 2026, 18:06 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l25&quot;&gt;Zeile 25:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 25:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Container mit Docker: Caddy, Uptime Kuma und HedgeDoc ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Container mit Docker: Caddy, Uptime Kuma und HedgeDoc ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Auf dem Server &#039;&#039;&#039;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;caddy&lt;/del&gt;.it2XX.xinmen.de&#039;&#039;&#039; laufen Dienste als Docker-Container.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Auf dem Server &#039;&#039;&#039;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;docker&lt;/ins&gt;.it2XX.xinmen.de&#039;&#039;&#039; laufen Dienste als Docker-Container.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Als praktisches Beispiel dienen drei Dienste: Caddy (Reverse Proxy), Uptime Kuma&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Als praktisches Beispiel dienen drei Dienste: Caddy (Reverse Proxy), Uptime Kuma&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;(Monitoring) und HedgeDoc (kollaborative Notizen). Jeder Dienst bekommt sein&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;(Monitoring) und HedgeDoc (kollaborative Notizen). Jeder Dienst bekommt sein&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key my_wiki:diff:1.41:old-73840:rev-73841:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
	<entry>
		<id>https://wiki.ixheim.de/index.php?title=Docker_Caddy&amp;diff=73840&amp;oldid=prev</id>
		<title>Thomas.will: /* Grundkonfiguration */</title>
		<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Docker_Caddy&amp;diff=73840&amp;oldid=prev"/>
		<updated>2026-10-20T18:06:25Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Grundkonfiguration&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 20. Oktober 2026, 18:06 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l22&quot;&gt;Zeile 22:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 22:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*reboot&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*reboot&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*get-cert.sh&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*get-cert.sh&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=== Grundkonfiguration ===&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Der Server wird über ein Skript vorkonfiguriert (Netzwerk, Hostname, Benutzer, Zertifikate).&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;;Voraussetzung im DNS&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Die Namen der Dienste müssen auf den Server zeigen, z. B. als CNAME auf &amp;lt;code&amp;gt;caddy.it2XX.xinmen.de&amp;lt;/code&amp;gt;:&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;pre&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;kuma.it2XX.xinmen.de      CNAME  caddy.it2XX.xinmen.de.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;hedgedoc.it2XX.xinmen.de  CNAME  caddy.it2XX.xinmen.de.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;/pre&amp;gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Container mit Docker: Caddy, Uptime Kuma und HedgeDoc ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Container mit Docker: Caddy, Uptime Kuma und HedgeDoc ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key my_wiki:diff:1.41:old-73839:rev-73840:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
	<entry>
		<id>https://wiki.ixheim.de/index.php?title=Docker_Caddy&amp;diff=73839&amp;oldid=prev</id>
		<title>Thomas.will: /* DATEN */</title>
		<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Docker_Caddy&amp;diff=73839&amp;oldid=prev"/>
		<updated>2026-10-20T18:06:07Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;DATEN&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 20. Oktober 2026, 18:06 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l4&quot;&gt;Zeile 4:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 4:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! Parameter !! Wert !! Erläuterung&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! Parameter !! Wert !! Erläuterung&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &#039;&#039;&#039;Server&#039;&#039;&#039; || &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;container &lt;/del&gt;|| Debian-Server, Grundkonfiguration per Skript&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &#039;&#039;&#039;Server&#039;&#039;&#039; || &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;docker &lt;/ins&gt;|| Debian-Server, Grundkonfiguration per Skript&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;#039;&amp;#039;&amp;#039;Betriebssystem&amp;#039;&amp;#039;&amp;#039; || Debian 13 ||&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;#039;&amp;#039;&amp;#039;Betriebssystem&amp;#039;&amp;#039;&amp;#039; || Debian 13 ||&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &#039;&#039;&#039;FQDN&#039;&#039;&#039; || &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;container&lt;/del&gt;.it2XX.xinmen.de || Fully Qualified Domain Name&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &#039;&#039;&#039;FQDN&#039;&#039;&#039; || &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;docker&lt;/ins&gt;.it2XX.xinmen.de || Fully Qualified Domain Name&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;#039;&amp;#039;&amp;#039;DOM&amp;#039;&amp;#039;&amp;#039; || it2XX.xinmen.de || Domain Name&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;#039;&amp;#039;&amp;#039;DOM&amp;#039;&amp;#039;&amp;#039; || it2XX.xinmen.de || Domain Name&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l19&quot;&gt;Zeile 19:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 19:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Skript====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Skript====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*debian-setup.sh -h &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;caddy&lt;/del&gt;.it2XX.xinmen.de -a 10.88.2XX.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;21&lt;/del&gt;/24 -g 10.88.2XX.1 -n 9.9.9.9&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*debian-setup.sh -h &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;docker&lt;/ins&gt;.it2XX.xinmen.de -a 10.88.2XX.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;9&lt;/ins&gt;/24 -g 10.88.2XX.1 -n 9.9.9.9&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*reboot&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*reboot&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*get-cert.sh&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*get-cert.sh&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key my_wiki:diff:1.41:old-73833:rev-73839:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
	<entry>
		<id>https://wiki.ixheim.de/index.php?title=Docker_Caddy&amp;diff=73833&amp;oldid=prev</id>
		<title>Thomas.will: /* DATEN */</title>
		<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Docker_Caddy&amp;diff=73833&amp;oldid=prev"/>
		<updated>2026-10-20T17:57:39Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;DATEN&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 20. Oktober 2026, 17:57 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l20&quot;&gt;Zeile 20:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 20:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Skript====&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;====Skript====&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*debian-setup.sh -h caddy.it2XX.xinmen.de -a 10.88.2XX.21/24 -g 10.88.2XX.1 -n 9.9.9.9&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*debian-setup.sh -h caddy.it2XX.xinmen.de -a 10.88.2XX.21/24 -g 10.88.2XX.1 -n 9.9.9.9&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*reboot&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*get-cert.sh&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Grundkonfiguration ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Grundkonfiguration ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key my_wiki:diff:1.41:old-73832:rev-73833:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
	<entry>
		<id>https://wiki.ixheim.de/index.php?title=Docker_Caddy&amp;diff=73832&amp;oldid=prev</id>
		<title>Thomas.will: /* DATEN */</title>
		<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Docker_Caddy&amp;diff=73832&amp;oldid=prev"/>
		<updated>2026-10-20T17:56:57Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;DATEN&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 20. Oktober 2026, 17:56 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l4&quot;&gt;Zeile 4:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 4:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! Parameter !! Wert !! Erläuterung&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! Parameter !! Wert !! Erläuterung&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &#039;&#039;&#039;Server&#039;&#039;&#039; || &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;caddy &lt;/del&gt;|| Debian-Server, Grundkonfiguration per Skript&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &#039;&#039;&#039;Server&#039;&#039;&#039; || &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;container &lt;/ins&gt;|| Debian-Server, Grundkonfiguration per Skript&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;#039;&amp;#039;&amp;#039;Betriebssystem&amp;#039;&amp;#039;&amp;#039; || Debian 13 ||&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;#039;&amp;#039;&amp;#039;Betriebssystem&amp;#039;&amp;#039;&amp;#039; || Debian 13 ||&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &#039;&#039;&#039;FQDN&#039;&#039;&#039; || &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;caddy&lt;/del&gt;.it2XX.xinmen.de || Fully Qualified Domain Name&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &#039;&#039;&#039;FQDN&#039;&#039;&#039; || &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;container&lt;/ins&gt;.it2XX.xinmen.de || Fully Qualified Domain Name&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;#039;&amp;#039;&amp;#039;DOM&amp;#039;&amp;#039;&amp;#039; || it2XX.xinmen.de || Domain Name&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;#039;&amp;#039;&amp;#039;DOM&amp;#039;&amp;#039;&amp;#039; || it2XX.xinmen.de || Domain Name&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l18&quot;&gt;Zeile 18:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 18:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;#039;&amp;#039;&amp;#039;IP, GW, NS&amp;#039;&amp;#039;&amp;#039; || per Skript || werden von der Grundkonfiguration gesetzt&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| &amp;#039;&amp;#039;&amp;#039;IP, GW, NS&amp;#039;&amp;#039;&amp;#039; || per Skript || werden von der Grundkonfiguration gesetzt&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;====Skript====&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*debian-setup.sh -h caddy.it2XX.xinmen.de -a 10.88.2XX.21/24 -g 10.88.2XX.1 -n 9.9.9.9&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Grundkonfiguration ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Grundkonfiguration ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key my_wiki:diff:1.41:old-73830:rev-73832:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
	<entry>
		<id>https://wiki.ixheim.de/index.php?title=Docker_Caddy&amp;diff=73830&amp;oldid=prev</id>
		<title>Thomas.will: Neuer Artikel: Caddy, Uptime Kuma und HedgeDoc mit Docker auf Debian (Nachfolger von Rocky container)</title>
		<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Docker_Caddy&amp;diff=73830&amp;oldid=prev"/>
		<updated>2026-10-20T17:38:06Z</updated>

		<summary type="html">&lt;p&gt;Neuer Artikel: Caddy, Uptime Kuma und HedgeDoc mit Docker auf Debian (Nachfolger von Rocky container)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Installation ==&lt;br /&gt;
=== DATEN ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;background-color: #f2f2f2;&amp;quot;&lt;br /&gt;
! Parameter !! Wert !! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Server&amp;#039;&amp;#039;&amp;#039; || caddy || Debian-Server, Grundkonfiguration per Skript&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Betriebssystem&amp;#039;&amp;#039;&amp;#039; || Debian 13 ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;FQDN&amp;#039;&amp;#039;&amp;#039; || caddy.it2XX.xinmen.de || Fully Qualified Domain Name&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;DOM&amp;#039;&amp;#039;&amp;#039; || it2XX.xinmen.de || Domain Name&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Dienst 1&amp;#039;&amp;#039;&amp;#039; || kuma.it2XX.xinmen.de || Uptime Kuma (Monitoring)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;Dienst 2&amp;#039;&amp;#039;&amp;#039; || hedgedoc.it2XX.xinmen.de || HedgeDoc (kollaborative Notizen)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;IP, GW, NS&amp;#039;&amp;#039;&amp;#039; || per Skript || werden von der Grundkonfiguration gesetzt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Grundkonfiguration ===&lt;br /&gt;
Der Server wird über ein Skript vorkonfiguriert (Netzwerk, Hostname, Benutzer, Zertifikate).&lt;br /&gt;
&lt;br /&gt;
;Voraussetzung im DNS&lt;br /&gt;
Die Namen der Dienste müssen auf den Server zeigen, z. B. als CNAME auf &amp;lt;code&amp;gt;caddy.it2XX.xinmen.de&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kuma.it2XX.xinmen.de      CNAME  caddy.it2XX.xinmen.de.&lt;br /&gt;
hedgedoc.it2XX.xinmen.de  CNAME  caddy.it2XX.xinmen.de.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Container mit Docker: Caddy, Uptime Kuma und HedgeDoc ==&lt;br /&gt;
&lt;br /&gt;
Auf dem Server &amp;#039;&amp;#039;&amp;#039;caddy.it2XX.xinmen.de&amp;#039;&amp;#039;&amp;#039; laufen Dienste als Docker-Container.&lt;br /&gt;
Als praktisches Beispiel dienen drei Dienste: Caddy (Reverse Proxy), Uptime Kuma&lt;br /&gt;
(Monitoring) und HedgeDoc (kollaborative Notizen). Jeder Dienst bekommt sein&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;eigenes Verzeichnis mit eigener compose.yaml&amp;#039;&amp;#039;&amp;#039;. Das entspricht der Praxis,&lt;br /&gt;
Container-Stacks unabhängig voneinander verwaltbar zu halten (eigenes Update,&lt;br /&gt;
eigenes Down/Up, ohne andere Dienste zu berühren). Verwaltet werden die Stacks&lt;br /&gt;
mit &amp;#039;&amp;#039;&amp;#039;docker compose&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Im weiteren Verlauf des Kurses werden diese Container überwacht, z. B. mit Wazuh.&lt;br /&gt;
Der Aufbau ist deshalb von Anfang an so angelegt, dass Logs an festen Stellen&lt;br /&gt;
landen (siehe [[#Vorbereitung für die Überwachung|Vorbereitung für die Überwachung]]).&lt;br /&gt;
&lt;br /&gt;
=== Was ist Docker ===&lt;br /&gt;
&lt;br /&gt;
Docker ist eine Container-Engine. Ein Container ist ein normaler Linux-Prozess,&lt;br /&gt;
der durch Kernel-Funktionen (Namespaces, cgroups) vom Rest des Systems&lt;br /&gt;
abgeschottet ist und sein eigenes Dateisystem aus einem Image mitbringt.&lt;br /&gt;
&lt;br /&gt;
;Aufbau&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;dockerd&amp;#039;&amp;#039;&amp;#039;: Der Docker-Daemon läuft dauerhaft als root und verwaltet alle Container, Images, Netze und Volumes.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;containerd&amp;#039;&amp;#039;&amp;#039;: startet und überwacht die eigentlichen Container-Prozesse.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;docker&amp;#039;&amp;#039;&amp;#039; (CLI): spricht über den Socket &amp;lt;code&amp;gt;/run/docker.sock&amp;lt;/code&amp;gt; mit dem Daemon.&lt;br /&gt;
&lt;br /&gt;
;Sicherheitsrelevant&lt;br /&gt;
* Wer auf &amp;lt;code&amp;gt;/run/docker.sock&amp;lt;/code&amp;gt; zugreifen darf, hat praktisch &amp;#039;&amp;#039;&amp;#039;root-Rechte&amp;#039;&amp;#039;&amp;#039; auf dem Host. Mitglieder der Gruppe &amp;lt;code&amp;gt;docker&amp;lt;/code&amp;gt; sind damit root-gleich.&lt;br /&gt;
* Der Daemon läuft als root. Ein Ausbruch aus einem Container kann deshalb beim Host-root landen, wenn der Container falsch konfiguriert ist (z. B. &amp;lt;code&amp;gt;--privileged&amp;lt;/code&amp;gt;, gemounteter Docker-Socket).&lt;br /&gt;
&lt;br /&gt;
;Unterschied zu Podman&lt;br /&gt;
Podman kommt ohne zentralen Daemon aus und läuft standardmäßig rootless. Die&lt;br /&gt;
Befehle sind nahezu identisch, &amp;lt;code&amp;gt;docker&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;podman&amp;lt;/code&amp;gt; lassen sich meist 1:1 austauschen.&lt;br /&gt;
&lt;br /&gt;
;Merksatz&lt;br /&gt;
Docker = ein Daemon (root) verwaltet alle Container | Zugriff auf den Docker-Socket = root&lt;br /&gt;
&lt;br /&gt;
=== Docker installieren ===&lt;br /&gt;
&lt;br /&gt;
Installiert wird aus dem offiziellen Docker-Repository.&lt;br /&gt;
&lt;br /&gt;
;Schlüssel und Repository einrichten&lt;br /&gt;
*apt update&lt;br /&gt;
*apt install -y ca-certificates curl&lt;br /&gt;
*install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
*curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
*echo &amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(. /etc/os-release &amp;amp;&amp;amp; echo $VERSION_CODENAME) stable&amp;quot; &amp;gt; /etc/apt/sources.list.d/docker.list&lt;br /&gt;
&lt;br /&gt;
;Docker und das Compose-Plugin installieren&lt;br /&gt;
*apt update&lt;br /&gt;
*apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&lt;br /&gt;
;Prüfen&lt;br /&gt;
*systemctl status docker&lt;br /&gt;
*docker version&lt;br /&gt;
*docker compose version&lt;br /&gt;
&lt;br /&gt;
;Hinweis&lt;br /&gt;
Compose ist heute ein Plugin von Docker. Der Befehl heißt &amp;lt;code&amp;gt;docker compose&amp;lt;/code&amp;gt; (mit Leerzeichen),&lt;br /&gt;
nicht mehr &amp;lt;code&amp;gt;docker-compose&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Docker-Logging festlegen ===&lt;br /&gt;
&lt;br /&gt;
Docker schreibt die Ausgabe jedes Containers in eine Datei unter&lt;br /&gt;
&amp;lt;code&amp;gt;/var/lib/docker/containers/&amp;lt;/code&amp;gt;. Ohne Begrenzung wachsen diese Dateien&lt;br /&gt;
unbegrenzt. Die Rotation wird einmal zentral festgelegt.&lt;br /&gt;
&lt;br /&gt;
;Daemon-Konfiguration anlegen&lt;br /&gt;
*vim /etc/docker/daemon.json&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;log-driver&amp;quot;: &amp;quot;json-file&amp;quot;,&lt;br /&gt;
  &amp;quot;log-opts&amp;quot;: {&lt;br /&gt;
    &amp;quot;max-size&amp;quot;: &amp;quot;10m&amp;quot;,&lt;br /&gt;
    &amp;quot;max-file&amp;quot;: &amp;quot;3&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Docker neu starten&lt;br /&gt;
*systemctl restart docker&lt;br /&gt;
&lt;br /&gt;
;Hinweis&lt;br /&gt;
Die Einstellung gilt für Container, die &amp;#039;&amp;#039;&amp;#039;danach&amp;#039;&amp;#039;&amp;#039; erstellt werden. Der Treiber&lt;br /&gt;
&amp;lt;code&amp;gt;json-file&amp;lt;/code&amp;gt; ist wichtig für die spätere Überwachung, weil ein Agent wie&lt;br /&gt;
Wazuh diese Dateien direkt lesen kann.&lt;br /&gt;
&lt;br /&gt;
=== Vorbereitung: Zertifikate ===&lt;br /&gt;
&lt;br /&gt;
Die Zertifikate liegen bereits vor unter:&lt;br /&gt;
* &amp;lt;code&amp;gt;/etc/ssl/own.crt&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;/etc/ssl/own.key&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Zertifikat muss die Namen &amp;lt;code&amp;gt;kuma.it2XX.xinmen.de&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;hedgedoc.it2XX.xinmen.de&amp;lt;/code&amp;gt; enthalten&lt;br /&gt;
(oder ein Wildcard-Zertifikat für &amp;lt;code&amp;gt;*.it2XX.xinmen.de&amp;lt;/code&amp;gt; sein).&lt;br /&gt;
&lt;br /&gt;
=== Verzeichnisstruktur ===&lt;br /&gt;
&lt;br /&gt;
Jeder Dienst bekommt ein eigenes Verzeichnis mit eigener Compose-Datei. Der&lt;br /&gt;
Dateiname ist immer &amp;#039;&amp;#039;&amp;#039;compose.yaml&amp;#039;&amp;#039;&amp;#039;, das ist der aktuelle Standardname (der&lt;br /&gt;
alte Name &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt; funktioniert noch, wird aber nicht mehr verwendet).&lt;br /&gt;
&amp;lt;code&amp;gt;docker compose&amp;lt;/code&amp;gt; sucht beim Aufruf automatisch nach dieser Datei im aktuellen Verzeichnis.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/opt/docker/&lt;br /&gt;
├── caddy/&lt;br /&gt;
│   ├── compose.yaml&lt;br /&gt;
│   └── Caddyfile&lt;br /&gt;
├── uptime-kuma/&lt;br /&gt;
│   └── compose.yaml&lt;br /&gt;
└── hedgedoc/&lt;br /&gt;
    ├── compose.yaml&lt;br /&gt;
    └── .env&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Struktur anlegen&lt;br /&gt;
*mkdir -p /opt/docker/{caddy,uptime-kuma,hedgedoc}&lt;br /&gt;
*mkdir -p /var/log/caddy&lt;br /&gt;
&lt;br /&gt;
;Merksatz&lt;br /&gt;
Ein Verzeichnis = ein Dienst = ein eigenständiges Compose-Projekt.&lt;br /&gt;
&lt;br /&gt;
=== Wie Container sich im Netzwerk finden ===&lt;br /&gt;
&lt;br /&gt;
Docker legt für jedes selbst angelegte Netzwerk ein internes DNS an. Jeder&lt;br /&gt;
Container ist darin unter seinem &amp;#039;&amp;#039;&amp;#039;container_name&amp;#039;&amp;#039;&amp;#039; erreichbar, nicht unter&lt;br /&gt;
&amp;lt;code&amp;gt;localhost&amp;lt;/code&amp;gt; und nicht über die Host-IP.&lt;br /&gt;
&lt;br /&gt;
;Merksatz&lt;br /&gt;
container_name = Hostname im internen Netz. Zwei Container im selben Netzwerk&lt;br /&gt;
erreichen sich per &amp;lt;code&amp;gt;ping container_name&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;curl http://container_name:PORT&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wichtige Besonderheit bei getrennten Verzeichnissen:&amp;#039;&amp;#039;&amp;#039; Jedes Compose-Projekt&lt;br /&gt;
legt sein eigenes, isoliertes Netzwerk an. Liegen Caddy und Uptime Kuma in&lt;br /&gt;
unterschiedlichen Verzeichnissen, finden sie sich &amp;#039;&amp;#039;&amp;#039;nicht&amp;#039;&amp;#039;&amp;#039; automatisch. Die&lt;br /&gt;
Lösung: Ein gemeinsames Netzwerk wird einmalig &amp;#039;&amp;#039;&amp;#039;manuell und&lt;br /&gt;
projektübergreifend&amp;#039;&amp;#039;&amp;#039; angelegt, und jede compose.yaml bindet sich als&lt;br /&gt;
&amp;lt;code&amp;gt;external&amp;lt;/code&amp;gt; ein.&lt;br /&gt;
&lt;br /&gt;
;Einmalig das gemeinsame Netzwerk anlegen&lt;br /&gt;
*docker network create proxy&lt;br /&gt;
&lt;br /&gt;
;Prüfen&lt;br /&gt;
*docker network ls&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            Internet / Schulungsnetz&lt;br /&gt;
                     │ 80/443&lt;br /&gt;
              ┌──────┴──────┐&lt;br /&gt;
              │    caddy    │   einziger Container mit Ports am Host&lt;br /&gt;
              └──────┬──────┘&lt;br /&gt;
     Netz &amp;quot;proxy&amp;quot;    │&lt;br /&gt;
        ┌────────────┴────────────┐&lt;br /&gt;
 ┌──────┴──────┐           ┌──────┴──────┐&lt;br /&gt;
 │ uptime-kuma │           │  hedgedoc   │&lt;br /&gt;
 │    :3001    │           │    :3000    │&lt;br /&gt;
 └─────────────┘           └──────┬──────┘&lt;br /&gt;
                    internes Netz │ (nur HedgeDoc-Projekt)&lt;br /&gt;
                           ┌──────┴──────┐&lt;br /&gt;
                           │ hedgedoc-db │&lt;br /&gt;
                           │    :5432    │&lt;br /&gt;
                           └─────────────┘&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Dienst 1: Caddy (Reverse Proxy) ===&lt;br /&gt;
&lt;br /&gt;
Caddy ist der einzige Container, der Ports am Host öffnet, weil er der einzige&lt;br /&gt;
Kontaktpunkt von außen ist. Er terminiert TLS mit dem vorhandenen Zertifikat&lt;br /&gt;
und leitet intern per HTTP an die Dienste weiter.&lt;br /&gt;
&lt;br /&gt;
;Compose-Datei anlegen&lt;br /&gt;
*vim /opt/docker/caddy/compose.yaml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  caddy:&lt;br /&gt;
    image: caddy:2&lt;br /&gt;
    container_name: caddy&lt;br /&gt;
    restart: unless-stopped&lt;br /&gt;
    ports:&lt;br /&gt;
      - &amp;quot;80:80&amp;quot;&lt;br /&gt;
      - &amp;quot;443:443&amp;quot;&lt;br /&gt;
      - &amp;quot;443:443/udp&amp;quot;&lt;br /&gt;
    volumes:&lt;br /&gt;
      - ./Caddyfile:/etc/caddy/Caddyfile:ro&lt;br /&gt;
      - /etc/ssl/own.crt:/etc/ssl/own.crt:ro&lt;br /&gt;
      - /etc/ssl/own.key:/etc/ssl/own.key:ro&lt;br /&gt;
      - /var/log/caddy:/var/log/caddy&lt;br /&gt;
      - caddy-data:/data&lt;br /&gt;
      - caddy-config:/config&lt;br /&gt;
    networks:&lt;br /&gt;
      - proxy&lt;br /&gt;
&lt;br /&gt;
volumes:&lt;br /&gt;
  caddy-data:&lt;br /&gt;
  caddy-config:&lt;br /&gt;
&lt;br /&gt;
networks:&lt;br /&gt;
  proxy:&lt;br /&gt;
    external: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Erklärung&lt;br /&gt;
* &amp;lt;code&amp;gt;restart: unless-stopped&amp;lt;/code&amp;gt;: Docker startet den Container nach einem Absturz oder Neustart des Servers wieder, außer man hat ihn selbst gestoppt. Ohne diese Zeile bleibt der Dienst nach einem Reboot aus.&lt;br /&gt;
* &amp;lt;code&amp;gt;:ro&amp;lt;/code&amp;gt;: Caddyfile und Zertifikate werden nur lesend eingebunden. Der Container kann sie nicht verändern.&lt;br /&gt;
* &amp;lt;code&amp;gt;443:443/udp&amp;lt;/code&amp;gt;: für HTTP/3. Kann entfallen, schadet aber nicht.&lt;br /&gt;
* &amp;lt;code&amp;gt;/var/log/caddy&amp;lt;/code&amp;gt;: Hier schreibt Caddy seine Zugriffslogs, direkt auf dem Host lesbar.&lt;br /&gt;
&lt;br /&gt;
;Hinweis depends_on&lt;br /&gt;
Caddy und die Dienste liegen in getrennten Compose-Projekten, ein &amp;lt;code&amp;gt;depends_on&amp;lt;/code&amp;gt;&lt;br /&gt;
zwischen ihnen gibt es deshalb nicht (das funktioniert nur innerhalb eines Projekts).&lt;br /&gt;
Das ist unproblematisch: Caddy versucht bei jeder Anfrage erneut, den Dienst zu erreichen.&lt;br /&gt;
&lt;br /&gt;
=== Caddyfile ===&lt;br /&gt;
&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Caddyfile&amp;#039;&amp;#039;&amp;#039; ist Caddys Konfigurationsdatei (reiner Text, kein YAML/JSON).&lt;br /&gt;
Sie legt pro Domain fest, welches Zertifikat benutzt wird und wohin intern&lt;br /&gt;
weitergeleitet wird.&lt;br /&gt;
&lt;br /&gt;
;Caddyfile anlegen&lt;br /&gt;
*vim /opt/docker/caddy/Caddyfile&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(logging) {&lt;br /&gt;
    log {&lt;br /&gt;
        output file /var/log/caddy/access.log&lt;br /&gt;
        format json&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
kuma.it2XX.xinmen.de {&lt;br /&gt;
    tls /etc/ssl/own.crt /etc/ssl/own.key&lt;br /&gt;
    import logging&lt;br /&gt;
    reverse_proxy uptime-kuma:3001&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
hedgedoc.it2XX.xinmen.de {&lt;br /&gt;
    tls /etc/ssl/own.crt /etc/ssl/own.key&lt;br /&gt;
    import logging&lt;br /&gt;
    reverse_proxy hedgedoc:3000&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aufbau:&lt;br /&gt;
* &amp;lt;code&amp;gt;(logging) { … }&amp;lt;/code&amp;gt;: ein wiederverwendbarer Baustein (Snippet). Er wird in jedem Host-Block mit &amp;lt;code&amp;gt;import logging&amp;lt;/code&amp;gt; eingebunden.&lt;br /&gt;
* &amp;lt;code&amp;gt;log … format json&amp;lt;/code&amp;gt;: Jeder Zugriff wird als eine JSON-Zeile in &amp;lt;code&amp;gt;/var/log/caddy/access.log&amp;lt;/code&amp;gt; geschrieben. JSON lässt sich später von Wazuh ohne eigenen Decoder auswerten.&lt;br /&gt;
* &amp;lt;code&amp;gt;kuma.it2XX.xinmen.de {&amp;lt;/code&amp;gt;: für welchen Hostnamen der Block gilt.&lt;br /&gt;
* &amp;lt;code&amp;gt;tls …&amp;lt;/code&amp;gt;: welches Zertifikat und welcher Schlüssel verwendet werden.&lt;br /&gt;
* &amp;lt;code&amp;gt;reverse_proxy uptime-kuma:3001&amp;lt;/code&amp;gt;: wohin die entschlüsselte Anfrage intern geht (container_name als DNS-Name).&lt;br /&gt;
&lt;br /&gt;
;Caddyfile prüfen, bevor Caddy sie lädt&lt;br /&gt;
*docker run --rm -v /opt/docker/caddy/Caddyfile:/etc/caddy/Caddyfile:ro caddy:2 caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile&lt;br /&gt;
&lt;br /&gt;
Die Prüfung meldet einen Fehler, solange die Zertifikate nicht eingebunden sind. Alternativ nach dem Start:&lt;br /&gt;
*docker exec caddy caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile&lt;br /&gt;
&lt;br /&gt;
;Caddyfile im laufenden Betrieb neu laden&lt;br /&gt;
*docker exec caddy caddy reload --config /etc/caddy/Caddyfile --adapter caddyfile&lt;br /&gt;
&lt;br /&gt;
=== Dienst 2: Uptime Kuma ===&lt;br /&gt;
&lt;br /&gt;
Uptime Kuma braucht keinen Port am Host. Es lauscht intern auf Port &amp;#039;&amp;#039;&amp;#039;3001&amp;#039;&amp;#039;&amp;#039; und&lt;br /&gt;
wird ausschließlich über Caddy nach außen gereicht. Die Daten (SQLite-Datenbank,&lt;br /&gt;
Konfiguration) liegen in einem benannten Volume, damit sie Neustarts und Updates überleben.&lt;br /&gt;
&lt;br /&gt;
;Compose-Datei anlegen&lt;br /&gt;
*vim /opt/docker/uptime-kuma/compose.yaml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  uptime-kuma:&lt;br /&gt;
    image: louislam/uptime-kuma:1&lt;br /&gt;
    container_name: uptime-kuma&lt;br /&gt;
    restart: unless-stopped&lt;br /&gt;
    volumes:&lt;br /&gt;
      - uptime-kuma-data:/app/data&lt;br /&gt;
    networks:&lt;br /&gt;
      - proxy&lt;br /&gt;
&lt;br /&gt;
volumes:&lt;br /&gt;
  uptime-kuma-data:&lt;br /&gt;
&lt;br /&gt;
networks:&lt;br /&gt;
  proxy:&lt;br /&gt;
    external: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Wichtig&lt;br /&gt;
Kein &amp;lt;code&amp;gt;ports:&amp;lt;/code&amp;gt;-Eintrag. Ein Dienst, der nur von Caddy angesprochen wird,&lt;br /&gt;
muss nicht am Host offen sein. Ein offener Port wäre sogar ein unnötiges Risiko:&lt;br /&gt;
Er läge ungeschützt ohne TLS am Netz.&lt;br /&gt;
&lt;br /&gt;
;Achtung Docker und Firewall&lt;br /&gt;
Ports, die mit &amp;lt;code&amp;gt;ports:&amp;lt;/code&amp;gt; veröffentlicht werden, trägt Docker selbst in die&lt;br /&gt;
Paketfilter-Regeln ein. Sie sind dann von außen erreichbar, &amp;#039;&amp;#039;&amp;#039;auch wenn eine&lt;br /&gt;
Host-Firewall&amp;#039;&amp;#039;&amp;#039; (nftables, ufw) den Port eigentlich sperrt. Deshalb nur dort Ports&lt;br /&gt;
veröffentlichen, wo es wirklich nötig ist: hier nur bei Caddy.&lt;br /&gt;
&lt;br /&gt;
=== Dienst 3: HedgeDoc mit Datenbank ===&lt;br /&gt;
&lt;br /&gt;
HedgeDoc braucht eine Datenbank. Sie läuft als zweiter Container im selben&lt;br /&gt;
Compose-Projekt. Die Datenbank hängt &amp;#039;&amp;#039;&amp;#039;nur&amp;#039;&amp;#039;&amp;#039; im internen Netz des Projekts,&lt;br /&gt;
HedgeDoc zusätzlich im Netz &amp;lt;code&amp;gt;proxy&amp;lt;/code&amp;gt;. Caddy erreicht so HedgeDoc, aber&lt;br /&gt;
niemals die Datenbank.&lt;br /&gt;
&lt;br /&gt;
;Passwort in eine eigene Datei&lt;br /&gt;
*vim /opt/docker/hedgedoc/.env&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DB_PASSWORD=EinLangesPasswortHierEintragen&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*chmod 600 /opt/docker/hedgedoc/.env&lt;br /&gt;
&lt;br /&gt;
;Compose-Datei anlegen&lt;br /&gt;
*vim /opt/docker/hedgedoc/compose.yaml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  database:&lt;br /&gt;
    image: postgres:16-alpine&lt;br /&gt;
    container_name: hedgedoc-db&lt;br /&gt;
    restart: unless-stopped&lt;br /&gt;
    environment:&lt;br /&gt;
      - POSTGRES_USER=hedgedoc&lt;br /&gt;
      - POSTGRES_PASSWORD=${DB_PASSWORD}&lt;br /&gt;
      - POSTGRES_DB=hedgedoc&lt;br /&gt;
    volumes:&lt;br /&gt;
      - hedgedoc-db:/var/lib/postgresql/data&lt;br /&gt;
    networks:&lt;br /&gt;
      - intern&lt;br /&gt;
&lt;br /&gt;
  hedgedoc:&lt;br /&gt;
    image: quay.io/hedgedoc/hedgedoc:1.10.0&lt;br /&gt;
    container_name: hedgedoc&lt;br /&gt;
    restart: unless-stopped&lt;br /&gt;
    environment:&lt;br /&gt;
      - CMD_DB_URL=postgres://hedgedoc:${DB_PASSWORD}@hedgedoc-db:5432/hedgedoc&lt;br /&gt;
      - CMD_DOMAIN=hedgedoc.it2XX.xinmen.de&lt;br /&gt;
      - CMD_PROTOCOL_USESSL=true&lt;br /&gt;
      - CMD_URL_ADDPORT=false&lt;br /&gt;
    volumes:&lt;br /&gt;
      - hedgedoc-uploads:/hedgedoc/public/uploads&lt;br /&gt;
    depends_on:&lt;br /&gt;
      - database&lt;br /&gt;
    networks:&lt;br /&gt;
      - intern&lt;br /&gt;
      - proxy&lt;br /&gt;
&lt;br /&gt;
volumes:&lt;br /&gt;
  hedgedoc-db:&lt;br /&gt;
  hedgedoc-uploads:&lt;br /&gt;
&lt;br /&gt;
networks:&lt;br /&gt;
  intern:&lt;br /&gt;
  proxy:&lt;br /&gt;
    external: true&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Erklärung&lt;br /&gt;
* &amp;lt;code&amp;gt;.env&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;docker compose&amp;lt;/code&amp;gt; liest diese Datei im Projektverzeichnis automatisch. &amp;lt;code&amp;gt;${DB_PASSWORD}&amp;lt;/code&amp;gt; wird beim Start ersetzt. Das Passwort steht so nicht in der compose.yaml.&lt;br /&gt;
* &amp;lt;code&amp;gt;networks: intern&amp;lt;/code&amp;gt;: wird vom Projekt selbst angelegt (ohne &amp;lt;code&amp;gt;external&amp;lt;/code&amp;gt;). Nur die beiden HedgeDoc-Container hängen darin.&lt;br /&gt;
* &amp;lt;code&amp;gt;depends_on&amp;lt;/code&amp;gt;: Innerhalb desselben Projekts funktioniert es. Die Datenbank wird vor HedgeDoc gestartet.&lt;br /&gt;
&lt;br /&gt;
;Hinweis Reverse-Proxy-Variablen&lt;br /&gt;
HedgeDoc muss wissen, unter welcher URL es von außen erreichbar ist. Sonst erzeugt&lt;br /&gt;
es Links auf CSS und JavaScript mit falscher Adresse und die Seite erscheint ohne Styling:&lt;br /&gt;
* &amp;lt;code&amp;gt;CMD_DOMAIN&amp;lt;/code&amp;gt;: externer Hostname&lt;br /&gt;
* &amp;lt;code&amp;gt;CMD_PROTOCOL_USESSL=true&amp;lt;/code&amp;gt;: Links als https:// erzeugen, obwohl HedgeDoc intern nur HTTP spricht (TLS macht Caddy)&lt;br /&gt;
* &amp;lt;code&amp;gt;CMD_URL_ADDPORT=false&amp;lt;/code&amp;gt;: keinen Port an die URLs hängen&lt;br /&gt;
&lt;br /&gt;
;Merksatz&lt;br /&gt;
Ein neuer Dienst braucht vier Dinge: eigenes Verzeichnis, eigener container_name,&lt;br /&gt;
Anbindung an das Netz &amp;lt;code&amp;gt;proxy&amp;lt;/code&amp;gt; mit &amp;lt;code&amp;gt;external: true&amp;lt;/code&amp;gt;, eigener Host-Block&lt;br /&gt;
in der Caddyfile mit &amp;lt;code&amp;gt;container_name:Port&amp;lt;/code&amp;gt;. Nach außen offen sind immer nur 80/443 bei Caddy.&lt;br /&gt;
&lt;br /&gt;
=== Starten und Stoppen ===&lt;br /&gt;
&lt;br /&gt;
Jeder Dienst wird aus seinem eigenen Verzeichnis gestartet. Die Reihenfolge ist&lt;br /&gt;
egal, solange das Netzwerk &amp;lt;code&amp;gt;proxy&amp;lt;/code&amp;gt; existiert.&lt;br /&gt;
&lt;br /&gt;
;Dienste starten&lt;br /&gt;
*cd /opt/docker/uptime-kuma &amp;amp;&amp;amp; docker compose up -d&lt;br /&gt;
*cd /opt/docker/hedgedoc &amp;amp;&amp;amp; docker compose up -d&lt;br /&gt;
*cd /opt/docker/caddy &amp;amp;&amp;amp; docker compose up -d&lt;br /&gt;
&lt;br /&gt;
;Status prüfen&lt;br /&gt;
*docker ps&lt;br /&gt;
&lt;br /&gt;
;Einzelnen Dienst stoppen&lt;br /&gt;
*cd /opt/docker/caddy &amp;amp;&amp;amp; docker compose down&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
&lt;br /&gt;
;Aufruf im Browser&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://kuma.it2XX.xinmen.de&lt;br /&gt;
https://hedgedoc.it2XX.xinmen.de&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beim ersten Aufruf fragt Uptime Kuma nach einem Admin-Account. Danach lassen sich&lt;br /&gt;
Monitore anlegen (Ping, TCP-Port, HTTP), z. B. für &amp;lt;code&amp;gt;https://hedgedoc.it2XX.xinmen.de&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;Zugriffslog ansehen&lt;br /&gt;
*tail -f /var/log/caddy/access.log&lt;br /&gt;
&lt;br /&gt;
;Nur die wichtigsten Felder (mit jq)&lt;br /&gt;
*apt install -y jq&lt;br /&gt;
*tail -f /var/log/caddy/access.log | jq -c &amp;#039;{ts, ip: .request.remote_ip, host: .request.host, uri: .request.uri, status}&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung für die Überwachung ==&lt;br /&gt;
&lt;br /&gt;
Im weiteren Kurs werden die Container überwacht, z. B. mit einem Wazuh-Agenten&lt;br /&gt;
auf diesem Server. Diese Quellen sind dafür interessant:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Quelle !! Wo !! Was steht drin&lt;br /&gt;
|-&lt;br /&gt;
| Caddy-Zugriffslog || &amp;lt;code&amp;gt;/var/log/caddy/access.log&amp;lt;/code&amp;gt; || jeder HTTP-Zugriff als JSON: Quell-IP, Host, URL, Statuscode, User-Agent&lt;br /&gt;
|-&lt;br /&gt;
| Container-Ausgaben || &amp;lt;code&amp;gt;/var/lib/docker/containers/*/*-json.log&amp;lt;/code&amp;gt; || stdout und stderr jedes Containers, z. B. Fehlermeldungen von HedgeDoc oder der Datenbank&lt;br /&gt;
|-&lt;br /&gt;
| Docker-Ereignisse || &amp;lt;code&amp;gt;docker events&amp;lt;/code&amp;gt; || Container gestartet, gestoppt, gelöscht, Image gezogen, &amp;lt;code&amp;gt;docker exec&amp;lt;/code&amp;gt; ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
| Docker-Daemon || &amp;lt;code&amp;gt;journalctl -u docker&amp;lt;/code&amp;gt; || Meldungen des Daemons selbst&lt;br /&gt;
|-&lt;br /&gt;
| Dateien und Socket || &amp;lt;code&amp;gt;/etc/docker&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/run/docker.sock&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/opt/docker&amp;lt;/code&amp;gt; || Änderungen an Konfiguration und compose-Dateien, Zugriffe auf den Socket (auditd)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Docker-Ereignisse live ansehen&lt;br /&gt;
*docker events&lt;br /&gt;
&lt;br /&gt;
In einem zweiten Terminal z. B. &amp;lt;code&amp;gt;docker exec -it caddy sh&amp;lt;/code&amp;gt; ausführen: Im ersten Terminal&lt;br /&gt;
erscheint ein &amp;lt;code&amp;gt;exec_create&amp;lt;/code&amp;gt;- und &amp;lt;code&amp;gt;exec_start&amp;lt;/code&amp;gt;-Ereignis. Genau solche Ereignisse sind für die Überwachung&lt;br /&gt;
interessant, weil ein Angreifer oder ein neugieriger Admin so in einen Container gelangt.&lt;br /&gt;
&lt;br /&gt;
;Merksatz&lt;br /&gt;
Was überwacht werden soll, muss zuerst an einer festen Stelle protokolliert werden:&lt;br /&gt;
Caddy schreibt nach &amp;lt;code&amp;gt;/var/log/caddy&amp;lt;/code&amp;gt;, Docker nach &amp;lt;code&amp;gt;/var/lib/docker/containers&amp;lt;/code&amp;gt;, Ereignisse liefert &amp;lt;code&amp;gt;docker events&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Cheat Sheet: Docker und docker compose ==&lt;br /&gt;
&lt;br /&gt;
=== Container ===&lt;br /&gt;
&lt;br /&gt;
;Laufende Container anzeigen&lt;br /&gt;
*docker ps&lt;br /&gt;
&lt;br /&gt;
;Alle Container anzeigen (auch gestoppte)&lt;br /&gt;
*docker ps -a&lt;br /&gt;
&lt;br /&gt;
;Logs eines Containers anzeigen&lt;br /&gt;
*docker logs caddy&lt;br /&gt;
&lt;br /&gt;
;Logs live mitverfolgen (wie tail -f)&lt;br /&gt;
*docker logs -f uptime-kuma&lt;br /&gt;
&lt;br /&gt;
;Nur die letzten 50 Zeilen&lt;br /&gt;
*docker logs --tail 50 hedgedoc&lt;br /&gt;
&lt;br /&gt;
;Shell im laufenden Container öffnen&lt;br /&gt;
*docker exec -it caddy sh&lt;br /&gt;
&lt;br /&gt;
;Einzelnen Befehl im Container ausführen&lt;br /&gt;
*docker exec caddy cat /etc/caddy/Caddyfile&lt;br /&gt;
&lt;br /&gt;
;Container neu starten&lt;br /&gt;
*docker restart caddy&lt;br /&gt;
&lt;br /&gt;
;Container stoppen / starten&lt;br /&gt;
*docker stop caddy&lt;br /&gt;
*docker start caddy&lt;br /&gt;
&lt;br /&gt;
;Details zu einem Container (IP, Mounts, Umgebungsvariablen)&lt;br /&gt;
*docker inspect uptime-kuma&lt;br /&gt;
&lt;br /&gt;
;Wo liegt die Logdatei eines Containers&lt;br /&gt;
*docker inspect --format &amp;#039;{{.LogPath}}&amp;#039; caddy&lt;br /&gt;
&lt;br /&gt;
;Ressourcenverbrauch live anzeigen&lt;br /&gt;
*docker stats&lt;br /&gt;
&lt;br /&gt;
=== Images ===&lt;br /&gt;
&lt;br /&gt;
;Lokale Images anzeigen&lt;br /&gt;
*docker images&lt;br /&gt;
&lt;br /&gt;
;Image aktualisieren (neue Version ziehen)&lt;br /&gt;
*docker pull louislam/uptime-kuma:1&lt;br /&gt;
&lt;br /&gt;
;Ungenutzte Images aufräumen&lt;br /&gt;
*docker image prune&lt;br /&gt;
&lt;br /&gt;
=== Netzwerke und Volumes ===&lt;br /&gt;
&lt;br /&gt;
;Netzwerke anzeigen&lt;br /&gt;
*docker network ls&lt;br /&gt;
&lt;br /&gt;
;Details zu einem Netzwerk (welche Container hängen drin, IPs)&lt;br /&gt;
*docker network inspect proxy&lt;br /&gt;
&lt;br /&gt;
;Volumes anzeigen&lt;br /&gt;
*docker volume ls&lt;br /&gt;
&lt;br /&gt;
;Wo liegt ein Volume auf dem Host&lt;br /&gt;
*docker volume inspect uptime-kuma_uptime-kuma-data&lt;br /&gt;
&lt;br /&gt;
;Hinweis&lt;br /&gt;
docker compose stellt Volume-Namen den Projektnamen voran, also dem Verzeichnisnamen:&lt;br /&gt;
aus &amp;lt;code&amp;gt;uptime-kuma-data&amp;lt;/code&amp;gt; im Verzeichnis &amp;lt;code&amp;gt;uptime-kuma&amp;lt;/code&amp;gt; wird &amp;lt;code&amp;gt;uptime-kuma_uptime-kuma-data&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== docker compose (im jeweiligen Dienst-Verzeichnis) ===&lt;br /&gt;
&lt;br /&gt;
;Stack starten (im Hintergrund)&lt;br /&gt;
*docker compose up -d&lt;br /&gt;
&lt;br /&gt;
;Stack stoppen und Container entfernen (Volumes bleiben erhalten)&lt;br /&gt;
*docker compose down&lt;br /&gt;
&lt;br /&gt;
;Status der Container dieses Projekts&lt;br /&gt;
*docker compose ps&lt;br /&gt;
&lt;br /&gt;
;Logs aller Container dieses Projekts&lt;br /&gt;
*docker compose logs&lt;br /&gt;
&lt;br /&gt;
;Logs live mitverfolgen&lt;br /&gt;
*docker compose logs -f&lt;br /&gt;
&lt;br /&gt;
;Dienst aktualisieren (neues Image ziehen, dann neu erstellen)&lt;br /&gt;
*docker compose pull&lt;br /&gt;
*docker compose up -d&lt;br /&gt;
&lt;br /&gt;
;Fertige Konfiguration anzeigen (mit eingesetzten Variablen aus .env)&lt;br /&gt;
*docker compose config&lt;br /&gt;
&lt;br /&gt;
=== Troubleshooting-Reihenfolge ===&lt;br /&gt;
&lt;br /&gt;
Wenn ein Dienst nicht erreichbar ist, immer in dieser Reihenfolge prüfen:&lt;br /&gt;
&lt;br /&gt;
# Läuft der Container überhaupt? → &amp;lt;code&amp;gt;docker ps&amp;lt;/code&amp;gt;&lt;br /&gt;
# Was sagen die Logs? → &amp;lt;code&amp;gt;docker logs -f containername&amp;lt;/code&amp;gt;&lt;br /&gt;
# Hängt er im richtigen Netz? → &amp;lt;code&amp;gt;docker network inspect proxy&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ist der Dienst intern erreichbar? → &amp;lt;code&amp;gt;docker exec -it caddy sh&amp;lt;/code&amp;gt;, dann &amp;lt;code&amp;gt;wget -O- http://uptime-kuma:3001&amp;lt;/code&amp;gt;&lt;br /&gt;
# Stimmt die Caddyfile? → &amp;lt;code&amp;gt;docker exec caddy caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile&amp;lt;/code&amp;gt;&lt;br /&gt;
# Kommt die Anfrage bei Caddy an? → &amp;lt;code&amp;gt;tail -f /var/log/caddy/access.log&amp;lt;/code&amp;gt;&lt;br /&gt;
# Zeigt der Name auf den Server? → &amp;lt;code&amp;gt;host kuma.it2XX.xinmen.de&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Merksatz&lt;br /&gt;
docker logs -f = erste Anlaufstelle bei jedem Problem | docker exec -it NAME sh =&lt;br /&gt;
das Problem von innen ansehen | docker network inspect = wer hängt wirklich in welchem Netz&lt;br /&gt;
&lt;br /&gt;
=== Merksatz (Zusammenfassung) ===&lt;br /&gt;
docker compose = ein YAML-File statt mehrerer docker-run-Befehle | getrenntes&lt;br /&gt;
Verzeichnis pro Dienst = unabhängige Compose-Projekte | gemeinsames Netz einmalig&lt;br /&gt;
anlegen und in jeder compose.yaml als external einbinden | container_name = DNS-Name&lt;br /&gt;
im internen Netz | nur Caddy veröffentlicht Ports | restart: unless-stopped, sonst&lt;br /&gt;
bleibt der Dienst nach dem Reboot aus | Logs an feste Stellen schreiben, damit sie&lt;br /&gt;
später überwacht werden können&lt;/div&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
</feed>