Saltar al contenido
Autoalojado

Auto-hospeda Pluma con Docker

Ejecuta Pluma en tu propia infraestructura. Un contenedor, un fichero compose, cinco minutos de servidor limpio a app funcionando.

Linux · 2 vCPU · 4 GBDocker + Compose v2Licencia (solo planes de pago)
Inicio rápido

Inicio rápido (5 minutos)

1

Elige un directorio

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

Crea el fichero compose

Guardar como 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 el fichero env

Guardar como .env. Solo importan cuatro valores — el resto se genera automáticamente en el primer arranque.

# 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_URLDónde vive la instalación
LICENSE_KEYSolo planes de pago — déjalo vacío para Free
4

Arranca la pila

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

Verifica

Si ambos endpoints responden, está activo.

curl http://127.0.0.1:4100/health
# → {"ok":true,"service":"builder"}

Abre http://your-host:4100 y regístrate con el correo definido en

Optional integrations

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

Solo necesario para el flujo de firma electrónica en instalaciones Enterprise. Sirve cualquier URL SMTP estándar:

# ── 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=...
Actualizar

Actualizar

docker compose pull
docker compose up -d

Las migraciones de la base de datos se ejecutan automáticamente al arrancar el builder, antes de que el servidor HTTP acepte tráfico. Sin paso manual.

¿Necesitas una licencia?

El plan Free funciona sin licencia. Los planes Advanced y Pro necesitan una clave de licencia — compra una en nuestro sitio alojado, pégala en tu .env como LICENSE_KEY y vuelve a desplegar.