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/yekeimajı 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şken | Zorunlu mu | Ne yapar · boş bırakılırsa ne olur |
|---|---|---|
YEKE_SNAPSHOT_KEY | Hayı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_URL | Cluster 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_FILE | HTTPS 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_FILE | HTTPS 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_ORIGINS | Hayı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_PATH | Hayı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_TOKEN | Hayı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.
- Bir cluster bağlayın — agent modu ya da doğrudan kubeconfig.
- Yetkiyi ayarlayın — kim hangi Kubernetes kimliğiyle yazacak.
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 vNsatı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/yekede. Yedeği core durmuşken alın: SQLite'ın-waldosyası ç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-datadocker 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.