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 .env3. 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=offAjoutez 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 -dLe 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.
| Error | Cause / Sebep | Fix / Çözüm |
|---|---|---|
| PAPYRO_LICENSE_KEY is not set | Variable 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 envelope | L'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 signature | Mauvaise 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 revoked | La 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 user | La 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 appSupport
E-mail : [email protected]
Réponse sous 48 heures. Utilisez le préfixe d'objet « URGENT » pour les urgences.