Linux + Docker / Podman üzerinde on-premise, internete kapalı air-gap ortam veya Azure / AWS / GCP bulutta — bootstrap.sh tek komutla kurulum, üretim öncesi tüm gereksinimleri bu sayfada bulursunuz.
install/smoke.sh 7 kontrol noktası. Müşteri demo'sundaki 502/500 race penceresi sıfırlandı, raporlar tam kurumsal kimlikli.
Adım adım dummy-friendly anlatım — kurum içi paylaşım için PDF olarak indirin. Plain-language installation walkthrough, A4 PDF.
PoC öncesi 4 motorlu showcase (SQL Server / PG / MySQL / Mongo + auto-login viewer + GuidedTour). bootstrap-customer-demo.sh tek script — 4 kritik blokeri (frontend build-arg, CORS+nginx, certbot, bundle DCE) 15 dakikada kapatır. DEMO_MODE=true → lisans bypass'li, sadece showcase, satış kanalı değildir.
İzlediğiniz instance sayısı + retention süresi ile sunucu boyutu doğrudan orantılıdır. Aşağıdaki tablo gerçek production deployment'lardan çıkarılmıştır; üst limitlerin %20 üzerinde mostlanmasi önerilir.
| Senaryo | vCPU | RAM | Disk (SSD) | Notlar |
|---|---|---|---|---|
| Geliştirme | 2 | 4 GB | 30 GB | En az bir test DB instance'ı eklemek gerekir (her tenant kendi source'una bağlanır) |
| Küçük (≤10 instance) | 4 | 8 GB | 50 GB | Önerilen üretim minimum |
| Orta (50 instance) | 8 | 16 GB | 200 GB | Retention 30 gün varsayılır |
| Büyük (200 instance) | 16 | 32 GB | 500 GB | Mongo replica set (3 node) önerilir |
| Kurumsal (500+ instance) | 32 | 64 GB | 1 TB+ | HA topology zorunlu, ayrı load balancer |
Disk tüketimi yaklaşık: 0.5–2 GB / instance / ay (toplama sıklığı + retention'a bağlı).
| Dağıtım | Sürüm | Container Runtime | Durum |
|---|---|---|---|
| Ubuntu | 22.04 LTS, 24.04 LTS | Docker 24+ veya Podman 4+ | ✅ Tam destek |
| Debian | 12 (Bookworm) | Docker 24+ | ✅ Tam destek |
| RHEL | 9, 8.6+ | Podman 4+ (default) veya Docker | ✅ Tam destek |
| Oracle Linux | 9, 8 | Podman 4+ | ✅ Tam destek |
| Rocky Linux | 9 | Podman 4+ | ✅ Tam destek |
| AlmaLinux | 9 | Podman 4+ | ✅ Tam destek |
| openSUSE Leap | 15.5+ | Docker 24+ | ⚠️ Topluluk testi |
| Amazon Linux | 2023 | Docker 24+ | ⚠️ Topluluk testi |
SELinux enforcing modunda RHEL/Oracle/Rocky/Alma için ek ayar gerekebilir; SELINUX runbook ayrı dokümandır.
| Port | Protokol | Yön | Amaç |
|---|---|---|---|
| 80 / 443 | HTTPS | Müşteri → Sentinel | Reverse proxy üzerinden web UI |
| 3000 | HTTP | LAN | Frontend Nginx (reverse proxy yoksa) |
| 8001 | HTTP | LAN | Backend FastAPI |
| 27017 | TCP | Sadece localhost | MongoDB — dış erişim KAPALI |
| 1433 / 5432 / 3306 / 27017 | TCP | Sentinel → Hedef DB | İzlenen veritabanlarına ulaşım |
Production'da yalnız 80/443 dışarı açılır; diğer portlar firewall'da bloklanmalı.
Kurum sunucusunda Ubuntu/RHEL/Debian üzerinde Docker veya Podman ile. Internet erişimi var; ACR'dan image pull. 5-15 dakika kurulum.
Banka çekirdek ağı, kamu, savunma, sigorta için iki host modeli — stage'de image hazırla, USB/SCP ile target'a taşı, target'ta bootstrap.
Aynı container image'ları yönetilen Linux VM veya Kubernetes üzerinde. Bulut üreticisinin yönetilen DB'leri (Azure SQL, RDS, Cloud SQL) izlenebilir.
Linux sunucunuza root olarak şu tek komutu çalıştırın. Kurulum sırasında size yalnızca admin e-posta + parola sorulur. Geri kalan her şey otomatiktir: Docker yoksa kurulur, imajlar registry'den anonim olarak çekilir, MongoDB Replica Set ayağa kaldırılır, admin kullanıcı oluşturulur. Azure hesabı veya başka bir credential gerekmez.
install.sh, Docker'ın resmi get.docker.com convenience script'ini kullanır — tek komut aşağıdaki tüm dağıtımlarda aynı şekilde çalışır:
| Dağıtım | Sürüm | Tek komut | Not |
|---|---|---|---|
| Ubuntu | 22.04 / 24.04 LTS | ✓ | En yaygın test edilen |
| Debian | 12 (Bookworm) / 13 | ✓ | Ubuntu ile birebir |
| RHEL | 8 / 9 | ✓ | dnf üzerinden Docker |
| Rocky Linux | 8 / 9 | ✓ | RHEL kompat |
| AlmaLinux | 8 / 9 | ✓ | RHEL kompat |
| Oracle Linux | 8 / 9 | ✓ | RHEL kompat |
| CentOS Stream | 9 / 10 | ✓ | RHEL upstream |
| Fedora | 38+ | ✓ | Docker resmi destek |
| Amazon Linux | 2023 | ✓ | EC2'de yaygın |
| SUSE / openSUSE | Leap 15.5+ | ⚠ | Önce zypper install docker docker-compose |
| Alpine | 3.18+ | ⚠ | Önce apk add docker docker-cli-compose |
| Arch / Manjaro | rolling | ⚠ | Önce pacman -S docker docker-compose |
⚠ işaretli dağıtımlar: Docker'ı kendi paket yöneticisiyle önce kurun, ardından aynı tek komutu çalıştırın. install.sh mevcut Docker'ı algılar, kuruluysa atlar. Architecture: AMD64 (x86_64) — ARM64 için air-gapped tarball gerekli (DMC'ye danışın).
| Değişken | Açıklama | Default |
|---|---|---|
SENTINEL_MODE | Kurulum modu: poc veya production | poc |
SENTINEL_ADMIN_EMAIL | İlk admin e-posta (interaktif modda sorulur) | — |
SENTINEL_ADMIN_PASS | İlk admin parolası (min 12 char; production: büyük+küçük+rakam+sembol) | — |
SENTINEL_LICENSE_KEY | Ed25519 imzalı JWT lisans (production zorunlu) | — |
SENTINEL_PUBLIC_IP | Public IP override (Azure/AWS metadata otomatik denenir) | otomatik |
SENTINEL_VERSION | İmaj sürümü | v0.2.1 |
SENTINEL_BASE_URL | Asset host override (air-gap için kendi mirror) | SWA URL |
SENTINEL_ACR_USERNAME | Private ACR pull kullanıcısı (token ile birlikte) | — (anonim) |
SENTINEL_ACR_PASSWORD | Private ACR pull parolası/token | — (anonim) |
SENTINEL_FIREWALL_AUTOOPEN | ufw/firewalld portları otomatik aç (80, 3000, 8001) | poc=yes, prod=no |
SENTINEL_SKIP_DOCKER_INSTALL | Docker kurulumunu atla (zaten kurulu varsayılır) | no |
SENTINEL_KEEP_PLAINTEXT_PASS | .env'den seed sonrası ADMIN_PASSWORD'u silmesin (uyarı) | no |
INSTALL_DIR | Kurulum kök dizini | /opt/sentineldb360 |
SENTINEL_MODE ile iki ana mod arasında geçiş yapabilirsiniz. PoC modu test/değerlendirme için, production modu üretim deploy'u için.
| Davranış | PoC (default) | Production |
|---|---|---|
SENTINEL_LICENSE_KEY | Opsiyonel (LICENSE_LOCAL_FALLBACK=true) | Zorunlu (Ed25519 JWT) |
| 14 gün ücretsiz tam özellik | ✓ | — (lisans şart) |
| Docker kurulum onayı | Otomatik (sessiz) | İnteraktif onay |
| Firewall otomatik aç | ufw/firewalld açar | Sysadmin manuel (komut önerilir) |
| Parola politikası | Min 12 karakter | 12 + büyük + küçük + rakam + sembol |
| Min CPU | 2 vCPU | 4 vCPU |
| Min RAM | 4 GB | 8 GB |
| OS beyaz liste | Bilinmeyen distro uyarıyla geçer | Sıkı (Ubuntu/Debian/RHEL/Rocky/Alma/Oracle/CentOS/Fedora/Amazon Linux) |
| Plaintext parola seed sonrası silinir | ✓ | ✓ (zorlanır) |
ss ile), network erişilebilirlik testi.get.docker.com sha256 doğrulamayla kurulur (production modda interaktif onay), kurulum log'u /tmp/'a yazılır./opt/sentineldb360/'a 11 dosya HTTPS download, retry+kritik dosya bütünlük kontrolü.docker login, yoksa anonim pull doğrulama (test imajı çekilir, sonra silinir).curl | bash'ta da çalışır) veya env. Production modda parola politikası zorlanır.SENTINEL_LICENSE_KEY JWT format kontrolü (xxxx.yyyy.zzzz). PoC: LICENSE_LOCAL_FALLBACK=true otomatik..env.production üretilir (chmod 600, root:root): 256-bit JWT/SECRET/ENC, MongoDB pass, public IP otomatik tespit. Firewall mod-bazlı.docker compose up -d./api/health max 120s bekler, frontend + site, MongoDB RS 3/3 (container_name bağımsız: compose ps -q), admin user idempotent doğrulama (create_admin.py), .env'den plaintext ADMIN_PASSWORD silinir.install.sh v2 banka/kamu/kritik altyapı için sertleştirilmiştir. Aşağıdaki kontroller otomatik yapılır:
lsof komutuyla bulma önerisi sunulur.chcon -Rt svirt_sandbox_file_t önerisi.SENTINEL_ACR_USERNAME/PASSWORD ile docker login; verilmezse anonim pull doğrulanır..env'den ADMIN_PASSWORD satırını sed ile siler. SENTINEL_KEEP_PLAINTEXT_PASS=yes ile devre dışı (uyarı ile).docker compose ps -q <service> ile container ID. Compose service adı yeniden adlandırılırsa kırılmaz./var/log/sentinel-install-<timestamp>.log'a yazılır (yoksa /tmp/). Her satır timestamp + renk + sembol.
✓ Kurulum biter bitmez 14 gün ücretsiz tam özellik PoC çalışır — DMC'den lisans almanıza, herhangi bir kayıt yapmanıza, kredi kartı vermenize gerek yoktur. install.sh otomatik olarak LICENSE_LOCAL_FALLBACK=true ayarını açar; tüm 116 compliance sekmesi, AI Insights, blocking analizi, security center — hepsi kullanılabilir.
14 gün sonunda kalıcı kullanım için DMC'den bir JWT lisansı alırsınız. JWT (RFC 7519), JSON Web Token — küçük bir metin dosyası içine müşteri adı, plan tier (Starter / Professional / Enterprise), instance limiti, geçerlilik tarihi gibi bilgiler kodlanmış halde. Ed25519 imzalı (modern asimetrik kriptografi) — DMC'nin private key'i ile imzalanır, sizin sunucunuzda public key ile doğrulanır.
.env.production'a yapıştırılır (LICENSE_KEY=eyJ...)Lisans almak için (PoC bittikten sonra ya da daha erken): [email protected] — instance sayısı ve plan tercihinizi belirtin, aynı gün e-posta ile lisans satırı düzenlenir. Fiyatlar: /pricing.
Sentinel DB 360 cloud-agnostic — aynı Docker image'ları her bulutta çalışır. Tek fark: VM provisioning + ağ yapılandırma + yönetilen DB izleme yetkisi. Aşağıdaki rehberler 50 instance senaryosu içindir; daha büyük için Kubernetes önerilir.
Azure VM (Standard_B4ms) + Premium SSD 200GB + NSG (80/443 izin). Azure SQL DB / MI / VM üzerindeki SQL Server izlenebilir. Application Gateway veya Front Door reverse proxy olarak kullanılabilir.
EC2 (t3.xlarge) + gp3 EBS 200GB + Security Group (80/443 izin). RDS (PostgreSQL/MySQL/SQL Server) + Aurora + DocumentDB izlenebilir. ALB / CloudFront reverse proxy.
Compute Engine (e2-standard-4) + SSD persistent disk 200GB + Firewall (80/443 izin). Cloud SQL (PostgreSQL/MySQL/SQL Server) + AlloyDB izlenebilir. Cloud Load Balancing reverse proxy.
200+ instance senaryosunda Kubernetes önerilir — backend yatay scale (replica 2-N), Ingestor Redis Streams consumer group ile yatay scale, MongoDB replica set StatefulSet olarak. AKS / EKS / GKE üçü de desteklenir; Helm chart hazırlık aşamasında (P2-3 backlog: MongoDB sharding ile birlikte).
| Kümeleme | Önerilen Node Boyutu | Node Sayısı | Notlar |
|---|---|---|---|
| AKS | Standard_D4s_v5 | 3+ | Azure CNI + Premium SSD storage class |
| EKS | m5.xlarge | 3+ | EBS gp3 storage class + ALB ingress |
| GKE | e2-standard-4 | 3+ | SSD persistent disk + GCE ingress |
3 hazır config dosyası (nginx/, examples/) — HTTPS, WebSocket upgrade, gzip, security headers (HSTS, CSP, X-Frame-Options) dahil. Kurum PKI'sından sertifika ile çalışır.
mongodump + oplog tail + LVM snapshot + 3 ay periyot restore tatbikat. RTO 30dk / RPO 1sa hedefleri. Tatbikat checklist + DR günlüğü şablonu.
Sunucu reboot sonrası container'ların otomatik başlaması için sentinel-sd360.service + sentinel-sd360-collector.service. Rootless mode için lingering aktif.
secrets_loader.py ile JWT_SECRET, MongoDB password, API key'ler vault'tan okunur. Container env'de plain text değil — kurum güvenlik politikasına uyumlu.
Azure AD, Okta, Google Workspace, ADFS desteği. SSO_PROVIDER=oidc veya saml. MFA TOTP/SMS (pyotp) ek katman olarak.
Kurum SRE ekibi Sentinel'in kendisini Grafana'dan izleyebilir. /metrics endpoint, /healthz subsystem checks, X-Request-ID correlation, 15dk dedup error mail.
mongodump --out /opt/sentineldb360/backup-$(date +%F) (BACKUP_RESTORE.md)docker compose -f docker-compose.prod.yml pulldocker compose -f docker-compose.prod.yml up -dcurl http://localhost:8001/api/health 200 dönmeli; rollback gerekirse önceki tag'e dön| Belirti | Sebep | Çözüm |
|---|---|---|
| backend HTTP 503 dönüyor | MongoDB replica set initiate olmamış | docker logs mongo-init kontrol; rs.initiate() manuel |
| /api/v2/insights yanıt vermiyor | Azure OpenAI key geçersiz veya Ollama down | AI_DEFAULT_PROVIDER=ollama + OLLAMA_URL kontrol |
| Kullanıcı login olamıyor (401) | JWT_SECRET değişti veya cookie domain yanlış | Browser cookie temizle + reverse proxy SetCookie domain kontrol |
| Disk hızla doluyor | Retention çok uzun veya XEvent ring çok büyük | Admin → Retention 30 güne çek + db.metrics_ts.dataSize() |
| Lisans hatası "expired" | JWT exp geçti veya HWID değişti (donanım swap) | [email protected] → yeni lisans dosyası + docker compose restart |
2026-05-20 günü resource group baştan oluşturuldu, fresh Ubuntu 22.04 VM (Standard B4ms) üzerinde install/ paketi adımları manuel müdahale olmadan koştu. Tüm yaşanan ilk-kez sorunları kalıcı olarak ACR image'lara baked. Müşteri release bu noktadan itibaren "docker compose pull && up" tek satıra düştü.
| Kontrol | Beklenen | Gerçekleşen |
|---|---|---|
| Container sayısı | 12/12 Up | ✓ 12/12 healthy |
| Bootstrap source ekleme | 4/4 success | ✓ MSSQL + PG + MySQL + Mongo |
| Sample data — Postgres pagila | 1000 film | ✓ 1000 |
| Sample data — diğer 3 motor | MySQL sakila + Mongo sample_mflix + MSSQL AdventureWorks | ✓ build-time pre-baked |
GET / | 200 | ✓ 200 |
GET /healthz | 200 | ✓ 200 |
POST /api/auth/demo-login | 200 + cookie | ✓ 200, sd360_session set |
GET /api/auth/me | 200 + viewer JSON | ✓ Demo Visitor (viewer) |
POST /api/sources | 403 (read-only) | ✓ 403 (nginx enforce) |
| Branding leak (Nebim) | YOK | ✓ title + meta temiz |
İlk dry-run'da yaşanan sorunlar tek tek tespit edildi; kaynak Dockerfile/compose/env'ye baked, ACR'a push edildi. Müşteri release'inde tekrar yaşanmaz.
| # | Sorun | Kalıcı çözüm |
|---|---|---|
| 1 | Postgres alpine apt-get not found | postgres:16 (debian) + sample SQL build-time gömülü |
| 2 | MySQL Oracle Linux apt-get not found | SQL dump lokal'de indirilip COPY ile image'a göm |
| 3 | Mongo init runtime apt-get install | JSON dosyaları build-time /samples/'a baked, init mongoimport |
| 4 | Backend /opt/sentineldb360 PermissionError | Compose env SETTINGS_DIR=/tmp/sentinel-settings |
| 5 | Backend LICENSE_ADMIN_SECRET required | .env.example'a eklendi + auto-generate komutu doc'ta |
| 6 | Frontend nginx upstream frontend:3000 resolve fail | Frontend image port 80'de dinler — nginx.conf server frontend:80 |
| 7 | Bootstrap "Invalid credentials" (env_file eksik) | Compose'a env_file: [.env] eklendi |
| 8 | Pagila SQL role "postgres" does not exist | Dockerfile 00-postgres-role.sql pre-init (CREATE ROLE) |
| 9 | "for Nebim" hard-coded branding | frontend/public/index.html + BrandingContext.js + backend mock data temizlendi |
| 10 | Cookie Secure flag HTTP testte gönderilmiyor | Demo için COOKIE_SECURE=false (production install =true kalır, Cloudflare HTTPS varsayar) |
| 11 | ACR Docker Hub rate-limit (paralel build) | Sıralı retry + rate-limit reset bekle; long-term: ACR Cache Rule + Docker Hub PAT |
demo.sentineldb360.com ziyaret eden herkese aynı viewer kullanıcısıyla otomatik login yapılır — login formu çıkmaz, parola istenmez. Demo bütünlüğünü korumak için bu bilgiler read-only: nginx katmanında tüm yazma istekleri (POST/PUT/DELETE/PATCH) 403 ile reddedilir, ayrıca admin login akışı (POST /api/auth/login) DEMO_MODE'da bloklanır. Ziyaretçi source ekleyemez, kullanıcı yaratmayamaz, parola değiştiremez.
| Rol | Kimlik | Erişim | Değiştirilebilir mi? |
|---|---|---|---|
| Demo viewer (otomatik) | [email protected]parolasız — auto-login cookie ile |
Tüm read endpoint'ler + NOC + dashboard + WebSocket canlı metrikler | ✗ Hayır |
| Bootstrap admin (sadece source ekleme için) | [email protected].env.demo'da openssl rand -hex 32 ile üretilir, asla site'de paylaşılmaz |
Sadece sentinel-bootstrap one-shot container'ın 4 source eklemek için |
✗ Hayır (DEMO_MODE'da login bloklu) |
İstisna: POST /api/auth/demo-login (login bypass), POST /api/auth/logout (oturum sonlandır), POST /api/auth/refresh (token yenile). Bunların dışında hiçbir POST/PUT/DELETE/PATCH demoda kabul edilmez. Demo verisi (4 hazır DB) her VM restart'ında image'dan yeniden üretilir; ziyaretçi değişiklikleri kalıcı olmaz.
# 1) VM provisioning (Azure örneği — diğer cloud için aynı pattern) az group create -n rgSentinel -l westeurope az vm create -g rgSentinel -n sentinel --image Ubuntu2204 --size Standard_B2ms \ --admin-username azureuser --generate-ssh-keys --assign-identity az vm open-port -g rgSentinel -n sentinel --port 80 --priority 1010 az role assignment create --assignee $(az vm show -g rgSentinel -n sentinel --query identity.principalId -o tsv) \ --scope $(az acr show --name dmcacr22819 --query id -o tsv) --role AcrPull # 2) VM'de Docker + ACR login ssh azureuser@<VM_IP> curl -fsSL https://get.docker.com | sudo sh curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash az login --identity && az acr login --name dmcacr22819 # 3) install/ paketini taşı + secret üret + başlat scp -r install/ azureuser@<VM_IP>:~/sentinel-prod/ cd ~/sentinel-prod cp .env.prod.example .env.prod for k in JWT_SECRET SECRET_KEY APP_ENC_KEY LICENSE_ADMIN_SECRET; do echo "$k=$(openssl rand -hex 32)" >> .env.prod done sudo mkdir -p /opt/sentineldb360/mongo-data && sudo chown -R 999:999 /opt/sentineldb360/mongo-data docker compose -f docker-compose.prod.yml --env-file .env.prod pull docker compose -f docker-compose.prod.yml --env-file .env.prod up -d # 4) Smoke (3 dk sonra) curl http://localhost/healthz # → {"status":"ok"} curl http://localhost/api/health # → 200
Sentinel DB 360 ile birlikte gelen 7 markdown rehber dosyası adımı adıma her senaryoyu kapsar. Müşteriye sevk edilen P0 paketinin parçasıdır.
| Dosya | Kapsam | Boyut |
|---|---|---|
docs/INSTALL.md | Bağlantılı kurulum (Linux + Docker / Podman) tam rehber | ~8 KB |
docs/AIRGAP_INSTALL.md | Air-gap (offline) kurulum, iki host modeli, USB transfer | ~13 KB |
docs/BACKUP_RESTORE.md | Backup + DR runbook, 3 ay periyot tatbikat checklist | ~11 KB |
docs/RUNBOOK.md | Operasyonel runbook (alarm response, troubleshooting) | ~10 KB |
docs/SECURITY.md | Security policy, vulnerability disclosure | ~5 KB |
nginx/ + examples/ | 3 reverse proxy örneği (Nginx, Apache, IIS ARR) + 2 systemd unit | — |
bootstrap.sh | İnteraktif kurulum wizard'ı, önkoşul kontrolleri, .env oluşturma | — |
Tüm rehberler Türkçe; ilave SELinux, Kubernetes Helm chart ve LDAP/AD entegrasyon rehberleri 2026 P2 backlog'unda.
Kurulum öncesi mimarinizi birlikte gözden geçirelim — 30 dakikada planı çıkaralım.