Self-hosting di Pluma con Docker
Esegui Pluma sulla tua infrastruttura. Un container, un file compose, cinque minuti dal server vuoto all'app in funzione.
Avvio rapido (5 minuti)
Scegli una directory
Scegli una directory
sudo mkdir -p /opt/pluma && sudo chown $USER:$USER /opt/pluma
cd /opt/plumaCrea il file compose
Crea il file compose
Salva come docker-compose.yml.
services:
pluma:
image: mertdalbudak/pluma:latest
container_name: pluma
restart: unless-stopped
env_file: .env
ports:
- "4100:4100"
volumes:
- builder-data:/app/builder/data
# Lets the Pro+ Publish flow drive `docker buildx`. Remove this line
# if you won't publish workspace renderer images.
- /var/run/docker.sock:/var/run/docker.sock
healthcheck:
test: ["CMD", "wget", "-qO-", "http://localhost:4100/health"]
interval: 30s
timeout: 5s
retries: 5
volumes:
builder-data:
Crea il file env
Crea il file env
Salva come .env. Contano solo quattro valori — il resto viene generato automaticamente al primo avvio.
# Where Pluma is reachable (use https://… when fronted by TLS).
PUBLIC_URL=http://localhost:4100
# Paid tiers: paste your license key. Free tier: leave blank.
LICENSE_KEY=
# Database (optional) — unset uses a bundled SQLite file; point at your
# own PostgreSQL to back it up and scale it yourself.
# DATABASE_URL=postgresql://USER:PASS@host:5432/pluma
# Object storage (optional) — defaults to the local data volume; set these
# for S3-compatible storage (MinIO, R2, S3, B2, …).
# STORAGE_BACKEND=s3
# S3_BUCKET=pluma
# S3_ENDPOINT=https://your-s3-endpoint
# S3_REGION=eu-central-1
# S3_ACCESS_KEY=...
# S3_SECRET_KEY=...
# Email (optional) — only for the enterprise e-signature workflow. Any SMTP
# URL works; without it /sign-requests is disabled and everything else runs
# offline.
# SMTP_URL=smtp://user:[email protected]:587
# EMAIL_FROM=Pluma <[email protected]>
# [email protected]
PUBLIC_URLDove vive l’installazioneLICENSE_KEYSolo piani a pagamento — lascia vuoto per FreeAvvia lo stack
Avvia lo stack
docker compose up -d
docker compose logs -f plumaVerifica
Verifica
Se entrambi gli endpoint rispondono, è attivo.
curl http://127.0.0.1:4100/health
# → {"ok":true,"service":"builder"}Apri http://your-host:4100 e registrati con l’e-mail impostata in
Plug in only what you need
The core install runs offline — no external services required. The integrations below are opt-in, configured through .env, and only activate the feature they're paired with.
SMTP — e-signature workflow
Necessario solo per il flusso di firma elettronica sulle installazioni Enterprise. Va bene qualsiasi URL SMTP standard:
# ── Transactional email (optional; needed for /sign-requests) ──
SMTP_URL=smtp://user:[email protected]:587
EMAIL_FROM=Pluma <[email protected]>
[email protected]Branding — make it look like yours
After the first sign-in, the dashboard Settings → Branding page lets you replace "Pluma" with your product name, swap in your own logo (header + email) and favicon, set an accent colour, and add a legal footer to every transactional email. Changes hot-swap immediately — no restart, no env-var dance. Self-hosted only; hosted SaaS branding is Pluma-owned.
Object storage — share state across nodes
By default uploaded PDFs and images live in the builder-data volume. Point STORAGE_BACKEND at any S3-compatible service (MinIO, Hetzner, R2, B2, AWS) when you want to scale horizontally, run multiple builder replicas, or take the data volume off the application host.
STORAGE_BACKEND=s3
S3_BUCKET=pluma
S3_ENDPOINT=https://your-s3-endpoint
S3_REGION=eu-central-1
S3_ACCESS_KEY=...
S3_SECRET_KEY=...Aggiornamento
docker compose pull
docker compose up -dLe migrazioni del database vengono eseguite automaticamente all'avvio del builder, prima che il server HTTP accetti traffico. Nessun passaggio manuale.
Serve una licenza?
Il piano Free funziona senza licenza. I piani Advanced e Pro richiedono una chiave di licenza — acquistane una sul nostro sito hosted, incollala nel tuo .env come LICENSE_KEY e ridistribuisci.