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
Attiva solo ciò che ti serve
L’installazione di base funziona offline: non richiede servizi esterni. Le integrazioni seguenti sono opzionali, si configurano tramite .env e attivano solo la funzione a cui sono associate.
SMTP — flusso di firma elettronica
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]Brand — dagli il tuo aspetto
Dopo il primo accesso, la pagina Impostazioni → Brand della dashboard ti permette di sostituire «Pluma» con il nome del tuo prodotto, inserire il tuo logo (intestazione + e-mail) e la favicon, impostare un colore d’accento e aggiungere un piè di pagina legale a ogni e-mail transazionale. Le modifiche hanno effetto subito: nessun riavvio, nessuna gestione di variabili d’ambiente. Solo self-hosted; il brand del SaaS gestito da noi resta di Pluma.
Object storage — condividi lo stato tra i nodi
Per impostazione predefinita i PDF e le immagini caricati risiedono nel volume builder-data. Punta STORAGE_BACKEND a un qualsiasi servizio compatibile con S3 (MinIO, Hetzner, R2, B2, AWS) quando vuoi scalare orizzontalmente, eseguire più repliche del builder o spostare il volume dei dati fuori dall’host applicativo.
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.