Ana içeriğe geç
Versiyon: 1.0.1

Kendi sunucunda çalıştırma

Crewhall tek bir Linux sunucuda Docker Compose ile çalışır. Bu sayfa gerekenleri, yığını başlatmayı, ilk kurulum sihirbazını, isteğe bağlı servisleri ve yedekleme, geri yükleme ve güncellemeyi anlatır. Örneklerde hub.example.com kullanılır; kendi alan adınla değiştir.

Gereksinimler​

  • En az 2 vCPU, 4 GB RAM ve dosyalar için yeterli diski olan bir Linux sunucu.
  • Docker Engine 24 ya da üstü ve Compose v2 (docker compose version).
  • Sunucuyu gösteren DNS A/AAAA kayıtları:
    • hub.example.com: uygulama ve API.
    • s3.example.com: dosya yükleme ve indirme. Tarayıcı bu adrese doğrudan bağlanır.
    • İsteğe bağlı: docs.example.com (portal sitesi), lk.example.com (toplantılar) ve office.example.com (Office belgeleri).
  • İnternete açık 80 ve 443 portları.
  • Giden e-posta için bir SMTP hesabı. Zorunlu değil ama önerilir.

Yığın​

Yığın docker/compose.yml dosyasında tanımlıdır. Şu servisler her zaman çalışır:

ServisGörevi
caddyTLS ve yönlendirme. /api, /ws, /mcp, /dav ve OAuth yollarını backend'e, /collab'ı collab'a, gerisini web'e gönderir.
webWeb uygulaması (statik dosyalar).
backendAPI, giriş, gerçek zamanlı olaylar (/ws) ve MCP sunucusu.
workerArka plan işleri: önizleme, link kontrolü, push, e-posta özeti, gece temizliği.
collabSayfa ve pano kartlarında ortak düzenleme.
postgresVeritabanı (PostgreSQL 17).
seaweedfsS3 uyumlu dosya deposu.

backend, worker ve collab aynı imajı farklı komutlarla çalıştırır.

Ortam dosyasını hazırla​

git clone https://github.com/Milvasoft/crewhall.git crewhall && cd crewhall
cp docker/.env.example docker/.env

docker/.env dosyasını düzenle. En önemli değerler:

DeğişkenDeğer
HUB_DOMAIN, S3_DOMAINİki alan adı, ör. hub.example.com ve s3.example.com.
ACME_EMAILSertifika uyarıları için e-posta adresi.
POSTGRES_PASSWORDUzun, rastgele bir parola.
AUTH_SECRETopenssl rand -base64 32 çıktısı.
S3_ACCESS_KEY, S3_SECRET_KEYRastgele anahtar ve parola. SeaweedFS bunlarla açılır.
SMTP_URL, MAIL_FROMÖr. smtp://kullanici:[email protected]:587 ve gönderen adresi.
SETUP_TOKENBoş kalabilir. Boşsa ilk açılışta rastgele bir anahtar üretilip loglara yazılır.
uyarı

AUTH_SECRET değişirse bütün oturumlar düşer ve kayıtlı 2FA sırları okunamaz. docker/.env dosyasını yedekle ve sürüm denetimine koyma.

80 ve 443 portları doluysa ya da önde başka bir ters vekil varsa HTTP_PORT ve HTTPS_PORT değerlerini, ayrıca HUB_URL, S3_PUBLIC_URL, COLLAB_PUBLIC_URL ve PORTAL_PUBLIC_URL genel adreslerini ayarla. Port 443 değilse adrese portu da yaz, ör. https://hub.example.com:8443.

Yığını başlat​

docker compose -f docker/compose.yml --env-file docker/.env up -d --build
docker compose -f docker/compose.yml --env-file docker/.env ps

İlk açılışta imajlar derlenir, bu birkaç dakika sürer. Backend açılırken veritabanı migration'larını kendisi çalıştırır. Worker, backend sağlıklı olunca başlar. Hazır imaj kullanıyorsan CREWHALL_REGISTRY ve CREWHALL_VERSION değerlerini ayarla, --build yerine pull kullan.

Hazır olduğunu kontrol et:

curl -s https://hub.example.com/readyz

Yanıt {"status":"ready"} olmalıdır.

İlk kurulum sihirbazı​

  1. Kurulum anahtarını loglardan al:
    docker compose -f docker/compose.yml --env-file docker/.env logs backend | grep -i "setup"
  2. https://hub.example.com adresini aç. Sihirbaz önce kurulum anahtarını ister, sonra dört adımda ilerler: Kurum (ad, kimlik ve varsayılan dil), İlk yönetici (kurum sahibi hesabı), Ortak space'ler ve Ekibi davet et. Sistem kontrolü veritabanının, depolamanın ve e-postanın bağlı olup olmadığını gösterir.
  3. Kurum sahibi ilk girişte iki adımlı doğrulamayı (TOTP ya da passkey) açmak zorundadır.

Kurulum bitince anahtar bir daha işe yaramaz. Kurum adı, logo ve renkleri sonradan Yönetim › Marka'dan değiştirebilirsin. Bkz. Yönetim.

DNS ve TLS​

Caddy sertifikaları Let's Encrypt'ten kendisi alır. Bunun için DNS kayıtlarının sunucuyu göstermesi ve 80 ile 443 portlarının erişilebilir olması gerekir. Sertifika alınamıyorsa DNS'i ve güvenlik duvarını kontrol et, sonra docker compose ... logs caddy çıktısına bak.

Caddy'nin önüne başka bir vekil koyarsan /ws ve /collab yollarını WebSocket olarak geçirmeli (Upgrade başlığını iletmeli). Yoksa sohbet ve ortak düzenleme anlık güncellenmez.

Depolama​

Dosyalar varsayılan olarak paketle gelen SeaweedFS'e gider. Yükleme ve indirmeler imzalı adreslerle yapılır, yani tarayıcı S3_DOMAIN ile doğrudan konuşur. Tarayıcıda https://s3.example.com açınca XML bir hata sayfası görünmesi normaldir.

Compose dosyasındaki S3_* ayarlarını değiştirerek başka bir S3 uyumlu servis kullanabilirsin. Kovanın CORS ayarı hub alan adına izin vermeli ve ETag başlığını açmalıdır.

E-posta​

SMTP_URL ayarlıysa Crewhall davetleri, şifre sıfırlama ve bildirim e-postalarını gönderir. Ayarlı değilse davetler senin ileteceğin bağlantılar olarak gösterilir, şifre sıfırlama ve bildirim e-postaları gitmez. Yöneticiler Yönetim › Bildirim gönderimi'nden ayrı bir SMTP sunucusu da tanımlayabilir ve oradan test e-postası gönderebilir.

İsteğe bağlı profiller​

Ek servisleri --profile ile açarsın. Her biri docker/.env içinde kendi ayarlarını ister.

ProfilServislerNe için
meetLiveKit, egress, coturn, ValkeyGörüntülü toplantı ve aramalar
portalNext.js portal sitesiHerkese açık doküman ve blog sitesi
officeEuro-Office belge sunucusuWord, Excel ve PowerPoint düzenleme
aiKonuşma tanıma sunucusuToplantı notları ve dikte

Toplantılar (meet)​

  1. LK_DOMAIN, LIVEKIT_API_KEY, LIVEKIT_API_SECRET, TURN_USER ve TURN_PASSWORD değerlerini yaz. Kayıt için MEET_EGRESS_ENABLED=true yap. Egress 2-4 GB RAM ister.
  2. 7881/tcp, 50000-60000/udp, 3478/udp ve 3478/tcp ile 49160-49200/udp portlarını aç.
  3. --profile meet ile başlat.

LiveKit'in DNS kaydı doğrudan sunucuyu göstermeli. Bir CDN vekili kullanıyorsan bu kayıtta vekili kapat, çünkü medya UDP kullanır. Anahtarlar boşken toplantılar kullanılamaz, geri kalan her şey çalışır. Bkz. Toplantılar.

Portal sitesi (portal)​

  1. Portal › Ayarlar'da Next.js bağlantısı altından okuma anahtarını oluştur.
  2. PORTAL_DOMAIN, PORTAL_CONTENT_TOKEN (okuma anahtarı) ve PORTAL_REVALIDATE_SECRET değerlerini yaz.
  3. --profile portal ile başlat. Yayınlanan değişiklikler birkaç saniyede sitede görünür. Bkz. Portal.

Office belgeleri (office)​

Belge sunucusu kendi lisansıyla (AGPLv3) dağıtılan, değiştirilmemiş ayrı bir servistir. Crewhall onunla yalnız ağ üzerinden konuşur.

  1. OFFICE_DOMAIN ve OFFICE_JWT_SECRET (32 ya da daha fazla rastgele karakter) değerlerini yaz.
  2. --profile office ile başlat. En az 4 GB bellek ister.
  3. Yönetim › Entegrasyonlar › Office'te sunucu adresi olarak https://office.example.com, iç adres olarak http://office ve aynı JWT sırrını gir. Bağlantıyı dene'yi seç, sonra Office düzenlemeyi aç.

Konuşma tanıma (ai)​

ai profili OpenAI uyumlu API'si olan bir konuşma tanıma sunucusu çalıştırır. Yönetim › Yapay zekâ › Toplantı notları'nda konuşma tanıma sunucusunu http://whisper:8000/v1 yap ve bir model seç. Model ilk kullanımda indirilir.

Yedekleme, geri yükleme ve güncelleme​

tools/crewhall içindeki crewhall komutu veritabanını ve dosyaları yedekler, geri yükler ve yığını günceller. Sunucuda, repo kökünde çalıştır.

tools/crewhall/crewhall backup
tools/crewhall/crewhall list
tools/crewhall/crewhall restore <kimlik>
tools/crewhall/crewhall export <kimlik> > crewhall-yedek.tar
tools/crewhall/crewhall import < crewhall-yedek.tar
tools/crewhall/crewhall prune --keep 14
  • Yedekler backups Docker hacminde durur. Dosyalar içeriğe göre bir kez saklanır, her yedek yalnız değişenleri ekler.
  • Yedekleri export ile düzenli olarak sunucu dışına kopyala.
  • restore uygulama servislerini durdurur, veritabanını ve dosyaları yedekteki hâline getirir ve servisleri yeniden açar.
  • docker/.env varsayılan olarak yedeğe girmez. --with-config ile şifreli eklenir; parola CREWHALL_BACKUP_PASSPHRASE ortam değişkeninden okunur.
  • Geri yüklerken yedeğin alındığı kurulumun AUTH_SECRET değerini kullan.
  • Kullanıyorsan --profile meet ya da --profile portal ekle.

Gece yedeğini Yönetim › Yedekler'den de açabilirsin.

Güncellemek için:

tools/crewhall/crewhall update 1.5.0          # hazır imajlar
git pull && tools/crewhall/crewhall update --build # kaynaktan kurulum

Komut önce yedek alır, sonra yeni sürümü açar. Backend sağlıklı açılmazsa eski imajları, eski .env dosyasını ve yedeği geri koyar.

ipucu

Log ve izleri OTEL_EXPORTER_OTLP_ENDPOINT ile herhangi bir OTLP alıcısına gönderebilirsin. Yoksa docker compose ... logs -f backend worker yeterlidir.