<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://techcorner.max-it.de/index.php?action=history&amp;feed=atom&amp;title=DocuSeal%3A_Installation_mit_Docker_Compose</id>
	<title>DocuSeal: Installation mit Docker Compose - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://techcorner.max-it.de/index.php?action=history&amp;feed=atom&amp;title=DocuSeal%3A_Installation_mit_Docker_Compose"/>
	<link rel="alternate" type="text/html" href="https://techcorner.max-it.de/index.php?title=DocuSeal:_Installation_mit_Docker_Compose&amp;action=history"/>
	<updated>2026-10-19T03:44:24Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in maxTechCorner</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://techcorner.max-it.de/index.php?title=DocuSeal:_Installation_mit_Docker_Compose&amp;diff=4824&amp;oldid=prev</id>
		<title>imported&gt;TechCorner-Redaktion: Neuer Artikel: compose.yaml mit PostgreSQL und Caddy, SECRET_KEY_BASE, Ersteinrichtung, SMTP, Speicher, Updates</title>
		<link rel="alternate" type="text/html" href="https://techcorner.max-it.de/index.php?title=DocuSeal:_Installation_mit_Docker_Compose&amp;diff=4824&amp;oldid=prev"/>
		<updated>2026-10-17T00:00:00Z</updated>

		<summary type="html">&lt;p&gt;Neuer Artikel: compose.yaml mit PostgreSQL und Caddy, SECRET_KEY_BASE, Ersteinrichtung, SMTP, Speicher, Updates&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Steckbrief&lt;br /&gt;
| gilt_fuer   = DocuSeal 3.3.x als Docker-Container (Image docuseal/docuseal) mit PostgreSQL 18 auf Linux, z. B. Debian 13 oder Ubuntu 24.04 mit Docker Engine und Compose-Plugin&lt;br /&gt;
| bereich     = Server-Software&lt;br /&gt;
| dauer       = ca. 45–60 Minuten&lt;br /&gt;
| rechte      = Root bzw. Mitglied der Gruppe docker&lt;br /&gt;
| stand       = Oktober 2026&lt;br /&gt;
}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DocuSeal mit Docker Compose installieren&amp;#039;&amp;#039;&amp;#039; dauert weniger als eine Stunde: ein Anwendungscontainer, eine PostgreSQL-Datenbank und ein Reverse Proxy für HTTPS. Diese Anleitung baut auf der offiziellen Compose-Datei auf, ergänzt sie um feste Versionen, geschützte Zugangsdaten und einen E-Mail-Server und zeigt die Ersteinrichtung, die Wahl des Dateispeichers und den Ablauf von Updates.&lt;br /&gt;
&lt;br /&gt;
[[Datei:DocuSeal-Installation.png|thumb|center|750px|Installation von DocuSeal mit Docker Compose: Container docuseal/docuseal auf Port 3000 mit Datenordner /data/docuseal (Anhänge und docuseal.env mit SECRET_KEY_BASE), PostgreSQL 18 als Datenbank, Caddy als Reverse Proxy mit Let&amp;#039;s-Encrypt-Zertifikat; Ersteinrichtung im Browser mit Firmenname, App-URL und Administratorkonto; SMTP für Signaturanfragen; Dateien lokal oder in S3; Updates mit festem Versions-Tag, docker compose pull und up -d.]]&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
* Linux-Server oder VM mit &amp;#039;&amp;#039;&amp;#039;Docker Engine&amp;#039;&amp;#039;&amp;#039; und Compose-Plugin, siehe [[Docker]]. Für kleine und mittlere Unternehmen reichen 2 vCPU, 4 GB RAM und Speicher nach Dokumentenmenge.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;DNS-Name&amp;#039;&amp;#039;&amp;#039; wie &amp;lt;code&amp;gt;sign.firma.de&amp;lt;/code&amp;gt;. Empfänger außerhalb des Unternehmens müssen die Adresse aus dem Internet erreichen – anders als bei rein internen Diensten.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SMTP-Konto&amp;#039;&amp;#039;&amp;#039; für Einladungen und Abschlussmails, siehe [[SMTP]]. Die Absenderdomain braucht SPF, DKIM und DMARC, sonst landen Signaturanfragen im Spam.&lt;br /&gt;
* Ports 80 und 443 für den Reverse Proxy.&lt;br /&gt;
&lt;br /&gt;
== Datenbank wählen ==&lt;br /&gt;
Ohne &amp;lt;code&amp;gt;DATABASE_URL&amp;lt;/code&amp;gt; nutzt DocuSeal &amp;#039;&amp;#039;&amp;#039;SQLite&amp;#039;&amp;#039;&amp;#039; im Datenordner – gut für Tests. Für den Produktivbetrieb empfiehlt sich &amp;#039;&amp;#039;&amp;#039;[[PostgreSQL]]&amp;#039;&amp;#039;&amp;#039;, wie in der offiziellen Compose-Datei: bessere Parallelität, saubere Dumps, Volltextsuche. MySQL wird ebenfalls unterstützt.&lt;br /&gt;
&lt;br /&gt;
== Schritt 1: Verzeichnis und Geheimnisse ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mkdir -p /opt/docuseal &amp;amp;&amp;amp; cd /opt/docuseal&lt;br /&gt;
cat &amp;gt; .env &amp;lt;&amp;lt;EOF&lt;br /&gt;
HOST=sign.firma.de&lt;br /&gt;
PG_PASSWORD=$(openssl rand -hex 24)&lt;br /&gt;
SECRET_KEY_BASE=$(openssl rand -hex 64)&lt;br /&gt;
SMTP_PASSWORD=...&lt;br /&gt;
EOF&lt;br /&gt;
chmod 600 .env&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SECRET_KEY_BASE&amp;#039;&amp;#039;&amp;#039; verschlüsselt Sitzungen und die in der Datenbank gespeicherten Einstellungen – darunter SMTP-Zugang und Signaturzertifikate. Ohne diesen Wert ist ein Datenbank-Backup wertlos. Er gehört ins Backup und zusätzlich in den Passwortmanager der IT.&lt;br /&gt;
* Ohne gesetzten Wert erzeugt DocuSeal selbst eine Datei &amp;lt;code&amp;gt;/data/docuseal/docuseal.env&amp;lt;/code&amp;gt; mit einem zufälligen Schlüssel. Das funktioniert, ist aber leichter zu übersehen.&lt;br /&gt;
&lt;br /&gt;
== Schritt 2: DocuSeal mit Docker Compose konfigurieren ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  app:&lt;br /&gt;
    image: docuseal/docuseal:3.3.2&lt;br /&gt;
    restart: unless-stopped&lt;br /&gt;
    depends_on:&lt;br /&gt;
      postgres:&lt;br /&gt;
        condition: service_healthy&lt;br /&gt;
    volumes:&lt;br /&gt;
      - ./docuseal:/data/docuseal&lt;br /&gt;
    environment:&lt;br /&gt;
      DATABASE_URL: postgresql://docuseal:${PG_PASSWORD}@postgres:5432/docuseal&lt;br /&gt;
      SECRET_KEY_BASE: ${SECRET_KEY_BASE}&lt;br /&gt;
      FORCE_SSL: &amp;quot;true&amp;quot;&lt;br /&gt;
      APP_URL: https://${HOST}&lt;br /&gt;
      SMTP_ADDRESS: smtp.firma.de&lt;br /&gt;
      SMTP_PORT: &amp;quot;587&amp;quot;&lt;br /&gt;
      SMTP_USERNAME: docuseal@firma.de&lt;br /&gt;
      SMTP_PASSWORD: ${SMTP_PASSWORD}&lt;br /&gt;
      SMTP_FROM: &amp;quot;Unterschriften Firma GmbH &amp;lt;docuseal@firma.de&amp;gt;&amp;quot;&lt;br /&gt;
      SMTP_DOMAIN: firma.de&lt;br /&gt;
&lt;br /&gt;
  postgres:&lt;br /&gt;
    image: postgres:18&lt;br /&gt;
    restart: unless-stopped&lt;br /&gt;
    volumes:&lt;br /&gt;
      - ./pg_data:/var/lib/postgresql/18/docker&lt;br /&gt;
    environment:&lt;br /&gt;
      POSTGRES_USER: docuseal&lt;br /&gt;
      POSTGRES_PASSWORD: ${PG_PASSWORD}&lt;br /&gt;
      POSTGRES_DB: docuseal&lt;br /&gt;
    healthcheck:&lt;br /&gt;
      test: [&amp;quot;CMD-SHELL&amp;quot;, &amp;quot;pg_isready -U docuseal&amp;quot;]&lt;br /&gt;
      interval: 5s&lt;br /&gt;
      timeout: 5s&lt;br /&gt;
      retries: 5&lt;br /&gt;
&lt;br /&gt;
  caddy:&lt;br /&gt;
    image: caddy:2&lt;br /&gt;
    restart: unless-stopped&lt;br /&gt;
    command: caddy reverse-proxy --from ${HOST} --to app:3000&lt;br /&gt;
    ports:&lt;br /&gt;
      - 80:80&lt;br /&gt;
      - 443:443&lt;br /&gt;
      - 443:443/udp&lt;br /&gt;
    volumes:&lt;br /&gt;
      - ./caddy:/data/caddy&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Im Unterschied zur offiziellen Datei: feste Versionen statt &amp;lt;code&amp;gt;latest&amp;lt;/code&amp;gt;, eigenes Datenbankpasswort statt &amp;lt;code&amp;gt;postgres&amp;lt;/code&amp;gt;, Datenbankport nicht veröffentlicht.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;FORCE_SSL&amp;#039;&amp;#039;&amp;#039; sorgt für HTTPS-Links in E-Mails und sichere Cookies. &amp;#039;&amp;#039;&amp;#039;APP_URL&amp;#039;&amp;#039;&amp;#039; legt die Adresse fest; ohne sie wird sie in der Ersteinrichtung abgefragt.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SMTP&amp;#039;&amp;#039;&amp;#039; kann alternativ in der Oberfläche unter &amp;#039;&amp;#039;Einstellungen › E-Mail&amp;#039;&amp;#039; eingetragen werden. Umgebungsvariablen haben den Vorteil, dass die Konfiguration im Backup der Compose-Dateien steckt.&lt;br /&gt;
* Läuft bereits ein Reverse Proxy (z. B. nginx oder die OPNsense, siehe [[OPNsense - Caddy Reverse Proxy]]), den Caddy-Dienst weglassen und den Port der App nur an &amp;lt;code&amp;gt;127.0.0.1:3000&amp;lt;/code&amp;gt; binden.&lt;br /&gt;
* Die App läuft im Container als Benutzer mit der UID 2000 und passt die Rechte des Datenordners beim Start an.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker compose up -d &amp;amp;&amp;amp; docker compose logs -f app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Der Start ist abgeschlossen, wenn &amp;lt;code&amp;gt;https://sign.firma.de/up&amp;lt;/code&amp;gt; mit Status 200 antwortet.&lt;br /&gt;
&lt;br /&gt;
== Schritt 3: Ersteinrichtung ==&lt;br /&gt;
# &amp;lt;code&amp;gt;https://sign.firma.de&amp;lt;/code&amp;gt; aufrufen. Beim ersten Start erscheint die Ersteinrichtung.&lt;br /&gt;
# Firmenname, Vor- und Nachname, E-Mail, Passwort, Sprache und Zeitzone (&amp;#039;&amp;#039;Europe/Berlin&amp;#039;&amp;#039;) eintragen.&lt;br /&gt;
# Unter &amp;#039;&amp;#039;Einstellungen › Profil&amp;#039;&amp;#039; sofort die &amp;#039;&amp;#039;&amp;#039;Zwei-Faktor-Authentifizierung&amp;#039;&amp;#039;&amp;#039; einrichten und unter &amp;#039;&amp;#039;Einstellungen › Konto&amp;#039;&amp;#039; für alle Benutzer erzwingen, siehe [[DocuSeal: Absichern, Backup und Betrieb]].&lt;br /&gt;
# Unter &amp;#039;&amp;#039;Einstellungen › E-Mail&amp;#039;&amp;#039; eine Testmail senden.&lt;br /&gt;
# Unter &amp;#039;&amp;#039;Einstellungen › Benutzer&amp;#039;&amp;#039; Kollegen einladen. In der freien Version haben alle Benutzer die Rolle Administrator.&lt;br /&gt;
# Unter &amp;#039;&amp;#039;Einstellungen › E-Signatur&amp;#039;&amp;#039; das Signaturzertifikat und einen Zeitstempel-Server festlegen, siehe [[DocuSeal: Signaturzertifikate, Zeitstempel und Prüfung]].&lt;br /&gt;
&lt;br /&gt;
== Dateispeicher ==&lt;br /&gt;
Hochgeladene und signierte Dokumente liegen standardmäßig im Datenordner unter &amp;lt;code&amp;gt;attachments/&amp;lt;/code&amp;gt;. Für große Mengen oder getrennte Sicherung lässt sich ein Objektspeicher anbinden:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Speicher !! Umgebungsvariablen&lt;br /&gt;
|-&lt;br /&gt;
| S3 oder S3-kompatibel (z. B. MinIO, Hetzner, IONOS) || &amp;lt;code&amp;gt;S3_ATTACHMENTS_BUCKET&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AWS_ACCESS_KEY_ID&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AWS_SECRET_ACCESS_KEY&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AWS_REGION&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;S3_ENDPOINT&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Google Cloud Storage || &amp;lt;code&amp;gt;GCS_BUCKET&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;GCS_PROJECT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;GCS_CREDENTIALS&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Azure Blob Storage || &amp;lt;code&amp;gt;AZURE_CONTAINER&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AZURE_STORAGE_ACCOUNT_NAME&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AZURE_STORAGE_ACCESS_KEY&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
* Ohne diese Variablen lässt sich der Speicher auch unter &amp;#039;&amp;#039;Einstellungen › Speicher&amp;#039;&amp;#039; einrichten.&lt;br /&gt;
* Den Bucket &amp;#039;&amp;#039;&amp;#039;privat&amp;#039;&amp;#039;&amp;#039; lassen; &amp;lt;code&amp;gt;ACTIVE_STORAGE_PUBLIC&amp;lt;/code&amp;gt; nicht auf &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt; setzen. Bei Cloud-Speichern Standort in der EU wählen und Auftragsverarbeitung prüfen, siehe [[Objektspeicher]].&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /opt/docuseal&lt;br /&gt;
# vorher sichern, siehe Backup-Artikel&lt;br /&gt;
# Tag in compose.yaml anheben, dann:&lt;br /&gt;
docker compose pull &amp;amp;&amp;amp; docker compose up -d &amp;amp;&amp;amp; docker compose logs --tail 50 app&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* DocuSeal veröffentlicht etwa wöchentlich neue Versionen. Viele enthalten Sicherheitskorrekturen; der Hersteller empfiehlt Selbsthostern ausdrücklich, aktuell zu bleiben.&lt;br /&gt;
* Datenbankmigrationen laufen beim Start automatisch. Bei sehr großen Datenbanken kann der Start einige Minuten dauern, wie bei 3.1.3 angekündigt.&lt;br /&gt;
* Release Notes auf GitHub lesen: Änderungen betreffen teils das eingebettete Formular oder die API.&lt;br /&gt;
&lt;br /&gt;
== Hinweise ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Testinstanz&amp;#039;&amp;#039;&amp;#039;: Neue Versionen und Vorlagen zuerst auf einer Kopie prüfen; DocuSeal bietet außerdem einen &amp;#039;&amp;#039;Testmodus&amp;#039;&amp;#039; für die API.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ressourcen&amp;#039;&amp;#039;&amp;#039;: Große PDFs mit vielen Seiten brauchen beim Erzeugen der Ergebnisdokumente kurzzeitig viel Arbeitsspeicher. 3.3.2 hat den Spitzenbedarf beim Hochladen großer Dateien gesenkt.&lt;br /&gt;
* Bei Aufbau und Betrieb von Linux-Servern und Containern unterstützt Sie das [https://www.max-it.de/it-services/linux-consulting/ Linux-Consulting von m.a.x. it].&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[DocuSeal]] – Überblick und alle Artikel der Reihe&lt;br /&gt;
* [[DocuSeal: Vorlagen erstellen und Dokumente zur Unterschrift senden]]&lt;br /&gt;
* [[DocuSeal: Absichern, Backup und Betrieb]]&lt;br /&gt;
* [[Reverse Proxy]]&lt;br /&gt;
&lt;br /&gt;
== Links und Quellen ==&lt;br /&gt;
* [https://github.com/docusealco/docuseal/blob/master/docker-compose.yml DocuSeal: offizielle docker-compose.yml]&lt;br /&gt;
* [https://www.max-it.de/it-services/linux-consulting/ Linux-Consulting von m.a.x. it]&lt;br /&gt;
&lt;br /&gt;
{{Uebermax}}&lt;br /&gt;
[[Kategorie:Server-Software]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;TechCorner-Redaktion</name></author>
	</entry>
</feed>