yeke.io · dokümanlar

Kurulum

YEKE’yi tek container olarak çalıştırın. Aşağıdaki Docker komutuyla başlayın; kalıcı ayarlar, güncelleme, Compose ve Kubernetes seçenekleri rehberin devamında.

Gerekenler

Başlamak için üç gereksinim var. Kubernetes cluster’ını kurulumdan sonra bağlayabilirsiniz.

  • Docker olan bir makine. Docker Compose gerekmiyor; isterseniz kullanabilirsiniz (aşağıda).
  • openssl — ya da 32 bayt rastgele üretebilen başka bir araç.
  • Docker Hub erişimi — nairotech/yeke imajı herkese açık ve multi-arch (amd64 + arm64).

Ayrı bir web container'ı ve önünde bir reverse proxy artık yok. Arayüz, API ve agent tüneli aynı süreçten, aynı porttan geliyor; kurulacak tek şey bu imaj — HTTPS de aynı imajla sağlanır.

Tek komut

Aşağıdaki komutu çalıştırın. Repo klonlamanız, dizin açmanız veya ayrı bir ayar dosyası hazırlamanız gerekmez.

docker run -d --name yeke --restart unless-stopped -p 8080:8080 \
  -v yeke-data:/var/lib/yeke \
  nairotech/yeke:0.61.6

Veri yeke-data adlı bir Docker volume'unda durur. Docker onu ilk çalıştırmada kendisi yaratır ve sahipliğini imajdan alır: dizin core'un çalıştığı kullanıcıya (65532) ait ve yazılabilir gelir, sizin bir şey hazırlamanız gerekmez. docker rm volume'a dokunmaz; güncelleme ve yedek aşağıda.

Sürüm etiketini sabitleyin, latest yazmayın: core'un sürümü, cluster'ınıza kurulacak agent imajının etiketini de belirliyor. Etiket kayarsa agent protokol uyuşmazlığına düşer. Yayındaki etiketler Docker Hub'da.

Kendi dizininizi bağlamak isterseniz

Verinin host'ta görünür bir dizinde durmasını tercih ediyorsanız volume yerine bir dizin bağlayın. Dizini önce siz açarsınız ve core'un çalıştığı kullanıcıya (65532) ait olmalı; YEKE root olarak koşmaz ve root'a ait bir dizine yazamaz:

sudo install -d -m 700 -o 65532 -g 65532 /opt/yeke/data
docker run -d --name yeke --restart unless-stopped -p 8080:8080 \
  -v /opt/yeke/data:/var/lib/yeke \
  nairotech/yeke:0.61.6

İlk satırı atlarsanız kurulum sessizce bozulmaz: core açılışta durur ve log'a hangi dizinin kimin olması gerektiğini, yapıştırılabilir komutuyla birlikte yazar (docker logs yeke).

Bu yolu seçerseniz sayfanın geri kalanındaki komutlarda yalnız -v satırı değişir: yeke-data yerine dizininiz.

İlk yöneticiyi oluşturun

İlk açılışta hiç kullanıcı yoktur; core bir kurulum token'ı üretip log'a basar:

docker logs yeke | grep -i SETUP:

http://localhost:8080/ adresini açın (HTTPS ile kurulumda adres https://<alan-adınız>/ olur), token'ı yapıştırın, kullanıcı adı ve parola girin. Token 60 dakika geçerlidir ve bir kez kullanılır; süresi dolarsa docker restart yeke yenisini üretir.

Yedeklenecek tek şey: yeke-data volume'u

Kurulumun tuttuğu her şey o volume'da ve içinde iki dosya var: core.db (cluster envanteri, kullanıcılar, operasyon geçmişi, denetim izi) ve snapshot.key — core'un ilk açılışta ürettiği 32 baytlık şifreleme anahtarı. Doğrudan mod kubeconfig'leri, AI sağlayıcı anahtarlarınız, hook sırlarınız ve geri alma snapshot'ları veritabanında o anahtarla şifreli duruyor.

İkisi birlikte yedeklenir. Anahtarsız bir veritabanı yedeği açılır ama şifreli hiçbir kaydı okuyamaz — belirtisi de sessizdir: core çökmez, /healthz yine 200 döner, yalnızca cluster'lara bağlanamaz. Ölçüldü (10.08.2026).

Anahtarı verinin yanında değil dışarıda tutmayı tercih ediyorsanız — volume'un tamamını alan bir yedeğin anahtarı da taşımasını istemiyorsanız — YEKE_SNAPSHOT_KEY verin: bir sonraki bölümde.

HTTPS ile kurulum

Container kendi sertifikanızla doğrudan HTTPS dinleyebilir; önüne ayrı bir reverse proxy koymanız gerekmez.

  • DNS kaydı — adresinizin YEKE'nin çalıştığı makineyi gösteren bir kaydı.
  • Sertifika ve anahtar dosyası — kurumunuzun verdiği sunucu sertifikası (varsa ara sertifikalarla birlikte, tam zincir) ve şifresiz PEM anahtar. Sertifikayı YEKE almaz ve yenilemez; kurum sağlar.

Sertifika dosyalarını bir dizine koyup sahipliğini core'un çalıştığı kullanıcıya (65532) verin:

sudo install -d -m 755 /etc/yeke/certs
sudo cp tls.crt tls.key /etc/yeke/certs/
sudo chown -R 65532:65532 /etc/yeke/certs
sudo chmod 600 /etc/yeke/certs/tls.key
docker run -d --name yeke --restart unless-stopped -p 443:8443 \
  -v yeke-data:/var/lib/yeke \
  -v /etc/yeke/certs:/certs:ro \
  -e YEKE_TLS_CERT_FILE=/certs/tls.crt \
  -e YEKE_TLS_KEY_FILE=/certs/tls.key \
  -e YEKE_PUBLIC_URL=https://yeke.ornek.com \
  nairotech/yeke:0.61.6

YEKE_TLS_CERT_FILE ve YEKE_TLS_KEY_FILE verildiğinde YEKE container içinde 8443'te https dinler ve -p 443:8443 ile yayınlanır; ikisi de verilmezse davranış bugünküyle aynıdır. Sertifika dizinini bağlayın, tek tek dosyaları değil: bir dosya mv ile değiştirildiğinde tek dosya bağlaması eskisinde kalır. Dizin ve dosyalar 65532'ye okunur değilse core açılmaz; log'a hangi dosyanın hangi kullanıcıyla okunamadığını ve düzeltme komutunu yazar (docker logs yeke). TLS açıkken 8080 container içinde yalnızca loopback'te kalır — healthcheck onu kullanır — ve dışarı yayınlansa bile bağlantı kurulamaz.

Sertifikayı yenilemek için dosyaları değiştirin: YEKE en geç 60 saniye içinde yeni sertifikaya geçer, açık bağlantılar (agent tüneli, açık terminal) düşmez. Beklemeden geçmek için docker kill -s HUP yeke. Yeni dosya bozuksa YEKE eski sertifikayı sunmaya devam eder ve log'a yazar.

https://<adres>/healthz yanıtı TLS açıkken tls.notAfter ve tls.daysLeft taşır; 30 gün ya da daha az kalınca log'a günde bir uyarı düşer.

HTTP/2 yok. 80→443 yönlendirmesi yok; adresi https:// ile açın. Sertifikayı YEKE almaz ve yenilemez (ACME/Let's Encrypt otomasyonu yok) — sertifikayı kurum sağlar.

Herkese açık bir CA'nın sertifikasıyla agent ve Shell ek ayar gerektirmez. Kurumun kendi CA'sıyla imzalı bir sertifikada tarayıcılar (CA kurumda dağıtılmışsa) güvenir; cluster içindeki agent'ın, Shell'in ve CLI'nin bu CA'ya -k'siz güvenmesi için Kurum içi CA sayfasına bakın.

Önünüzde kurumsal bir reverse proxy ya da yük dengeleyici TLS'i zaten sonlandırıyorsa bu bölüm gerekmez: YEKE'yi 8080 ile o katmanın arkasına koyun.

Her ayar açıkta

Dış erişim adresini, lisansı ve harici anahtarı tanımlayan kurulum örneği. İhtiyacınız olmayan isteğe bağlı ayarları çıkarabilirsiniz.

Anahtarı dışarıda tutmak isterseniz bir kez üretip dosyaya yazın. Bu satırlar opsiyonel: atlarsanız core anahtarı volume'un içine kendisi üretir.

sudo install -d -m 700 /etc/yeke
[ -f /etc/yeke/snapshot.key ] || openssl rand -hex 32 | sudo tee /etc/yeke/snapshot.key > /dev/null
sudo chmod 600 /etc/yeke/snapshot.key
docker run -d --name yeke --restart unless-stopped \
  -p 443:8443 \
  -v yeke-data:/var/lib/yeke \
  -v /etc/yeke/certs:/certs:ro \
  -v /etc/yeke/lisans.txt:/etc/yeke/lisans.txt:ro \
  -e YEKE_SNAPSHOT_KEY="$(sudo cat /etc/yeke/snapshot.key)" \
  -e YEKE_TLS_CERT_FILE="/certs/tls.crt" \
  -e YEKE_TLS_KEY_FILE="/certs/tls.key" \
  -e YEKE_PUBLIC_URL="https://yeke.ornek.com" \
  -e YEKE_LICENSE_PATH="/etc/yeke/lisans.txt" \
  nairotech/yeke:0.61.6

YEKE_SNAPSHOT_KEY verildiğinde veri dizinindeki snapshot.key dosyası ne okunur ne yazılır — değişken her zaman önce gelir. Bir kurulumu bu yola sonradan geçirmeyin: o ana kadar üretilmiş anahtarla şifrelenmiş kayıtlar başka bir anahtarla açılmaz.

HTTPS'i önünüzdeki bir reverse proxy sağlıyorsa sertifika bağlama satırını ve iki TLS satırını silin, -p 443:8443 yerine -p 8080:8080 yazın. YEKE_PUBLIC_URL ve YEKE_LICENSE_PATH satırları da opsiyonel. Lisansınız yoksa ya da arayüzden yüklemek istiyorsanız YEKE_LICENSE_PATH satırını ve onun bağlama satırını birlikte silin. Yalnız birini silmek sessiz bir karışıklık üretiyor: olmayan bir dosyayı bağlamaya çalışan Docker o yola boş bir dizin yaratır, core dizini okuyamayıp lisansı reddeder ve Community'de çalışmaya devam eder — kurulum ayakta görünür, ama gerçek lisans dosyanızı sonradan o yola kopyalamak istediğinizde karşınıza çıkar.

DeğişkenZorunlu muNe yapar · boş bırakılırsa ne olur
YEKE_SNAPSHOT_KEYHayır Saklanan credential'ları, AI anahtarlarını, hook sırlarını ve geri alma snapshot'larını şifreleyen 32 baytlık anahtar (64 hex ya da base64). Boşsa core anahtarı kendisi üretip veri dizinine yazar (snapshot.key, mod 600) ve sonraki açılışlarda oradan okur. Vermek, anahtarı veri dizininin dışında tutmak içindir.
YEKE_PUBLIC_URLCluster ekleyecekseniz Core'un dışarıdan erişildiği mutlak adres; agent kurulum manifesti bu adresi kullanır. Boşsa core sağlıklı açılır, giriş çalışır; yalnız agent modunda cluster ekleme PUBLIC_URL_NOT_CONFIGURED ile durur. Core bu adresi tahmin etmez: çoğu kurulumda 0.0.0.0:8080 dinler ve o adres cluster'ın içinden erişilebilir değildir.
YEKE_TLS_CERT_FILEHTTPS için Sunucu sertifikasının (varsa ara sertifikalarla birlikte, tam zincir) yolu. HTTPS ile kurulum bölümüne bakın. Boşsa YEKE düz http dinler; biri verilip diğeri boşsa açılmaz.
YEKE_TLS_KEY_FILEHTTPS için Şifresiz PEM anahtar dosyasının yolu. Boşsa YEKE düz http dinler; biri verilip diğeri boşsa açılmaz.
YEKE_ALLOWED_ORIGINSHayır CSRF/Origin kontrolünde kabul edilecek ek origin'ler (virgülle ayrılmış). Yalnızca core'un önüne bir reverse proxy (Cloudflare, nginx, Traefik) koyduğunuzda ve o katman dış adresi core'un gördüğü Host'tan farklı gösterdiğinde gerekir; native TLS'te gerekmez, çünkü Host zaten dış adresle aynıdır.
YEKE_LICENSE_PATHHayır Enterprise lisans dosyasının yolu. Boşsa kurulum Community çalışır: 3 cluster / 5 kullanıcı tavanı, çekirdek yeteneklerin tamamı açık, süresi dolmaz. Tanımlıysa o açılışın tek lisans kaynağı bu dosyadır ve arayüzden lisans yüklenemez.
YEKE_BOOTSTRAP_TOKENHayır İlk yönetici için sabit kurulum token'ı: kurulumu betikle yapıyorsanız log okumaktan kurtarır. Boşsa core rastgele üretip log'a basar.

Tabloda olmayan bir YEKE_* değişkeni tanımlamanız gerekmiyor. Üçü — YEKE_ALLOW_HEADER_IDENTITY, YEKE_DEV_USER, YEKE_DEV_GROUPS — kaldırıldı ve tanımlıysa core hiç açılmaz: kimlik doğrulamasının var oluş sebebi tam olarak bu üçünün kapatılmasıydı, sessizce yok saymak "hâlâ eskisi gibi çalışıyor" sanmanıza yol açardı.

Yönetişim ayarları (yalnız Enterprise)

Enterprise yönetişim özellikleri için dört ek ayar bulunur. YEKE_POLICY_MODE, varsayılan file veya central modunu seçer. Merkezî mod policy-central gerektirir; tanınmayan bir değer core’un başlamasını engeller.

Merkezî modda YEKE_POLICY_PACKAGE_PUBLIC_KEYS zorunludur. Bu Ed25519 anahtarları politika paketini doğrular; lisans ve air-gap anahtarlarından ayrıdır.

YEKE_EXEC_RECORDING_RETENTION_DAYS, tam terminal kayıtlarının saklama süresini belirler (varsayılan: 30 gün). Operasyon saklama süresinden bağımsızdır.

YEKE_SECRET_DISPLAY, Secret değerlerinin YEKE üzerinden ne kadar görünür olduğunu belirler: varsayılan full yanında masked/hidden kısıtlı kipleri secret-display bayrağı ister ve owner dahil herkes için geçerlidir. Ayrıntılar için Yönetişim rehberine, özellikle Secret görünürlüğü bölümüne bakın.

Sonra ne olacak

YEKE ayakta ama henüz hiçbir cluster'ı görmüyor.

Güncelleme ve yedek

Güncelleme container'ı yeniden yaratır; veri ve anahtar volume'da kaldığı için etkilenmez.

docker pull nairotech/yeke:<yeni-sürüm>
docker rm -f yeke
# ardından aynı run komutu: yalnız etiket değişir
  • Her güncelleme bir kesintidir. Veritabanı tek yazıcılı SQLite: eski core kapanmadan yenisi açılamaz. Üretimde ölçülen pencere ~60 saniye. Arayüzde tek satır metin değiştiren bir sürüm bile bu kesintiye tabidir; arayüz core'un imajının içinde.
  • Göçler açılışta koşar ve core log'una schema vN satırını basar; güncellemenin başarısını tahminle değil oradan doğrulayın.
  • Yedek — volume'un içi; anahtarı dışarı aldıysanız /etc/yeke de. Yedeği core durmuşken alın: SQLite'ın -wal dosyası çalışırken de yazılır ve yarısı alınmış bir yedek sessizce eksik olur.
docker stop yeke
docker run --rm -v yeke-data:/v -v "$PWD":/yedek alpine:3.20 tar czf /yedek/yeke-data.tgz -C /v .
docker start yeke

Arşiv dosya sahipliğini (65532) taşır; geri yüklemek için aynı komutun tersi yeter ve core geri yüklenen volume'la doğrudan açılır. Hedef boş bir volume olmalı; yeni makinede Docker onu bu komutla yaratır. Kendi dizininizi bağladıysanız ikisi de gereksiz: dizini kopyalamak yeter.

docker run --rm -v yeke-data:/v -v "$PWD":/yedek alpine:3.20 tar xzf /yedek/yeke-data.tgz -C /v

Parolayı unuttuysanız

Tek yönetici parolasını unuttuğunda ya da hesabı kilitlendiğinde arayüzden kurtarma yolu yok; container'a exec erişimi olan biri komut satırından yeni bir parola kurulum token'ı üretir.

Container'a erişen operatör kendi kurulumuna uyan komutu aşağıdaki üçünden seçip çalıştırır. Core'u durdurmanız gerekmez.

docker compose exec core node tools/yeke-reset-password.mjs yonetici
docker exec yeke node tools/yeke-reset-password.mjs yonetici
kubectl -n yeke-system exec deploy/yeke-core -- node tools/yeke-reset-password.mjs yonetici

Araç parolayı kendisi seçmez: terminale yalnız 60 dakika geçerli, tek kullanımlık bir parola kurulum token'ı basar. Kullanıcı bu token'ı web arayüzünde /set-password sayfasına yapıştırıp kendi parolasını seçer. Yeni bir token üretmek öncekini geçersiz kılar.

Kimlik doğrulayıcı uygulama da kaybolduysa --reset-mfa bayrağını ekleyin; MFA kaydı ve kurtarma kodları birlikte silinir; kullanıcı girişten sonra MFA'yı yeniden kurabilir.

Yalnız yerel ve etkin hesaplar içindir. LDAP/OIDC ile gelen bir hesabın parolası dizinde sıfırlanır, bu araçla değil; devre dışı bırakılmış bir hesap önce bir yönetici tarafından açılmalı. İşlem denetim kaydına düşer.

Bu aracı çalıştırabilen kişi zaten container'ın veri dizinine ve veritabanına erişebiliyor demektir — yeni bir yetki açılmıyor. Parola terminale hiçbir zaman düşmez; terminalde yalnız token görünür. API'deki kural değişmedi: kurulum sahibinin parolası arayüzden başka bir kullanıcı tarafından sıfırlanamaz.

Compose ve Kubernetes

Servis tanımını dosyada tutmak için Docker Compose veya Kubernetes kullanın. İkisi de aynı YEKE imajını çalıştırır.

Docker Compose

Depoyu klonlamanız gerekmiyor; dosyanın tamamı bu:

services:
  core:
    image: nairotech/yeke:0.61.6
    ports:
      - "8080:8080"
    environment:
      YEKE_PUBLIC_URL: ${YEKE_PUBLIC_URL:-}
    volumes:
      - yeke-data:/var/lib/yeke
    healthcheck:
      test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:8080/healthz').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"]
      interval: 10s
      timeout: 3s
      retries: 5
      start_period: 10s
    restart: unless-stopped

volumes:
  yeke-data:
    name: yeke-data

docker compose up -d deyin. name satırı volume'un adına proje ön eki eklenmesini önler; yukarıdaki yedek komutları burada da aynen geçerli. Bu yolda docker ps (healthy) gösterir; healthcheck imajın değil bu dosyanın parçası.

HTTPS için ports'u "443:8443" yapıp HTTPS ile kurulum bölümündeki sertifika volume'unu ve iki TLS ortam değişkenini eklemek yeterli; healthcheck aynen kalır.

Kubernetes

Core'u bir cluster'ın içinde koşturmak destekleniyor ve manifest seti hazır: namespace, ReadWriteOnce PVC, tek Deployment (strategy: Recreate), Service ve standart Ingress. Orada anahtarı bir Secret'a koymanızı öneriyoruz — tek makinedekinin tersine: PVC'nin anlık görüntüsünü alan yedekleme, anahtar da içindeyse şifrelemeyi anlamsız bırakır. Set kısa ama kuruma göre uyarlanması gereken alanlar taşıyor (host adı, StorageClass, Ingress sınıfı); isteyin, gönderelim.

Yönetilecek cluster'ın içine kurmak zorunda değilsiniz ve genelde istemezsiniz: YEKE'nin yönettiği cluster çöktüğünde onu düzeltecek arayüzün ayakta olması gerekir.

Takılırsanız yazın.

Bu sayfadaki her komut gerçekten çalıştırılarak doğrulandı. Yine de bir adım beklediğiniz gibi gitmezse doğrudan yazın.