Install Papyro
This guide walks through installing Papyro on your own server. Basic Docker knowledge is assumed.
1. Requirements
- Docker 24+ and docker compose v2
- Minimum 2 GB RAM, 10 GB disk
- Reverse proxy with HTTPS (Cloudflare, Traefik, nginx)
- A domain or subdomain (e.g. papyro.yourcompany.com)
- Your purchased LICENSE_KEY (emailed)
- Your GHCR token (for image pull, emailed)
2. Set up the working directory
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. Fill in the .env file
Paste the values from your purchase email:
# 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)
LICENSE_KEY=eyJ2IjoxLCJjdXN0b21lciI6...
# R2 backup (optional)
R2_ACCOUNT_ID=
R2_ACCESS_KEY_ID=
R2_SECRET_ACCESS_KEY=
R2_BUCKET=Run the openssl rand commands in your terminal and paste the outputs. Don't lose these — they're required to access the DB.
4. Pull the Docker image
Use the GHCR token we emailed you to log in and pull the image:
echo "ghp_xxxxxxxxxxxx" | docker login ghcr.io \
-u egebilge --password-stdin
docker pull ghcr.io/egebilge/papyro:v1.0.05. Run it
docker compose up -dInitial startup takes 30–60 seconds (migrations run, containers come up).
6. Create the first admin
Open https://papyro.yourdomain.com in a browser. The setup wizard appears — enter your first-user details. This first user is created with the super-admin role and the wizard runs exactly once.
7. Verify license status
Go to Admin → License (sidebar). Your customer name, edition, seat count and expiry date should appear.
Troubleshooting
Renewal
We email you 30 days before expiry. After payment a new LICENSE_KEY arrives via email. Replace the value in .env and restart:
docker compose up -d --force-recreate appSupport
Email: [email protected]
Response within 48 hours. Use subject prefix "URGENT" for emergencies.