İçeriğe geç
Kendi sunucunuzda

Pluma'yı Docker ile kendi sunucunuzda barındırın

Pluma'yı kendi altyapınızda çalıştırın. Tek konteyner, tek compose dosyası, temiz sunucudan çalışan uygulamaya beş dakika.

Linux · 2 vCPU · 4 GBDocker + Compose v2Lisans (yalnızca ücretli planlar)
Hızlı başlangıç

Hızlı başlangıç (5 dakika)

1

Bir dizin seçin

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

compose dosyasını oluşturun

Şu adla kaydet docker-compose.yml.

services:
  pluma:
    # Pin a version tag (e.g. mertdalbudak/pluma:<version>) so updates happen
    # when you decide; `latest` follows every release.
    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`. WARNING: mounting
      # the Docker socket hands the container control over the Docker host
      # (root-equivalent). Remove this line unless you use Publish, and
      # never keep it on a shared host.
      - /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

env dosyasını oluşturun

Şu adla kaydet .env. Sadece dört değer önemli — gerisi ilk açılışta otomatik üretilir.

# 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]

# Document seal for signed PDFs. A self-signed seal is generated on first use
# and kept next to the data directory; point these at a certificate from an
# Adobe-trusted CA (or a qualified seal certificate) to make PDF readers show
# the seal as trusted. PLUMA_SEAL_TSA_URL adds an RFC 3161 timestamp.
# PLUMA_SEAL_CERT_FILE=/etc/pluma/seal.crt
# PLUMA_SEAL_KEY_FILE=/etc/pluma/seal.key
# PLUMA_SEAL_NAME=Your Company Document Seal
# PLUMA_SEAL_TSA_URL=http://timestamp.digicert.com
PUBLIC_URLKurulumun yaşadığı yer
LICENSE_KEYYalnızca ücretli planlar — Free için boş bırakın
4

Stack'i başlatın

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

Doğrulayın

İki uç nokta da yanıt veriyorsa, çalışıyor.

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

Açın http://your-host:4100 ve şu e-postayla kaydolun

İsteğe bağlı entegrasyonlar

Yalnızca ihtiyacınız olanı bağlayın

Çekirdek kurulum çevrimdışı çalışır — harici hizmet gerekmez. Aşağıdaki entegrasyonlar isteğe bağlıdır, .env üzerinden yapılandırılır ve yalnızca eşleştirildikleri özelliği etkinleştirir.

SMTP — e-imza akışı

Yalnızca Enterprise kurulumlarındaki e-imza iş akışı için gereklidir. Herhangi bir standart SMTP adresi çalışır:

# ── Transactional email (optional; needed for /sign-requests) ──
SMTP_URL=smtp://user:[email protected]:587
EMAIL_FROM=Pluma <[email protected]>
[email protected]

Marka — kendi görünümünüzü verin

İlk girişten sonra panodaki Ayarlar → Marka sayfası, „Pluma” yerine kendi ürün adınızı yazmanıza, kendi logonuzu (üst bilgi + e-posta) ve favicon’unuzu koymanıza, bir vurgu rengi belirlemenize ve her işlem e-postasına yasal bir alt bilgi eklemenize olanak tanır. Değişiklikler anında geçerli olur — yeniden başlatma yok, ortam değişkeniyle uğraşmak yok. Yalnızca kendi sunucunuzda barındırmada; barındırılan SaaS’ın markası Pluma’ya aittir.

Nesne depolama — durumu düğümler arasında paylaşın

Varsayılan olarak yüklenen PDF’ler ve görseller builder-data biriminde tutulur. Yatay ölçeklemek, birden fazla builder kopyası çalıştırmak ya da veri birimini uygulama sunucusundan ayırmak istediğinizde STORAGE_BACKEND değerini S3 uyumlu herhangi bir hizmete (MinIO, Hetzner, R2, B2, AWS) yönlendirin.

STORAGE_BACKEND=s3
S3_BUCKET=pluma
S3_ENDPOINT=https://your-s3-endpoint
S3_REGION=eu-central-1
S3_ACCESS_KEY=...
S3_SECRET_KEY=...
Güncelleme

Güncelleme

docker compose pull
docker compose up -d

Veritabanı migrasyonları, HTTP sunucusu trafik kabul etmeden önce builder açılışında otomatik çalışır. Manuel adım yok.

İşletim notları

  • İmajı sabitleyin. Compose dosyasındaki `latest` yerine bir sürüm etiketi (`mertdalbudak/pluma:<sürüm>`) yazın; güncellemeler böylece siz karar verdiğinizde yapılır. Geri almak için önceki etiketi yazıp iki güncelleme komutunu yeniden çalıştırın; yeni sürüm veritabanı şemasını değiştirdiyse güncellemeden önce aldığınız yedeği geri yükleyin.
  • Docker soketi. Compose dosyasındaki isteğe bağlı Docker soketi bağlaması, konteynere Docker ana makinesi üzerinde kontrol verir — fiilen root. Publish akışını kullanmıyorsanız bunu eklemeyin; paylaşılan bir ana makinede ise asla.
  • Lisans heartbeat’i. Ücretli seviyeler lisans servisini günde bir kez çağırır (imaja gömülü lisans ana makinesinde POST /api/v1/licenses/heartbeat) ve yalnızca lisans anahtarının hash’ini ve yazılım sürümünü gönderir. Servise ulaşılamazsa ücretli limitler 14 gün boyunca (PLUMA_LICENSE_GRACE_DAYS) geçerli kalır, sonra bir heartbeat başarılı olana kadar Free’ye düşer. Free kurulumlar hiçbir zaman bağlantı kurmaz.

Lisans mı gerekiyor?

Free planı lisanssız çalışır. Advanced ve Pro planları bir lisans anahtarı gerektirir — barındırılan sitemizden bir tane satın alın, .env'inize LICENSE_KEY olarak yapıştırın ve yeniden dağıtın.