Zum Hauptinhalt springen
Jetzt kaufen

15-Minuten-Einrichtung

Papyro installieren

Diese Anleitung führt durch die Installation von Papyro auf Ihrem eigenen Server. Grundlegende Docker-Kenntnisse werden vorausgesetzt.

1. Voraussetzungen

  • Docker 24+ und docker compose v2
  • Mindestens 2 GB RAM, 10 GB Festplatte
  • Reverse-Proxy mit HTTPS (Cloudflare, Traefik, nginx)
  • Eine Domain oder Subdomain (z. B. papyro.yourcompany.com)
  • Ihr erworbener PAPYRO_LICENSE_KEY (per E-Mail zugestellt)
  • Ihr GHCR-Token (zum Abrufen des Images, per E-Mail)

2. Arbeitsverzeichnis einrichten

mkdir papyro && cd papyro
curl -fsSL https://papyro.dev/install/docker-compose.yml -o docker-compose.yml
curl -fsSL https://papyro.dev/install/env.example -o .env

3. Die .env-Datei ausfüllen

Fügen Sie die Werte aus Ihrer Kauf-E-Mail ein:

# Domain
BETTER_AUTH_URL=https://papyro.yourcompany.com

# Database password (generate randomly)
DB_PASSWORD=$(openssl rand -hex 16)

# Better Auth secret (generate randomly)
BETTER_AUTH_SECRET=$(openssl rand -hex 32)

# Redis password (generate randomly)
REDIS_PASSWORD=$(openssl rand -hex 16)

# Cron secret (generate randomly)
CRON_SECRET=$(openssl rand -hex 32)

# License (from your purchase email)
PAPYRO_LICENSE_KEY=eyJ2IjoxLCJjdXN0b21lciI6...

# License check-in is ON by default. Uncomment to run fully air-gapped:
# PAPYRO_LICENSE_CHECKIN_URL=off

# AG Grid Enterprise license (data-grid block renders watermarked without it)
AG_GRID_LICENSE_KEY=

# OpenAI API key ("ask the grid" feature)
OPENAI_API_KEY=

# R2 backup (optional)
R2_ACCOUNT_ID=
R2_ACCESS_KEY_ID=
R2_SECRET_ACCESS_KEY=
R2_BUCKET=

Führen Sie die openssl rand-Befehle in Ihrem Terminal aus und fügen Sie die Ausgaben ein. Verlieren Sie diese nicht — sie werden für den Zugriff auf die DB benötigt.

Lizenz-Check-in (und wie Sie es abschalten)

Papyro sendet etwa alle 12 Stunden ein kleines Lizenz-Signal an admin.papyro.dev und erhält im Gegenzug eine signierte Berechtigung, sodass Änderungen an Plan, Plätzen und Ablaufdatum Ihre Installation erreichen, ohne dass eine neue Schlüsseldatei nötig ist. Es sendet Ihre Lizenz-ID, einen Einweg-Hash von BETTER_AUTH_URL, die genutzten Plätze, die Papyro-Version und eine einmalige Nonce — niemals Workspace-Inhalte, Benutzernamen oder E-Mail-Adressen.

PAPYRO_LICENSE_CHECKIN_URL=off

Fügen Sie diese Zeile für eine vollständig abgeschottete (air-gapped) Installation in .env ein. Ihr signierter Schlüssel funktioniert dann offline auf der von Ihnen erworbenen Stufe weiter; Planänderungen erreichen Sie dann stattdessen als neu ausgestellter Schlüssel.

Optionale Module und Feinabstimmung

Die heruntergeladene .env enthält mehr Schalter als der obige Block. Standardmäßig ist hier alles auskommentiert — kommentieren Sie nur ein, was Sie brauchen:

  • Meeting-Räume — kommentieren Sie den livekit-Dienst ein und setzen Sie dann LIVEKIT_URL und LIVEKIT_API_SECRET. ROOMS_MAX_CONCURRENT begrenzt die gleichzeitigen Teilnehmer über alle Räume hinweg.
  • Live-Untertitel in Räumen (50 gesprochene Sprachen → 51 Untertitelsprachen) — fügen Sie den translator-Dienst hinzu, setzen Sie ROOMS_TRANSLATION_ENABLED=true sowie Ihren eigenen DEEPGRAM_API_KEY und OPENAI_API_KEY. Die Nutzung wird über Ihre eigenen Konten abgerechnet. Welche Sprachen die Auswahlfelder anbieten, bestimmen Sie über ROOMS_SPOKEN_LANGUAGES (Standard: die sieben Oberflächensprachen).
  • Externe Backups — kommentieren Sie den r2-sync-Dienst ein und füllen Sie die R2_*-Werte aus, um Datenbank-Dumps und Uploads nächtlich zu Cloudflare R2 zu spiegeln.
  • Aufbewahrung — TRASH_RETENTION_DAYS, BOARD_TRASH_RETENTION_DAYS, ACTIVITY_RETENTION_DAYS, AUTH_EVENTS_RETENTION_DAYS und die übrigen Werte überschreiben, wie lange jeder Datensatztyp aufbewahrt wird.
  • Helpdesk-Benachrichtigungen — NETGSM_* sendet eine SMS, wenn ein Anruf als nicht erreichbar markiert wird; RESEND_API_KEY und RESEND_FROM aktivieren Aktivitätsberichte per E-Mail. Leer deaktiviert beides.
  • Fehler-Tracking — ERROR_AI_ENABLED=0 schaltet die KI-Ursachenanalyse ab (Stack-Traces werden an OpenAI gesendet, wenn sie aktiviert ist). WEBHOOK_ALLOW_PRIVATE=1 erlaubt Board-Webhooks, private Netzwerkempfänger zu erreichen.
  • Betrieb — DB_POOL_MAX, SHUTDOWN_DRAIN_MS, REALTIME_MAX_* und UPLOAD_MIN_FREE_BYTES steuern Pool-Größen, Drain-Zeit, Obergrenzen für Echtzeitverbindungen und die Freispeicher-Absicherung.

Jeder Wert ist in der von Ihnen heruntergeladenen .env inline dokumentiert. Leer bedeutet, dass der eingebaute Standardwert gilt.

Hardening: encryption at rest

Like other self-hosted collaboration tools, Papyro stores workspace content as regular PostgreSQL rows so search and exports work; application-layer secrets (integration credentials) are additionally encrypted. Protecting the data at rest is done at the disk layer of your server:

  • Encrypt the disk or volume that holds your Docker volumes — LUKS on bare-metal Linux, or your cloud provider's encrypted block storage.
  • Database dumps land in the dbbackups volume on the same disk. If you copy them elsewhere, keep them encrypted in transit and at the destination.
  • If you enable the optional R2 backup sync, Cloudflare encrypts stored objects at rest; scope the API token to that single bucket.

HTTPS in front of the app is already required (step 1). Combined with disk encryption and encrypted backups this matches the at-rest baseline that SOC 2 / ISO 27001 questionnaires expect.

4. Das Docker-Image abrufen

Verwenden Sie das GHCR-Token, das wir Ihnen per E-Mail geschickt haben, um sich anzumelden und das Image abzurufen:

echo "ghp_xxxxxxxxxxxx" | docker login ghcr.io \
  -u egebilge --password-stdin

docker pull ghcr.io/egebilge/papyro:latest

Legen Sie in docker-compose.yml für den produktiven Einsatz einen Versions-Tag fest (zum Beispiel :v0.2.0), damit ein Upgrade etwas ist, das Sie wählen, statt beim nächsten Neustart einfach zu passieren.

5. Ausführen

docker compose up -d

Der erste Start dauert 30–60 Sekunden (Migrationen laufen, Container fahren hoch).

6. Den ersten Administrator anlegen

Öffnen Sie https://papyro.yourdomain.com in einem Browser. Der Einrichtungsassistent erscheint — geben Sie die Daten Ihres ersten Nutzers ein. Dieser erste Nutzer wird mit der Super-Admin-Rolle angelegt, und der Assistent läuft genau einmal.

7. Lizenzstatus überprüfen

Gehen Sie zu Admin → Lizenz (Seitenleiste). Ihr Kundenname, Ihre Edition, Anzahl der Plätze und Ablaufdatum sollten erscheinen.

Fehlerbehebung
ErrorCause / SebepFix / Çözüm
PAPYRO_LICENSE_KEY is not setUmgebungsvariable fehlt oder wurde falsch kopiert.Fügen Sie die exakte Zeile aus Ihrer Kauf-E-Mail in .env ein. Neu starten: docker compose up -d --force-recreate app
PAPYRO_LICENSE_KEY is invalid: malformed envelopeDer Umschlag wurde unvollständig kopiert (abgeschnittenes Einfügen).Markieren und kopieren Sie die gesamte Zeile PAPYRO_LICENSE_KEY=... aus der E-Mail. Der Wert muss einen Punkt (.) enthalten, der Payload und Signatur trennt.
PAPYRO_LICENSE_KEY is invalid: invalid signatureFalsche Image-Version, oder der Umschlag gehört zu einem anderen Vendor-Build.Überprüfen Sie das Image-Tag in Ihrem docker pull-Befehl. Für Hilfe kontaktieren Sie [email protected].
PAPYRO_LICENSE_KEY is invalid: license revokedDie Lizenz wurde im Vendor-Panel widerrufen, und die Installation hat dies beim letzten Check-in übernommen.Kontaktieren Sie [email protected]. Handelt es sich um einen Irrtum, wird beim nächsten Check-in eine Wiederherstellung angewendet — kein neuer Schlüssel nötig.
LICENSE_OVER_SEAT — Cannot add new userIhr Lizenzlimit an Plätzen ist ausgeschöpft. Gesperrte Benutzer belegen keinen Platz.Schreiben Sie an [email protected], um die Platzzahl zu erhöhen, oder sperren Sie Benutzer, die das Team verlassen haben.

Verlängerung

Wir schreiben Ihnen 30 Tage vor Ablauf eine E-Mail. Nach der Zahlung erhalten Sie per E-Mail einen neuen PAPYRO_LICENSE_KEY. Ersetzen Sie den Wert in .env und starten Sie neu:

docker compose up -d --force-recreate app

Support

E-Mail: [email protected]

Antwort innerhalb von 48 Stunden. Verwenden Sie das Betreff-Präfix "URGENT" für Notfälle.