Görünüm
Kubernetes ve Docker kurulumu
Kimin içinBT
Bu sayfa depodaki deploy/ klasörünün (deploy/K8S.md, deploy/compose, deploy/k8s) özetidir.
Önce kuru çalıştırma
Kubernetes manifestleri henüz gerçek bir kümede uçtan uca çalıştırılmamıştır. Uygulamadan önce kubectl apply -k deploy/k8s/base --dry-run=server ile doğrulayın ve bir hazırlık (staging) ortamında deneyin.
Servisler
| Servis | Açıklama |
|---|---|
one-api | CukoZ One API (kimlik, abonelik) |
one-portal | CukoZ One portalı (Next.js) |
suite-api | CukoZ Suite API |
suite-portal | CukoZ Suite portalı: panel, POS, QR menü (Next.js) |
postgres | PostgreSQL 16 |
redis | Redis 7 (önbellek) |
caddy | Kenar ters vekil + otomatik TLS (yalnızca Compose) |
Docker Compose (tek sunucu)
deploy/compose/ içinde docker-compose.yml, Caddyfile, .env.example ve initdb/01-databases.sh bulunur. Kalıcı birimler: pgdata, uploads.
.env.exampledosyasını.envolarak kopyalayıp doldurun:- Alan adları:
ONE_HOST,APP_HOST,QR_HOST,API_HOST - Veritabanı:
POSTGRES_PASSWORD,CUKOZ_DB_PASSWORD - OAuth:
ONE_PORTAL_CLIENT_SECRET,SUITE_CLIENT_SECRET - Sertifikalar:
OIDC_SIGNING_CERT_PATH,OIDC_ENCRYPTION_CERT_PATH,OIDC_CERT_PASSWORD,DP_CERT_PATH,DP_CERT_PASSWORD
- Alan adları:
- Sertifikaları üretin (aşağıya bakın).
docker compose up -d.- DNS’te dört alan adını sunucuya yönlendirin; Caddy sertifikaları otomatik alır.
Caddy yönlendirmesi: one.* yola göre One API ve One portalına; app.* ve qr.* suite-portal’a (25 MB gövde sınırı); api.* yalnızca /api/v1/hooks/* yoluna açık, diğer her şey 403.
Kubernetes
deploy/k8s/base/: namespace, ConfigMap’ler (config.yaml), ingress.yaml, RWX PVC (storage.yaml), kustomization.yaml ve dört servisin her biri için Deployment + Service + HPA + PodDisruptionBudget (varsayılan 2 kopya).
| Servis | HPA üst sınırı |
|---|---|
| one-api | 10 |
| one-portal | 6 |
| suite-api | 30 |
| suite-portal | 12 |
deploy/k8s/extras/: migrate-job.yaml, keda-scaledobject.yaml, networkpolicy.yaml, postgres-backup-cronjob.yaml. deploy/k8s/secrets.example.yaml yalnızca yer tutucu değerler içerir.
Ön koşullar
- ingress-nginx
- cert-manager (ClusterIssuer adı
letsencrypt) - metrics-server
- RWX destekli bir StorageClass (yüklenen dosyalar için)
- Yönetilen PostgreSQL veya CloudNativePG; PgBouncer (transaction modu) önerilir
İlk kurulum sırası
- İmajları derleyin ve gönderin:bash
docker build -t REGISTRY/cukoz/one-api:1.0.0 CukoZ.One # suite-api, one-portal ve suite-portal için de aynı şekilde cd deploy/k8s/base && kustomize edit set image ... - Sertifikaları üretin (
openssl req -x509 …veopenssl pkcs12 -export …):signing.pfx— OIDC imzalamaencryption.pfx— OIDC şifrelemedataprotection.pfx— ASP.NET Data Protection
- Secret’ları oluşturun (
secrets.example.yaml’ı örnek alın). - Uygulayın:bash
kubectl apply -f deploy/k8s/base/namespace.yaml kubectl apply -f deploy/k8s/extras/migrate-job.yaml # migrasyonlar kubectl apply -k deploy/k8s/base - DNS:
one,app,qr,apialt alan adlarını ingress’e yönlendirin.
Önemli yapılandırma anahtarları
- One:
OpenIddict__Issuer=https://one.cukoz.com/,OpenIddict__SigningCertificatePath,OpenIddict__EncryptionCertificatePath,DataProtection__CertificatePath,Database__MigrateOnStartup=false,ForwardedHeaders__KnownNetworks__N,RateLimiting__TrustedNetworks__N,Portal__Url - Suite:
One__Issuer,One__ApiBaseUrl,One__ClientId=cukoz.suite,One__EntitlementCacheSeconds=60,Integrations__PublicBaseUrl=https://api.cukoz.com - One portalı:
ONE_BASE_URL,ONE_CLIENT_ID,ONE_REDIRECT_URI,ONE_POST_LOGOUT_REDIRECT_URI - Suite portalı:
SUITE_ONE_BASE_URL,SUITE_ONE_ACCOUNT_URL,SUITE_API_BASE_URL,SUITE_CLIENT_ID,SUITE_REDIRECT_URI,SUITE_POST_LOGOUT_REDIRECT_URI,UPLOADS_DIR,PRIVATE_UPLOADS_DIR
Kubernetes’e uygunluk için yapılanlar
- Durumsuz servisler: Data Protection anahtarları veritabanında; One imzalama anahtarları PFX’ten yüklenir.
- Lider seçimi: tek seferlik arka plan işleri
core.job_leasestablosuyla. - Sağlık uçları:
/health/live(süreç ayakta) ve/health/ready(veritabanı erişilebilir). - Ayrı migrasyon:
--migrate-onlyveDatabase:MigrateOnStartup=false. - Zarif kapanış: .NET 30 sn, Next.js 25 sn, 5 sn
preStop. - Metrikler:
/metrics(Prometheus biçimi; yalnızca küme içi, KEDA ölçekleme için). - Kalp atışı: 15 saniyede bir One’a; One Admin → “Sistem durumu” ekranını besler.
- JSON log:
Logging__Console__FormatterName=json.
Büyük zincirler için
- Ayrı düğüm havuzları ve taint’lerle API ve portal iş yüklerini ayırın.
- Veritabanı yol haritası: okuma kopyası → PgBouncer → kiracıdan veritabanına eşleme (sharding).
Yedekler
Data Protection ve OIDC sertifikalarını (PFX + parolaları) güvenli bir kasada yedekleyin. Kaybedilirse oturumlar ve şifrelenmiş entegrasyon anahtarları çözülemez. postgres-backup-cronjob.yaml ile düzenli veritabanı yedeği alın.

