Docker Compose ile kurulum
Sürüm 1.0.0 · yayın 21 Ekim 2026
Kurumun kendi sunucusunda, tek bir kurum (tek tenant) için tek sunucu kurulumu. Postgres, Valkey ve Keycloak pakete dahildir. Katalog, video ve eğitim paketleri platform konsolundan gelir; kursiyerlerin kişisel verisi kurumun sunucusunda kalır.
| Dosya | Ne yapar |
|---|---|
compose.yaml |
Servisler: postgres, valkey, keycloak, training-api, training-web |
.env.example |
Ayarlar: sürüm, adresler, kurum, konsol kimlik bilgileri, parolalar, anahtarlar |
İmajlar (training-api, training-web, keycloak) aynı sürüm numarasını taşır (FLEET_VERSION).
Gereksinimler
- Linux sunucu, en az 2 çekirdek, 4 GB bellek, 20 GB disk
- Docker Engine ve Docker Compose 2.23 ya da üstü
- TLS sertifikası olan bir ters vekil sunucu (nginx, Traefik, Caddy ya da yük dengeleyici) ve üç DNS adı
- Dışarıya çıkış: izin listesi. Tamamen internetsiz kurulum desteklenmez: katalog, lisans ve paketler konsoldan, videolar Cloudflare’den gelir.
Kurulum
-
Bu klasörü sunucuya kopyalayın ve ayarları doldurun:
cp .env.example .env chmod 600 .envSürüm, imaj deposu ve konsol değerleri (
FLEET_*,CONSOLE_*) kurulum kaydıyla birlikte verilir. Parolalar ve anahtarlar kurulumda bir kez üretilir (dosyadaki açıklamalar)..env’i ve veritabanı yedeklerini birlikte saklayın:TRAINING_CRYPTO_SECRET_KEYolmadan şifreli alanlar okunamaz. -
Ters vekil sunucuda üç adı yayınlayın (
BIND_IPvarsayılanı127.0.0.1):Ad Hedef Not PANEL_HOSThttp://127.0.0.1:8080Eğitim paneli API_HOSThttp://127.0.0.1:8081training-api (panel ve mobil uygulama) AUTH_HOSThttp://127.0.0.1:8180Keycloak; X-Forwarded-*başlıkları iletilmeliAUTH_HOSTiçin/adminyolunu yalnızca kurumun ağından açmanız önerilir. -
İmaj deposuna konsol kimlik bilgisiyle bir kez giriş yapın, sonra açın. Ayrı bir depo hesabı yoktur: kullanıcı adı
CONSOLE_CLIENT_ID, parolaCONSOLE_CLIENT_SECRET. Depo lisans geçerliyken çekmeye izin verir; lisans biterse yeni sürüm çekilemez, çalışan sistem durmaz.# parola sorulunca CONSOLE_CLIENT_SECRET docker login egitim-registry.xenopsoftware.com -u <CONSOLE_CLIENT_ID> docker compose pull docker compose up -dİlk açılışta Keycloak fleet realm’ini kurar, training-api veritabanını oluşturur ve kurumun tenant’ını (
TENANT_SLUG) ilk yöneticisiyle (TENANT_ADMIN_EMAIL) açar. Durum:docker compose ps curl -fsS http://127.0.0.1:8081/actuator/health/readiness -
https://PANEL_HOSTadresinde ilk yöneticiyle (TENANT_ADMIN_EMAIL,TENANT_ADMIN_PASSWORD) girin; parola ilk girişte değiştirilir.TENANT_ADMIN_PASSWORDartık kullanılmaz,.env’den silebilirsiniz.
TENANT_SLUG sonradan değiştirilemez; değiştirilirse training-api ikinci bir tenant açmak yerine açılmayı reddeder.
Çıkış adresleri
Kurumun güvenlik duvarında açılması gerekenler (HTTPS, 443). Bunların dışında çıkış gerekmez.
| Kaynak | Hedef | Ne için |
|---|---|---|
| Sunucu | CONSOLE_URL ve CONSOLE_TOKEN_URI’deki adlar |
Katalog, lisans, heartbeat, paketler |
| Sunucu | FLEET_REGISTRY’deki ad (egitim-registry.xenopsoftware.com) |
İmajlar; arşivle kurulumda gerekmez |
| Sunucu | Kurumun SMTP sunucusu, kimlik sistemi, OTLP | Yalnızca ayarlandıysa |
| Kursiyer cihazları | PANEL_HOST, API_HOST, AUTH_HOST |
Panel, API ve giriş |
| Kursiyer cihazları | *.cloudflarestream.com, videodelivery.net |
Video oynatma |
| Mobil uygulama | CONSOLE_URL’deki ad |
Firma koduyla sunucu keşfi |
Kapalı ağ
Sunucu imaj deposuna çıkamıyorsa sürümün release’indeki fleet-egitim-<sürüm>-images.tar.gz kullanılır. Arşivde
compose.yaml’daki bütün imajlar (postgres ve valkey dahil, linux/amd64) vardır ve compose’un beklediği adlarla yüklenir.
Arşivi internete çıkabilen bir makinede indirip doğrulayın, sonra sunucuya taşıyın:
cosign verify-blob --key cosign.pub --bundle SHA256SUMS.bundle SHA256SUMS
sha256sum -c SHA256SUMS --ignore-missing
Sunucuda:
docker load -i fleet-egitim-<sürüm>-images.tar.gz
docker compose up -d
docker compose pull çalıştırmayın. .env’deki FLEET_REGISTRY ve FLEET_VERSION release’teki env.example’daki
gibi kalmalı, imajlar o adlarla yüklenir. Güncelleme aynı yoldan yapılır: yedek, yeni arşivin docker load’u,
FLEET_VERSION, docker compose up -d.
Kimlik sistemi ve e-posta
- Kurumun kimlik sistemi (Active Directory, Entra ID, OIDC/SAML) Keycloak’a bağlanır:
Kimlik sistemini bağlama. Keycloak yönetim konsolu:
https://AUTH_HOST/admin, kullanıcıadmin, parolaKEYCLOAK_ADMIN_PASSWORD. - Davet e-postaları Keycloak’un SMTP’siyle gider: yönetim konsolunda fleet → Realm settings → Email altında kurumun
SMTP sunucusunu girin, sonra
.env’deINVITE_MODE=emailyapıpdocker compose up -dçalıştırın. SMTP yoksa davette geçici parola panelde gösterilir.
Yedek
Yedek iki veritabanıdır (training, keycloak) ve .env’dir. Paket önbelleği (training_tmp) yedeklenmez; konsoldan
yeniden çekilir.
docker compose exec -T postgres pg_dump -U postgres -Fc training > training-$(date +%F).dump
docker compose exec -T postgres pg_dump -U postgres -Fc keycloak > keycloak-$(date +%F).dump
Güncelleme
Güncellemeyi kurum başlatır; otomatik güncelleme yoktur.
-
Yedek alın (yukarıda). Migration’lar yalnızca ileri yönlüdür; geri dönüş yedekten yapılır.
-
.env’deFLEET_VERSION’ı yeni sürüme çekin. -
Açın:
docker compose pull docker compose up -d
Aynı ana sürüm içinde en fazla bir minör sürüm atlanabilir (1.2 → 1.4 olur, 1.2 → 1.5 olmaz); LTS’ten bir sonraki
LTS’e doğrudan geçilebilir. Desteklenmeyen bir geçişte training-api veritabanına dokunmadan durur ve önce hangi sürüme
geçileceğini loglar (docker compose logs training-api).
İmza doğrulama
İmajlar cosign ile imzalıdır ve SBOM’ları (SPDX) imaja eklidir. Sürümün cosign.pub ve images.txt dosyalarıyla:
cosign verify --key cosign.pub <imaj>@<digest>
cosign verify-attestation --key cosign.pub --type spdxjson <imaj>@<digest>
İnternetsiz ağda --insecure-ignore-tlog=true ekleyin (şeffaflık kaydına erişilemez, yalnızca anahtar doğrulanır).
Geri dönüş
Eski imajı yeni şemayla açmak desteklenmez; training-api açılmayı reddeder. Geri dönmek için:
docker compose stop training-api keycloak
docker compose exec -T postgres dropdb -U postgres training
docker compose exec -T postgres createdb -U postgres -O training_app training
docker compose exec -T postgres pg_restore -U postgres -d training --no-owner --role=training_app < training-<tarih>.dump
# keycloak veritabanı da aynı şekilde (sahibi keycloak)
# .env'de FLEET_VERSION'ı önceki sürüme alın
docker compose up -d
Ayar referansı (.env)
Sürümle gelen .env.example dosyasındaki bütün ayarlar.
Sürüm ve imajlar
| Ayar | Örnek | Açıklama |
|---|---|---|
| FLEET_REGISTRY | egitim-registry.xenopsoftware.com/fleet-egitim | Kurulum kaydıyla birlikte verilir. Yükseltme: FLEET_VERSION'ı değiştirip docker compose pull && docker compose up -d (önce yedek alın, README). Aynı ana sürümde en fazla bir minör sürüm atlanabilir. Depoya konsol kimlik bilgisiyle (CONSOLE_CLIENT_ID / CONSOLE_CLIENT_SECRET) giriş yapılır; lisans geçerliyken çekilebilir (README, Kurulum). |
| FLEET_VERSION | 1.0.0 |
Adresler
| Ayar | Örnek | Açıklama |
|---|---|---|
| PANEL_HOST | egitim.example.com.tr | Üç ad da ters vekil sunucunuzda HTTPS ile yayınlanır (README, Ters vekil sunucu). Eğitim paneli (kursiyer ve yöneticiler) |
| API_HOST | egitim-api.example.com.tr | training-api (panel ve mobil uygulama buraya bağlanır) |
| AUTH_HOST | egitim-giris.example.com.tr | Keycloak (giriş ekranı) |
| BIND_IP | 127.0.0.1 | Portların bağlandığı adres. Ters vekil sunucu aynı makinedeyse 127.0.0.1 kalır. |
Kurum (tek tenant)
| Ayar | Örnek | Açıklama |
|---|---|---|
| TENANT_SLUG | kurum | İlk açılışta açılır; slug sonradan değiştirilemez. 3-40 karakter: küçük harf, rakam ve tire. |
| TENANT_NAME | Kurum A.Ş. | |
| TENANT_ADMIN_EMAIL | [email protected] | İlk yönetici. Parola geçicidir, ilk girişte değiştirilir. INVITE_MODE=email ve SMTP ayarlıysa boş bırakılabilir: yöneticiye parolasını belirleyeceği e-posta gider. |
| TENANT_ADMIN_PASSWORD | — |
Platform konsolu
| Ayar | Örnek | Açıklama |
|---|---|---|
| CONSOLE_URL | — | Katalog, video ve paketler konsoldan gelir. Değerler kurulum kaydıyla birlikte verilir. |
| CONSOLE_TOKEN_URI | — | |
| CONSOLE_CLIENT_ID | — | |
| CONSOLE_CLIENT_SECRET | — | |
| CONSOLE_LEARNER_KEY | — | Konsola kursiyer yerine bu anahtarla türetilen takma kimlik gider. Kurulumda bir kez üretin, sonra değiştirmeyin. |
Parolalar ve anahtarlar (kurulumda bir kez üretin)
| Ayar | Örnek | Açıklama |
|---|---|---|
| POSTGRES_PASSWORD | — | |
| TRAINING_DB_PASSWORD | — | |
| KEYCLOAK_DB_PASSWORD | — | |
| VALKEY_PASSWORD | — | |
| KEYCLOAK_ADMIN_PASSWORD | — | Keycloak yönetim konsolu (https://AUTH_HOST/admin), kullanıcı admin. Yalnızca ilk açılışta uygulanır. |
| KEYCLOAK_BACKEND_CLIENT_SECRET | — | training-api'nin Keycloak yönetim hesabı (fleet-backend). Realm ilk açılışta bu değerle kurulur; sonradan değiştirmek için Keycloak'ta da değiştirin. |
| TRAINING_PACKAGES_TOKEN_SECRET | — | Paket dosyalarına erişim token'ları (HMAC) |
| TRAINING_CRYPTO_SECRET_KEY | — | Veritabanındaki gizli alanların şifreleme anahtarı (AES-256, base64 32 bayt: openssl rand -base64 32). Kaybolursa şifreli alanlar okunamaz; yedekle birlikte saklayın. |
İsteğe bağlı
| Ayar | Örnek | Açıklama |
|---|---|---|
| INVITE_MODE | temporary-password | Davet: temporary-password (geçici parola panelde gösterilir) ya da email (Keycloak'ın SMTP'si, README) |
| OTEL_EXPORTER_OTLP_ENDPOINT | — | OpenTelemetry toplayıcısı (iz ve metrik), ör. http://otel-collector:4318 |
| POSTGRES_MEMORY | 512m | Bellek sınırları |
| KEYCLOAK_MEMORY | 1g | |
| TRAINING_API_MEMORY | 1g |