# Sunucuya kurulum

Tüm ofis için bir Linux sunucuda Lumate: tek komut kurar, OXS Cloud'dan (veya çevrimdışı bir paketten) kendini günceller,
her gün kendini yedekler ve bir güncelleme başlamazsa kendiliğinden geri döner. Tek bir Windows bilgisayarda Lumate için
bkz. [Lumate Local](/tr/docs/install-windows).

## Neye ihtiyacınız var

| Öğe | Gereksinim |
|---|---|
| Sunucu | Ubuntu 22.04 veya 24.04 ya da Debian 12; x86_64; 2 vCPU, 4 GB RAM (8 GB önerilir), 40 GB disk. Her servisin belleği sınırlıdır (toplamda en çok yaklaşık 5,3 GB; sunucu ve çalıştırıcı 2'şer GB; çalıştırıcıya daha fazla vermenin yolu [Operasyonlar](/tr/docs/operations#logs) bölümünde) |
| Ağ | Sunucuda 80 ve 443 numaralı bağlantı noktaları boş; OXS Cloud, OpenAI, Anthropic ve WhatsApp'a giden HTTPS |
| Adres | Sunucuyu gösteren genel bir alan adı (Let's Encrypt) ya da ofis ağındaki adı ve adresi |
| Lisans | OXS portalından lisans anahtarınız (ya da kurulumdan sonra tarayıcıda etkinleştirin) |
| Claude | Şirketin Claude hesabı (sunucuda bir kez oturum açılır) ya da Anthropic API anahtarı |
| OpenAI (ses için) | Şirketin kendi OpenAI API anahtarı |

Docker Engine yoksa yükleyici onu sunucuya kurar (Docker'ın kendi deposundan, sorduktan sonra).

## Kurulum

Sunucuda, root olarak:

```bash
curl -fsSL https://api.lumate.io/install.sh -o install.sh
sudo bash install.sh --key axk_yourlicencekey
```

Önce yükleyiciyi kontrol etmek isterseniz (isteğe bağlı), aşağıdaki adımları bu iki satırın arasında çalıştırın.

### Yükleyiciyi kontrol etme (isteğe bağlı)

`install.sh`, Lumate'in sürüm anahtarıyla imzalanır ve OXS Cloud yalnızca imzalı olanı yayımlar. İndirilen dosyayı
çalıştırmadan önce kendiniz kontrol etmek için, sunucuda:

```bash
curl -fsSLO https://api.lumate.io/install.sh.sig
printf -- '-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEA+bzBByJhjJ0huDTd2QQWNGRgQF52lo8TKCODtRzV4yo=\n-----END PUBLIC KEY-----\n' > lumate-release.pem
{ printf 'lumate-install-script-v1\0'; cat install.sh; } > install.signed
openssl pkeyutl -verify -pubin -inkey lumate-release.pem -rawin -in install.signed -sigfile install.sh.sig
```

`Signature Verified Successfully` yazdırır. Başka bir şey, dosyanın OXS'in imzaladığı dosya olmadığı anlamına gelir:
çalıştırmayın. Yükleyici sonra indirdiği her sürümü aynı anahtara göre kontrol eder.

### Yükleyici ne sorar

İnsanların Lumate'i açacağı adresi sorar. Let's Encrypt sertifikası için genel bir alan adıyla (örneğin
`lumate.yourcompany.com`; DNS'i sunucuyu göstermeli) yanıt verin ya da ofis ağını (sunucunun adı ve IP'si) kullanmak için
Enter'a basın. Gözetimsiz kurulum için aynı seçimler seçenek olarak da vardır:

| Seçenek | Anlamı |
|---|---|
| `--domain NAME` ve `--email ADDRESS` | Let's Encrypt ile genel bir alan adı (e-postaya Let's Encrypt'in bildirimleri gelir) |
| `--lan NAMES` | Ofis ağının adları ve adresleri, virgülle ayrılmış: Lumate ofisin kendi sertifika yetkilisini (CA) oluşturur |
| `--own-cert FILE --own-key FILE` | Şirketinizin sertifikası ve anahtarı (PEM); `--lan` içindeki adresler için |
| `--channel beta` | Beta kanalından güncellemeler (varsayılan stable) |
| `--offline FILE` | Çevrimdışı bir paketten kurulum (internet yok; aşağıya bakın) |
| `--yes` | Sormadan Docker'ı kur |

Ne yapar:
1. Makineyi kontrol eder (Linux, işlemciler, bellek, disk, 80/443 bağlantı noktaları, OXS Cloud'a giden yol).
2. Kanalınızın sürümünü getirir ve Lumate'in sürüm anahtarıyla imzalandığını kontrol eder. Sonra indirmenin SHA-256
   değerini kontrol eder.
3. İmajları yükler.
4. `/opt/lumate` klasörünü yazar; gizli anahtarlar sunucuda üretilir (`.env`, yalnızca root okuyabilir).
5. Lumate'i başlatır ve yanıt verene kadar bekler.

Sonunda kurulum belirtecini taşıyan kurulum bağlantısını ve (bağlantı kaybolursa diye) belirtecin kendisini yazdırır.
Bağlantıyı açın ve ilk hesabı e-postanızla oluşturun; sonra şirketi kimin kuracağını seçin (siz ya da bağlantı
gönderdiğiniz bir yönetici). Bkz. [İlk kurulum](/tr/docs/first-setup). `--key` verildiyse kurulum ilk açılışta etkinleşir: OXS
hesabı sorulmaz.

### Ofis ağında: sertifikaya güvenme

`--lan` ile (ya da soruda Enter ile) Lumate ofisin kendi sertifika yetkilisini oluşturur. Yükleyici SHA-256 parmak izini
yazdırır, Settings → General de sürümün altında gösterir. Lumate'i açan her bilgisayarda:

1. Sunucudan `/opt/lumate/ca.crt` dosyasını kopyalayın.
2. Parmak izini gösterilenle karşılaştırın. Windows'ta: `certutil -hashfile ca.crt SHA256`.
3. Geçerli kullanıcı için güvenin: çift tıklayın → Install Certificate → Current User → Trusted Root Certification
   Authorities.

Lumate Desk eşleşirken sunucunun sertifikasını sabitler, bu yüzden başka bir şeye ihtiyaç duymaz. Sunucunun sertifikası 825
gün sürer ve bitmesinden bir ay önce kendiliğinden yeniden yapılır; ondan sonra Desk'i bir kez yeniden eşleştirin.

## Neler çalışır

`/opt/lumate/compose.yml` beş hizmet çalıştırır; hepsi aynı sürümdendir. Hepsi sunucunun kendi ağını kullanır; yalnızca
Caddy sunucunun dışına dinler.

| Hizmet | Ne yapar |
|---|---|
| `caddy` | Web ön yüzü: 443'te HTTPS, 80'i yönlendirir |
| `server` | Lumate'in kendisi (yalnızca 127.0.0.1:8000) |
| `runner` | Ajanları şirketin Claude hesabında çalıştırır. Kendini kurar: ilk şirket oluşunca sunucuya kaydolur |
| `whatsapp` | Bağlı cihaz olarak WhatsApp (bir numarayı Settings → WhatsApp bölümünde bağlayın) |
| `updater` | Güncellemeleri uygular ve başarısız olanları geri alır (Docker'ın soketini tutar, başka bir şey değil) |

Claude Code iki yoldan biriyle oturum açar ve her ajan onu kullanır:

- **Sunucuda oturum açılmış şirketin Claude hesabı**: sunucuda `sudo lumate claude-login` çalıştırın. Bir bağlantı
  gösterir: onu herhangi bir cihazda açın, şirketin Claude hesabıyla oturum açın, onaylayın ve geri verdiği kodu
  sunucunun terminaline yazın. Oturum çalıştırıcıda tutulur ve kendini yeniler; `sudo lumate claude-status` onu gösterir,
  `sudo lumate claude-logout` bitirir. Claude planı yerine bir Anthropic Console hesabıyla (kullanıma göre faturalanır)
  oturum açmak için `--console` ekleyin.
- **Bir Anthropic API anahtarı** (işletmeler için önerilir: ticari koşullar) ya da bir Claude oturum belirteci; Settings →
  Runners → **Claude for the runners** bölümünde. Sahipler ve yöneticiler orada ayarlar; şifreli saklanır ve bir daha
  gösterilmez, ikisi de ayarlıysa öncelik onundur.

Settings → Runners her çalıştırıcı için Claude Code'unun oturum açıp açmadığını gösterir.

## Masa telefonu (ofis santralindeki bir IP telefon)

Lumate santrale, çalıştığı makineden tek bir dahili olarak kaydolur (UDP 5060 üzerinden SIP, ses RTP olarak). Ofisin
santraline ulaşmanın üç yolu var:

| Sunucu nerede | Ne yapılır |
|---|---|
| Ofis ağında (santrale ulaşıyor) | Başka bir şey gerekmez: Settings → Desk phone, **Connection runs on: This server**. Servisler sunucunun kendi ağını kullanır; dahili ve sesi bir bilgisayardaki gibi çalışır. |
| Ofis dışında (bir veri merkezi, internet) | Ofisteki **bağlanmış bir bilgisayar** hattı taşır (2.15.0'dan itibaren): bir ofis bilgisayarında bu sunucuya bağlı ve Settings → Linked PCs'te bağlanmış Lumate; sonra Settings → Desk phone → **Connection runs on** o bilgisayar. Bilgisayar santrale kaydolur ve aramaların sesini kendi HTTPS bağlantısıyla sunucuya taşır (G.711, değiştirilmeden); ofiste port açılmaz ve VPN gerekmez. Bkz. [Bir Lumate sunucusuna bağlanmak](/tr/docs/install-windows#connecting-to-a-lumate-server). |
| Ofis dışında, ofise VPN ile | Sunucu santrale VPN üzerinden ulaşır: ofis ağındaki gibi. VPN'i IT kurar. |

Bağlanmış bir bilgisayar üzerinden, bilgisayar ile sunucu arasındaki gidiş-dönüş süresi her yöndeki sese eklenir
(Settings → Linked PCs gösterir); bilgisayarın titreşim tamponu ofisteki bir masa telefonundakiyle aynıdır.

## `lumate` komutu

Sunucuda, root olarak:

| Komut | Ne yapar |
|---|---|
| `lumate status` | Sürüm, kanal ve her hizmet |
| `lumate logs [server\|runner\|whatsapp\|caddy\|updater]` | Son günlük satırları |
| `lumate backup` | Şimdi bir yedek, `/opt/lumate/backups` içine |
| `lumate restore FILE` | Bir yedeğin verisini geri koyar. Bu sırada Lumate durur ve o yedekten sonra değişenler kaybolur |
| `lumate update` | Settings → Updates'in indirdiği güncellemeyi kurar |
| `lumate update --bundle FILE` | Çevrimdışı bir paketi kurar |
| `lumate rollback` | Son güncellemeden önceki sürüme döner |
| `lumate support-bundle` | OXS desteği için sürümler, gizli anahtarsız ayarlar ve günlük satırları (veri yok) |
| `lumate claude-login` | Claude Code'u şirketin Claude hesabıyla oturum açtırır (açılacak bir bağlantı, geri yazılacak bir kod) |
| `lumate claude-status` / `claude-logout` | Claude Code'un oturum açıp açmadığı; oturumu kapatır |
| `lumate uninstall` | Lumate'i durdurur ve kaldırır. `--delete-data` eklemezseniz verisi kalır |

## Güncellemeler

Settings → Updates (Lumate'i kuran kişi) şunları gösterir:
- sürüm;
- kanal (stable veya beta);
- bakım penceresinde otomatik kurulumlar (varsayılan 02:00–05:00, şirketin saati);
- sunulan güncelleme, notlarıyla birlikte ve **Update now**.

Lumate her saat bakar, güncellemeyi indirir ve kontrol eder. Arama sırasında asla kurmaz; yapay zeka arayıcısı bu arada
duraklar.

Bir güncelleme:
1. önce veriyi yedekler;
2. her hizmeti yeni sürüme geçirir;
3. yanıt vermesini bekler.

Yeni sürüm başlamazsa Lumate kendiliğinden geri döner, dosyalar ve veriyle birlikte; genellikle bir dakika içinde. O sürüm
sonra kendiliğinden yeniden kurulmaz; Update now onu yeniden deneyebilir. Settings → Updates sonra, sunucuda tutulan
önceki sürüme **Go back** önerir. O sürüm bugünkü veriyi okuyamıyorsa veriyi güncellemeden önce alınan yedekten alır (önce
bugünün bir yedeği alınır).

### İnternetsiz: çevrimdışı paketler

OXS Cloud'a ulaşamayan bir sunucu, OXS'ten gelen `Lumate-Server-<version>-offline.tar` çevrimdışı paketinden kurulur ve
güncellenir. Paket imajları, imzalı manifestlerini ve yükleyiciyi içerir. Üç yoldan biriyle kullanın:
- `sudo bash install.sh --offline Lumate-Server-<version>-offline.tar` ile kurun;
- `lumate update --bundle Lumate-Server-<version>-offline.tar` ile güncelleyin;
- Settings → Updates → Offline bundle bölümünden yükleyin.

Yalnızca Lumate'in sürüm anahtarıyla imzalanmış bir paket kabul edilir.

## Yedekler

Settings → Backups (Lumate'i kuran kişi):
- **Neler tutulur:** her gün kendi saatinde bir yedek (7 tane tutulur), her güncellemeden önce bir yedek (3 tane tutulur)
  ve Back up now (10 tane tutulur). Her biri indirilebilir.
- **Bir yedek neyi içerir:** veritabanını ve paylaşılan dosyaları. Sunucunun gizli anahtarlarını asla içermez; bu yüzden
  `/opt/lumate/.env` dosyasını da güvenli bir yerde saklayın. `SECRETS_KEY` olmadan Lumate'te saklanan gizli anahtarlar
  okunamaz.
- **Bir bucket'a kopyalama:** her yedek S3 uyumlu bir bucket'a da gidebilir (AWS S3, Backblaze B2, Wasabi, MinIO…).
  Adresi, bölgeyi, bucket'ı, klasörü ve bir erişim anahtarını verin; gizli anahtar şifreli saklanır ve bir daha gösterilmez.
- **Geri yükleme:** yalnızca sunucuda, `lumate restore` ile.

## Sorun giderme

| Gördüğünüz | Yapın |
|---|---|
| Yükleyici "ports 80 and 443 are in use" ile duruyor | Sunucuda başka bir web sunucusu çalışıyor: onu durdurun ya da Lumate'i başka bir sunucuya kurun |
| Tarayıcı sertifika konusunda uyarıyor (ofis ağı) | O bilgisayarda `ca.crt` dosyasına güvenin (yukarıda) |
| Settings → Updates bir güncellemenin geri alındığını söylüyor | `lumate logs server` yeni sürümün neden başlamadığını gösterir; `lumate support-bundle` çıktısını OXS'e gönderin |
| Çalıştırıcı ekip sunucusunu beklediğini söylüyor | İlk şirketi oluşturun (kurulum), sonra kendiliğinden kaydolur |
| Ajanlar çalışmıyor | Settings → Runners: çalıştırıcı çevrimiçi ve Claude Code'u oturum açmış olmalı (`sudo lumate claude-login` ya da bir API anahtarı) |
