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 .env3. 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=offFü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:latestLegen 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 -dDer 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.
| Error | Cause / Sebep | Fix / Çözüm |
|---|---|---|
| PAPYRO_LICENSE_KEY is not set | Umgebungsvariable 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 envelope | Der 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 signature | Falsche 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 revoked | Die 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 user | Ihr 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 appSupport
E-Mail: [email protected]
Antwort innerhalb von 48 Stunden. Verwenden Sie das Betreff-Präfix "URGENT" für Notfälle.