# TrafficPumper SERP Production Runbook

Aktivasyon seviyeleri: disabled dis istek yapmaz; validation_only yalniz config ve acik izinle ucretsiz bakiye health kontroludur; canary normal customer/scheduler kapaliyken gunde en fazla bir kontrollu sorgudur; enabled butce, kill switch ve circuit breaker altinda normal kullanimdir. Hicbir gecis otomatik yapilmaz.

## Deploy

1. Secret degerlerini yalniz production environment/secret store icinde saglayin.
2. php artisan migrate --force
3. npm ci ve npm run build
4. php artisan optimize:clear
5. Environment yuklendikten sonra config:cache, route:cache ve view:cache
6. php artisan horizon:terminate; process manager yeniden baslatmalidir.
7. php artisan schedule:list
8. Dis isteksiz php artisan serp:dataforseo:health --json
9. Ayri acik izinle health --remote --json
10. Once canary dry-run; ayri izinle yalniz bir kez --execute.
11. Maliyet, normalization, audit, queue ve log kontrolu tamamlanmadan enabled moda gecmeyin.

Migration additive oldugundan bakim modu zorunlu degildir; release eszamanliligini deployment sistemi guvenceye almiyorsa bakim modu kullanin.

## Scheduler ve Horizon

Tek cron: * * * * * cd /GERCEK/PROJE/YOLU ve php artisan schedule:run. Windows gelistirme yolu production yolu degildir. Horizon default ve serp kuyruklarini tuketir. Coklu sunucuda Redis ortak cache/lock/circuit icin zorunludur.

## Emergency stop ve rollback

Super_admin emergency stop ile yeni Live/submit islemlerini keser; mevcut ucretli Standard task polling sonucu kurtarir. Gerekirse worker/scheduler kontrollu durdurulur, onceki release donulur ve config cache yenilenir. Additive migration veri riski varsa korlemesine geri alinmaz. Stuck kayitlar once serp:reconcile, sonra onayla --execute ile islenir.

## Ilk 24 saat

Saatlik harcama, bakiye, basari orani, auth/429/5xx, circuit/kill state, stuck/poll sayilari, backlog, failed jobs ve scrub edilmis loglari kontrol edin. Secret, Authorization header, keyword veya ham response gorulurse emergency stop uygulayin.

## AŞAMA 8 — Güvenli production geçişi (Seviye 0)

Bu çalışma alanından production sunucusuna erişim veya deployment yetkisi verilmemiştir. Gerçek proje yolu, PHP binary, web/PHP-FPM/Horizon servis adları, cron/timer, release ve rollback hedefi **production'da salt okunur keşfedilecek**; Windows geliştirme yolları production değeri değildir.

### Deployment öncesi kapılar

- Release/commit ve doğrulanmış rollback hedefini kaydet; yedek politikasının varlığını doğrula.
- `APP_ENV=production`, `APP_DEBUG=false`; shared Redis cache/lock ve kalıcı queue kullan.
- `DATAFORSEO_LOGIN` ve `DATAFORSEO_PASSWORD` yalnız secret store/environment içinde bulunmalı; değerleri ekrana basma.
- Başlangıç durumu `SERP_CHECKS_ENABLED=false`, `SERP_OPERATION_MODE=disabled`, `SERP_PROVIDER=dataforseo` kalmalıdır.
- Önce `php artisan migrate --pretend`, yetkili deploy sırasında sonra `php artisan migrate --force` çalıştır.
- Lock dosyalarıyla production Composer/npm kurulumu ve `npm run build`; ardından cache, route, view ve worker yenileme adımlarını platformda keşfedilmiş servis adlarıyla uygula.
- `/up`, ana sayfa, login, admin login, migration status, route list, `schedule:list`, Horizon ve `default,serp` tüketimini doğrula.

`php artisan serp:production:preflight --json` dış HTTP yapmaz ve kritik kapıda non-zero döner. Disabled deploy sonrasında `serp:dataforseo:health --json`, `serp:dataforseo:canary --json`, `serp:reconcile` ve `serp:operations:snapshot --window=24h --json` çalıştırılır. Preflight production ortamında PASS olmadan aktivasyon ilerletilmez.

### Ayrı onay kapıları

1. Remote health: yalnız ayrı açık onayla `serp:dataforseo:health --remote --json`. Bakiye critical altındaysa veya health başarısızsa dur.
2. Tek canary: remote health PASS sonrasında ayrıca canary mode değişikliği ve ayrıca tek ücretli `canary --execute` onayı gerekir. Normal customer ve scheduler trafiği kapalı kalır.
3. Limited production: canary kabul kriterlerinin tamamı PASS olduktan sonra ikinci ayrı açık onay gerekir. İki anahtar birlikte açılmadan normal trafik başlamaz.

Canary kabulü; başarılı HTTP/envelope, yalnız organic sonuç, `rank_group` normalizasyonu, depth 10, tek reservation/reconciliation, izin verilen maliyet, scrubbed audit/log, kapalı circuit ve doğru bütçe sayaçlarının tamamını gerektirir. Eksikte emergency stop/disabled uygulanır.

### Limitler ve ilk 24 saat

Güvenli profil: günlük 1.00 USD, aylık 20.00 USD, uyarı %80, low balance 10.00 USD, critical balance 2.00 USD, Live rezervasyon 0.003 USD, Standard 0.001 USD, depth 10. Ramp-up yeni ücretli rezervasyonları atomik olarak ilk saat 5, ilk 6 saat 25, ilk 24 saat 100 toplam kontrolle sınırlar; daha önce ücretlenmiş Standard polling devam eder.

Filament `/admin/serp-operations` ve `serp:operations:snapshot` aynı metrik servisini kullanır. Bütçe, backlog, failed/stuck, health, kill/circuit ve ramp durumu izlenir. Support/admin salt okunur; emergency stop/clear yalnız `super_admin` yetkisidir. Audit kanıtları operasyon audit kayıtlarında, maliyetler bütçe ledgerında, hassas olmayan özet Filament/CLI'dadır.

### Rollback ve incident recovery

Önce emergency stop ile yeni ücretli trafik kesilir; ücretlenmiş Standard task polling kontrollü sürer. Release/commit kaydedilip önceki doğrulanmış release'e dönülür; config/route/view cache ve keşfedilmiş PHP-FPM/Horizon servisleri kontrollü yenilenir. Additive migration körlemesine rollback edilmez; ileri düzeltme kullanılır. `/up`, login, admin ve salt okunur SERP ekranları tekrar doğrulanır; budget/audit kayıtları silinmez.