Ana içeriğe geç

15 dakikalık iş

Papyro kurulumu

Bu rehber Papyro'yu kendi sunucunuza kurmanın adımlarını anlatır. Docker hakkında temel bilgi varsayılmaktadır.

1. Gereksinimler

  • Docker 24+ ve docker compose v2
  • En az 2 GB RAM, 10 GB disk
  • HTTPS sonlandırması yapabilen bir reverse proxy (Cloudflare, Traefik, nginx)
  • Bir domain veya subdomain (örn. papyro.sirketiniz.com)
  • Satın aldığınız PAPYRO_LICENSE_KEY (e-posta ile gönderildi)
  • Bizden aldığınız GHCR token (image pull için)

2. Çalışma dizinini hazırla

mkdir papyro && cd papyro
curl -fsSL https://papyro.dev/install/docker-compose.yml -o docker-compose.yml
curl -fsSL https://papyro.dev/install/env.example -o .env

3. .env dosyasını doldur

Satın alma e-postasından gelen değerleri yapıştırın:

# Domain
BETTER_AUTH_URL=https://papyro.yourcompany.com

# Database password (generate randomly)
DB_PASSWORD=$(openssl rand -hex 16)

# Better Auth secret (generate randomly)
BETTER_AUTH_SECRET=$(openssl rand -hex 32)

# Redis password (generate randomly)
REDIS_PASSWORD=$(openssl rand -hex 16)

# Cron secret (generate randomly)
CRON_SECRET=$(openssl rand -hex 32)

# License (from your purchase email)
PAPYRO_LICENSE_KEY=eyJ2IjoxLCJjdXN0b21lciI6...

# License check-in is ON by default. Uncomment to run fully air-gapped:
# PAPYRO_LICENSE_CHECKIN_URL=off

# AG Grid Enterprise license (data-grid block renders watermarked without it)
AG_GRID_LICENSE_KEY=

# OpenAI API key ("ask the grid" feature)
OPENAI_API_KEY=

# R2 backup (optional)
R2_ACCOUNT_ID=
R2_ACCESS_KEY_ID=
R2_SECRET_ACCESS_KEY=
R2_BUCKET=

openssl rand komutlarını terminalde çalıştırıp çıkan değerleri yapıştırın. Bu değerleri kaybetmeyin — DB'ye erişim için gereklidir.

Lisans check-in'i (ve nasıl kapatılır)

Papyro yaklaşık 12 saatte bir admin.papyro.dev adresine küçük bir lisans sinyali gönderir ve imzalı bir yetki belgesi alır; böylece plan, koltuk ve süre değişiklikleri yeni bir anahtar dosyası olmadan kurulumunuza iner. Gönderilenler: lisans kimliği, BETTER_AUTH_URL'in tek yönlü özeti, kullanımdaki koltuk sayısı, Papyro sürümü ve tek kullanımlık nonce — çalışma alanı içeriği, kullanıcı adı veya e-posta adresi asla gönderilmez.

PAPYRO_LICENSE_CHECKIN_URL=off

İnternete hiç çıkmayan bir kurulum için bu satırı .env dosyanıza ekleyin. İmzalı anahtarınız satın aldığınız seviyede çevrimdışı çalışmayı sürdürür; plan değişiklikleri bu durumda yeniden üretilmiş bir anahtarla gelir.

İsteğe bağlı modüller ve ayarlar

İndirdiğiniz .env yukarıdaki bloktan daha fazla anahtar içerir. Buradakilerin tamamı varsayılan olarak yorum satırıdır — yalnızca ihtiyacınız olanların başındaki # işaretini kaldırın:

  • Toplantı odaları — livekit servisini açın, LIVEKIT_URL ve LIVEKIT_API_SECRET değerlerini girin. ROOMS_MAX_CONCURRENT tüm odalardaki eşzamanlı katılımcı tavanını belirler.
  • Odalarda canlı altyazı (50 konuşma dili → 51 altyazı dili) — translator servisini ekleyin, ROOMS_TRANSLATION_ENABLED=true yapın ve kendi DEEPGRAM_API_KEY ile OPENAI_API_KEY değerlerinizi girin. Kullanım sizin hesaplarınıza faturalanır. Seçicilerde sunulan dilleri ROOMS_SPOKEN_LANGUAGES ile siz belirlersiniz (varsayılan: yedi arayüz dili).
  • Dış yedek — r2-sync servisini açıp R2_* değerlerini doldurun; veritabanı yedekleri ve yüklemeler her gece Cloudflare R2'ye kopyalanır.
  • Saklama süreleri — TRASH_RETENTION_DAYS, BOARD_TRASH_RETENTION_DAYS, ACTIVITY_RETENTION_DAYS, AUTH_EVENTS_RETENTION_DAYS ve diğerleri her kayıt türünün ne kadar tutulacağını değiştirir.
  • Destek Masası bildirimleri — NETGSM_* bir çağrı "ulaşılamadı" işaretlendiğinde SMS gönderir; RESEND_API_KEY ve RESEND_FROM saha faaliyet raporlarını e-postayla gönderir. Boş bırakmak ikisini de kapatır.
  • Hata takibi — ERROR_AI_ENABLED=0 yapay zekâ kök neden analizini kapatır (açıkken stack trace'ler OpenAI'ye gönderilir). WEBHOOK_ALLOW_PRIVATE=1 pano webhook'larının iç ağdaki alıcılara ulaşmasına izin verir.
  • İşletim — DB_POOL_MAX, SHUTDOWN_DRAIN_MS, REALTIME_MAX_* ve UPLOAD_MIN_FREE_BYTES havuz boyutu, kapanış süresi, gerçek zamanlı bağlantı tavanı ve boş alan koruması için.

Her değerin açıklaması indirdiğiniz .env dosyasının içinde satır satır yazılıdır. Boş bırakılan değerlerde kod varsayılanı geçerlidir.

Sıkılaştırma: at-rest şifreleme

Papyro, diğer self-hosted işbirliği araçları gibi çalışma alanı içeriğini normal PostgreSQL satırları olarak saklar; arama ve dışa aktarma böyle çalışır. Uygulama katmanındaki gizli bilgiler (entegrasyon kimlik bilgileri) ayrıca şifrelenir. Verinin diskte korunması sunucunuzun disk katmanında yapılır:

  • Docker volume'larının bulunduğu diski veya bölümü şifreleyin — bare-metal Linux'ta LUKS, bulutta sağlayıcınızın şifreli blok depolaması.
  • Veritabanı yedekleri aynı diskteki dbbackups volume'una düşer. Başka bir yere kopyalıyorsanız aktarımda ve hedefte şifreli tutun.
  • İsteğe bağlı R2 yedek senkronunu açarsanız Cloudflare nesneleri diskte şifreli saklar; API token'ı yalnızca o bucket'a yetkilendirin.

Uygulamanın önünde HTTPS zaten zorunlu (1. adım). Disk şifreleme ve şifreli yedeklerle birlikte bu, SOC 2 / ISO 27001 anketlerinin beklediği at-rest taban çizgisini karşılar.

4. Docker image'ını çek

E-postayla gönderdiğimiz GHCR token'ı ile giriş yapın ve image'ı çekin:

echo "ghp_xxxxxxxxxxxx" | docker login ghcr.io \
  -u egebilge --password-stdin

docker pull ghcr.io/egebilge/papyro:latest

Üretimde docker-compose.yml içinde bir sürüm etiketi sabitleyin (örn. :v0.2.0); böylece yükseltme, bir sonraki yeniden başlatmada kendiliğinden olan bir şey değil, sizin seçtiğiniz bir adım olur.

5. Çalıştır

docker compose up -d

İlk başlatma 30-60 saniye sürer (migration çalışır, container'lar ayağa kalkar).

6. İlk admin'i oluştur

Tarayıcıdan https://papyro.sirketiniz.com adresini açın. Kurulum sihirbazı ekranı çıkacak — ilk kullanıcı bilgilerinizi girin. Bu ilk kullanıcı super-admin rolünde oluşturulur; sihirbaz yalnızca bir kez çalışır.

7. Lisans durumunu doğrula

Admin → Lisans sayfasına gidin (kenar çubuğu). Müşteri adınız, edition, koltuk sayısı ve bitiş tarihi görünmelidir.

Sorun giderme
ErrorCause / SebepFix / Çözüm
PAPYRO_LICENSE_KEY is not setEnv değişkeni eksik veya yanlış kopyalanmış.Satın alma e-postasındaki satırı tam olarak .env dosyasına yapıştırın. Yeniden başlatın: docker compose up -d --force-recreate app
PAPYRO_LICENSE_KEY is invalid: malformed envelopeZarf eksik kopyalanmış (yarım yapıştırma).E-postadaki PAPYRO_LICENSE_KEY=... satırının tamamını seçip kopyalayın. Değer, yükü ve imzayı ayıran bir nokta (.) içermelidir.
PAPYRO_LICENSE_KEY is invalid: invalid signatureYanlış imaj sürümü kullanılıyor ya da zarf başka bir üretici derlemesine ait.docker pull komutundaki imaj etiketini kontrol edin. Yardım için [email protected].
PAPYRO_LICENSE_KEY is invalid: license revokedLisans üretici panelinde iptal edilmiş ve kurulum bunu son check-in'de almış.[email protected] ile iletişime geçin. Yanlışlıksa geri alma bir sonraki check-in'de uygulanır — yeni anahtar gerekmez.
LICENSE_OVER_SEAT — Yeni kullanıcı eklenemiyorLisans koltuk limitiniz dolmuş. Banlanan kullanıcılar koltuk işgal etmez.Koltuk sayısını artırmak için [email protected]'e yazın ya da ayrılan kullanıcıları banlayın.

Yenileme

Lisans bitimine 30 gün kala size bir hatırlatma e-postası gönderiyoruz. Yenileme ücretini ödedikten sonra yeni PAPYRO_LICENSE_KEY satırı e-postayla gelir. Bu satırı .env dosyasında eskisinin yerine yazın ve container'ı yeniden başlatın:

docker compose up -d --force-recreate app

Destek

E-posta: [email protected]

48 saat içinde yanıt veriyoruz. Acil durumlar için "URGENT" ile başlayan konu satırı kullanın.