Aller au contenu principal
Acheter

Installation en 15 minutes

Installer Papyro

Ce guide vous accompagne dans l'installation de Papyro sur votre propre serveur. Des connaissances de base de Docker sont supposées.

1. Prérequis

  • Docker 24+ et docker compose v2
  • Minimum 2 Go de RAM, 10 Go de disque
  • Reverse proxy avec HTTPS (Cloudflare, Traefik, nginx)
  • Un domaine ou sous-domaine (p. ex. papyro.yourcompany.com)
  • Votre PAPYRO_LICENSE_KEY achetée (envoyée par e-mail)
  • Votre jeton GHCR (pour la récupération de l'image, envoyé par e-mail)

2. Configurer le répertoire de travail

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. Renseigner le fichier .env

Collez les valeurs issues de votre e-mail d'achat :

# 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=

Exécutez les commandes openssl rand dans votre terminal et collez les résultats. Ne les perdez pas — ils sont nécessaires pour accéder à la base de données.

Check-in de licence (et comment le désactiver)

Papyro envoie un petit signal de licence à admin.papyro.dev environ toutes les 12 heures et reçoit en retour un droit d'usage signé, afin que les changements de forfait, de nombre d'utilisateurs et d'expiration atteignent votre installation sans nouveau fichier de clé. Il transmet votre identifiant de licence, un hachage à sens unique de BETTER_AUTH_URL, le nombre d'utilisateurs en cours d'utilisation, la version de Papyro et un nonce à usage unique — jamais le contenu de l'espace de travail, les noms d'utilisateurs ni les adresses e-mail.

PAPYRO_LICENSE_CHECKIN_URL=off

Ajoutez cette ligne à .env pour une installation entièrement isolée du réseau. Votre clé signée continue de fonctionner hors ligne au niveau que vous avez acheté ; les changements de forfait arrivent alors sous forme de clé réémise.

Modules optionnels et réglages

Le fichier .env téléchargé contient plus d'options que le bloc ci-dessus. Tout est commenté par défaut — ne décommentez que ce dont vous avez besoin :

  • Salles de réunion — décommentez le service livekit, puis renseignez LIVEKIT_URL et LIVEKIT_API_SECRET. ROOMS_MAX_CONCURRENT plafonne le nombre de participants simultanés sur toutes les salles.
  • Sous-titres de salle en direct (50 langues parlées → 51 langues de sous-titres) — ajoutez le service translator, définissez ROOMS_TRANSLATION_ENABLED=true ainsi que vos propres DEEPGRAM_API_KEY et OPENAI_API_KEY. L'usage est facturé sur vos propres comptes. Les langues proposées dans les sélecteurs sont à votre choix via ROOMS_SPOKEN_LANGUAGES (par défaut : les sept langues de l'interface).
  • Sauvegardes externes — décommentez le service r2-sync et renseignez les valeurs R2_* pour dupliquer chaque nuit les exports de base de données et les fichiers téléversés vers Cloudflare R2.
  • Rétention — TRASH_RETENTION_DAYS, BOARD_TRASH_RETENTION_DAYS, ACTIVITY_RETENTION_DAYS, AUTH_EVENTS_RETENTION_DAYS et les autres variables remplacent la durée de conservation de chaque type d'enregistrement.
  • Notifications Helpdesk — NETGSM_* envoie un SMS lorsqu'un appel est marqué injoignable ; RESEND_API_KEY et RESEND_FROM activent les rapports d'activité par e-mail. Laisser vide désactive les deux.
  • Suivi des erreurs — ERROR_AI_ENABLED=0 désactive l'analyse de cause racine par IA (les traces de pile sont envoyées à OpenAI lorsque c'est activé). WEBHOOK_ALLOW_PRIVATE=1 autorise les webhooks de tableau à atteindre des destinataires en réseau privé.
  • Exploitation — DB_POOL_MAX, SHUTDOWN_DRAIN_MS, REALTIME_MAX_* et UPLOAD_MIN_FREE_BYTES ajustent la taille des pools, le temps de vidange, les plafonds de connexions temps réel et la garde d'espace disque libre.

Chaque valeur est documentée en ligne dans le .env que vous avez téléchargé. Vide signifie que la valeur par défaut s'applique.

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. Récupérer l'image Docker

Utilisez le jeton GHCR que nous vous avons envoyé par e-mail pour vous connecter et récupérer l'image :

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

docker pull ghcr.io/egebilge/papyro:latest

Épinglez un tag de version (par exemple :v0.2.0) dans docker-compose.yml pour la production, afin qu'une mise à niveau soit un choix et non un événement qui survient au prochain redémarrage.

5. Lancer l'application

docker compose up -d

Le démarrage initial prend 30 à 60 secondes (les migrations s'exécutent, les conteneurs démarrent).

6. Créer le premier administrateur

Ouvrez https://papyro.yourdomain.com dans un navigateur. L'assistant de configuration apparaît — saisissez les informations de votre premier utilisateur. Ce premier utilisateur est créé avec le rôle de super-administrateur et l'assistant ne s'exécute qu'une seule fois.

7. Vérifier l'état de la licence

Allez dans Admin → Licence (barre latérale). Votre nom de client, votre édition, votre nombre d'utilisateurs et votre date d'expiration devraient apparaître.

Dépannage
ErrorCause / SebepFix / Çözüm
PAPYRO_LICENSE_KEY is not setVariable d'environnement manquante ou copiée incorrectement.Collez la ligne exacte de votre e-mail d'achat dans .env. Redémarrez : docker compose up -d --force-recreate app
PAPYRO_LICENSE_KEY is invalid: malformed envelopeL'enveloppe a été copiée de façon incomplète (collage tronqué).Sélectionnez et copiez l'intégralité de la ligne PAPYRO_LICENSE_KEY=... depuis l'e-mail. La valeur doit contenir un point (.) séparant la charge utile et la signature.
PAPYRO_LICENSE_KEY is invalid: invalid signatureMauvaise version d'image, ou l'enveloppe appartient à un build d'un autre fournisseur.Vérifiez le tag de l'image dans votre commande docker pull. Pour obtenir de l'aide, contactez [email protected].
PAPYRO_LICENSE_KEY is invalid: license revokedLa licence a été révoquée dans le panneau du fournisseur et l'installation l'a détecté lors de son dernier check-in.Contactez [email protected]. S'il s'agit d'une erreur, un rétablissement est appliqué au prochain check-in — aucune nouvelle clé n'est nécessaire.
LICENSE_OVER_SEAT — Cannot add new userLa limite d'utilisateurs de votre licence est atteinte. Les utilisateurs bannis n'occupent pas de place.Écrivez à [email protected] pour augmenter le nombre d'utilisateurs, ou bannissez les utilisateurs qui sont partis.

Renouvellement

Nous vous envoyons un e-mail 30 jours avant l'expiration. Après le paiement, une nouvelle PAPYRO_LICENSE_KEY arrive par e-mail. Remplacez la valeur dans .env et redémarrez :

docker compose up -d --force-recreate app

Support

E-mail : [email protected]

Réponse sous 48 heures. Utilisez le préfixe d'objet « URGENT » pour les urgences.