Vai al contenuto
Auto-hosting

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.

Linux · 2 vCPU · 4 GBDocker + Compose v2Licenza (solo piani a pagamento)
Avvio rapido

Avvio rapido (5 minuti)

1

Scegli una directory

sudo mkdir -p /opt/pluma && sudo chown $USER:$USER /opt/pluma
cd /opt/pluma
2

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:
3

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’installazione
LICENSE_KEYSolo piani a pagamento — lascia vuoto per Free
4

Avvia lo stack

docker compose up -d
docker compose logs -f pluma
5

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

Integrazioni opzionali

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

Aggiornamento

docker compose pull
docker compose up -d

Le 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.