Drupal Web Sitesinde Teknik Sorun Çözme

Drupal; modüler yapısı, servis konteyneri, entity/field sistemi, cache katmanları ve konfigürasyon yönetimiyle son derece güçlü bir CMS’tir. Aynı güç, beklenmedik yan etkiler ve karmaşık hata zincirleri doğurabilir: cache invalidation patlamaları, yanlış permissions
/access check
sebebiyle 403/404’ler, Twig override sapmaları, kırık konfig eşleştirmeleri, yavaş SQL sorguları, kuyruğa takılan batch işler, composer bağımlılık çakışmaları, Cron sırada kilitlenen işler… Liste uzar.
1) 5 Dakikalık Ayakta Kalma Protokolü (Rapid Stabilization)
Hedef: Kullanıcı etkisini hızla azaltmak ve sorunu sınıflandırmak.
-
Durum raporu: Site offline mı? Belirli sayfalar mı? Oturumlu/oturumsuz farkı var mı?
-
Ölçüm: HTTP 5xx/4xx oranı, P95 yanıt süresi, son dağıtım zamanı.
-
Geçici kalkan: WAF’de problemli rota için oransal sınırlama; CDN’de stale-while-revalidate.
-
Rollback hazır mı? Son artefakt ve DB yedek teyidi.
-
İletişim: Paydaşlara “biliniyor/çalışıyoruz” notu + tahmini kapsam.
Drush/SSH hızlı paket:
drush status
drush cache:rebuild
drush watchdog:show –count=50 –severity=Error
drush queue:list
drush core:cron
Not: Hemen körlemesine cache:rebuild
basmayın; önce kanıt toplayın. Fakat kritik erişim blokajında geçici olarak gerekli olabilir.
2) Gözlemlenebilirlik Temeli: Log + Metrik + İz (Trace)
-
Log (Drupal Watchdog + HTTP + PHP-FPM):
admin/reports/dblog
vedrush watchdog:show
ile hataları sınıflandırın. JSON/structured log kurun. -
Metrik (Prometheus/Grafana): PHP-FPM kuyruk, Nginx upstream latency, DB slow query sayısı, cache hit/miss.
-
Tracing (OpenTelemetry/New Relic/Blackfire): Yavaş istekte span’leri görün; hangi fonksiyon/servis tıkıyor.
Kontrol listesi: “Hata var → kaydı var mı?”, “Yavaşlık var → hangi katmanda?”, “Flapping → anomali mi dağıtım sonrası mı?”.
3) Drupal Cache Anatomisi: Page, Dynamic, Render, Entity, Route, Twig
Belirti: Oturumlu kullanıcıda yavaşlık, oturumsuzda hızlı; “bazı bloklar hiç güncellenmiyor” ya da “tüm sayfa invalid oluyor.”
-
Page Cache: Giriş yapmamış kullanıcılar için tam sayfa; CDN ile çakışmaları düşünün.
-
Dynamic Page Cache: Oturumlu kullanıcıya fragman bazlı hız.
-
Render Cache: Render array bazlı; keys/contexts/tags/max-age doğruluğu kritik.
-
Entity/Route/Twig: Entity cache entity bağımlılıklarını izler; Route cache erişim kontrolüyle tetiklenir; Twig cache şablon değişimlerinde invalid olur.
Hızlı teşhis:
-
Cache hit ratio panosuna bakın.
-
Problemli bileşenin cache contexts/tags tanımlarını gözden geçirin (yanlış context → gereksiz miss).
-
“Global purge” yapan işlevleri kapatın/ince alt etiket (tags) kullanın.
4) Render Array & Twig Sorunları: Hiyerarşi, Özel Değişkenler, Escaping
Belirti: HTML çıktısı bozuk, bazı bloklar görünmüyor, Twig’de hata.
-
Twig debug:
services.yml
ile Twig debug açıp template önerilerini doğrulayın. -
Escaping:
|escape
/|raw
yanlış kullanımı XSS veya bozuk görünüme yol açar. -
Öncelik:
#pre_render
,#post_render
ile render array manipülasyonları; sıralama hataları istenmeyen HTML üretir.
Vaka: Menü ağacı#cache['contexts']
eksikliğinden tüm kullanıcılar için aynı görünüyordu; context eklenince kişiselleşme düzeldi.
5) Rota & Erişim (Route/Access Check) Hataları: 403 mü 404 mü?
Belirti: Kullanıcılar “sayfa yok” (404) ya da “erişim reddedildi” (403) alıyor.
-
Route access kontrolü:
AccessResult::allowedIfHasPermission()
tarzı denetimler yanlış konfigüre edilebilir. -
Yanlış maskeleme: 403 yerine 404 döndürmek güvenlik için bazen tercih edilir ama SEO’yu bozar.
-
Role/permission matrisi: Modül güncellemeleri yeni izinler eklemiş olabilir.
Drush:
drush user:role:list
drush pm:permission –format=table
Çözüm: İzin farklılıklarını ortamlar arası config export/import ile eşitleyin; route requirements
bölümünü gözden geçirin.
6) Konfigürasyon Yönetimi & Ortam Sapmaları (Config Split/Sync)
Belirti: Staging’de çalışan özellik prod’da çalışmıyor.
-
Config export/import (
drush cex/cim
) disiplinini uygulayın. -
Config Split/Multi-site: Ortama özel ayrımlar; yanlış split → prod’da eksik view/permission.
-
Active vs. Staged: Yarı kalmış importlar, eski UUID sorunları.
Kontrol listesi:
-
drush config:status
ile drift var mı? -
Konfig deposu versiyonlanmış mı?
-
Ortam değişkenleri (URL, anahtarlar)
.env
ile ayrılmış mı?
7) Cron & Queue: Sessizce Büyüyen Kuyruklar
Belirti: Belirli işler hiç bitmiyor, zamanla yavaşlama.
-
Cron yapılandırması: Trafik tetiklemeli cron yerine sistem cron.
-
Queue: Çalışan sayısı, batch boyutu, retry politikası; “zehirli mesaj” tespiti.
-
Gösterge: Bekleyen iş grafiği, ortalama tamamlama süresi.
Drush:
drush queue:list
drush queue:run my_custom_queue
drush core:cron
Vaka: Medya küçük resim üretimi kuyrukta birikiyor; batch boyutu/timeout ayarlanıp iş paralelleştirilince düzeldi.
8) Veritabanı Sorunları: Yavaş Sorgular, Kilitler, Eksik İndeksler
Belirti: TTFB artıyor, P95 yanıt süresi kötüleşiyor, 5xx dalgalanıyor.
-
Slow query log ve sorgu planı analizi.
-
İndeksler:
field_*
tablolarında uygun bileşik indeks. -
N+1: Views/EntityQuery hatalı kullanımında patlar.
Hızlı tedbir: En ağır sayfayı webprofiler/blackfire
ile profil; sorgu sayısı & toplamını izleyin. EXPLAIN
ile tam planı görün.
9) Composer & Bağımlılık Çatışmaları: Autoload, Sürüm Kilitleri, Patch’ler
Belirti: Dağıtım sonrası sınıf bulunamadı, “cannot redeclare”, composer.lock
drift’i.
-
İlke: Her zaman
composer.lock
ile dağıtın. -
Sürüm aralığı:
^
yerine gerekliyse~
/sabit versiyon. -
Patch & Fork: Topluluk modül patch’leri
cweagans/composer-patches
ile açıkça yönetilsin.
Komutlar:
composer validate
composer install –no-dev –optimize-autoloader
composer why-not drupal/modul_x # Çatışan kütüphane
10) Güncelleme Sonrası Kırılmalar: Hook Değişimleri, Service Container
Belirti: Modül/çekirdek güncellemesi sonrası fonksiyon/hizmet davranışı değişti.
-
Değişiklik notları: Yeni hook/event, kaldırılan servis ID’leri.
-
Container rebuild: Dağıtım sonrası
drush cr
ve opcache invalidasyonu. -
BC (geri uyum): Deprecation uyarılarını ciddiye alın; bir sonraki majorda kırılacaktır.
11) Erişilebilirlik ve Frontend Kaynaklı Sorunlar (INP/CLS Etkileri)
Belirti: Kullanıcı şikâyeti “site yavaş/yanıt vermiyor” ama backend sağlam.
-
INP: Büyük JS paketleri, bloklayan event handler’lar.
-
CLS: Görsellerde boyut belirtilmemesi, reklam/3P widget yerleşimi.
-
Çözüm: Kod bölme,
loading="lazy"
,decoding="async"
, fontpreload
.
Not: Frontend sorunları da teknik olaytır; panoda CWV izleyin.
12) Dosya Sistemi & İzin Hataları: private://
vs public://
Belirti: Yüklemeler başarısız, dosya linkleri 403/404.
-
Yapı: Gizli dosyalar
private://
altına; erişim Drupal üzerinden. -
İzinler:
sites/default/files
yazılabilir; PHP yürütme kapalı. -
Temp dizini: Dolu/izin dışı → PDF/ZIP üretimi çöker.
Drush:
13) Çok Dilli & Hreflang & İçerik Eşleştirme Problemleri
Belirti: Yanlış dilde içerik, hreflang karmaşası, çeviri eşleşmiyor.
-
Associations: İçerikler arası doğru eşleştirme; translation workflow.
-
URL stratejisi: Alt dizin/alan tutarlılığı.
-
Hreflang çıktısı: Şablonda doğru yer;
x-default
var mı?
Çözüm: Dil bağlantılarını kontrol eden bir kontrol listesi; CI’da hreflang
testi.
14) Arama Katmanı (Solr/Elasticsearch/DB Search) ve İndeks Tutarsızlığı
Belirti: Son içerik aramada yok; sorgular yavaş; 429/timeout.
-
İndeks durumları: Kuyruk işleniyor mu?
-
Saha analizi: Replika/heap/GC pausu; limit aşımlarında circuit breaker.
-
Fallback: Arama down ise basit aramaya degrade edin.
15) Güvenlik Kaynaklı Sorunlar: WAF, Rate Limit, CSP, CORS
Belirti: Bazı formlar hiç çalışmıyor, 403 alıyor, 3P script’ler yüklenmiyor.
-
WAF kuralı/False positive: Form parametrelerini tetikliyor olabilir.
-
CSP: Legit script engelleniyorsa
nonce
/hash
ekleyin. -
CORS: JSON:API/REST için domain beyaz listesi doğru mu?
Çözüm: Güvenlik & geliştirici ekipleri ortak triage; en dar kapsamlı kural.
16) Kullanıcı Yönetimi: Rol/Permission Drift ve Oturum Politikaları
Belirti: Bazı kullanıcılar “görmesi gerekeni göremiyor/gereksizi görüyor”, oturumlar erken düşüyor.
-
Permission diff: Güncelleme sonrası genişleyen/kapanan izinler.
-
Oturum:
SameSite
,Secure
,HttpOnly
; cihaz listeleri. -
2FA/SSO: Token süreleri; logout senkronizasyonu.
17) Dağıtım Mimarisi: Staging ≠ Prod (PHP, Nginx, Opcache)
Belirti: Staging temiz, prod bozuk.
-
Sürüm farkları: PHP minor farkı yeni uyarılar/hataya yol açabilir.
-
Opcache: Eski opcode temizlenmedi;
opcache_reset()
gerektirir. -
Nginx/Apache kural farkları: Clean URL,
X-Accel-Redirect
, cache headerları.
İlke: Prod’a canary; dakikalar içinde rollback imkânı.
18) Performans Darboğazları: PHP-FPM, DB, CDN, Edge
Belirti: Pik trafikte site bocalıyor.
-
PHP-FPM:
pm.max_children
doyumu, yavaş istek logu. -
DB: Replikasyon gecikmesi, lock’lar.
-
CDN: Edge hit düşmüş; varyant anahtarı bozulmuş.
Tedbir: Limit artırmadan önce bottleneck’i kanıtlayın; yoksa sadece daha büyük sorun yaratırsınız.
19) Drush ile “İlk Müdahale” Kitaplığı
-
Cache:
drush cr
, belirli bin:drush cache:bin-list
,drush cache:invalidate-tags tag_x
-
Konfig:
drush cex
/drush cim -y
-
Kullanıcı:
drush uli
(acil admin erişimi),drush role:add
-
Cron/Queue:
drush cron
,drush queue:run
-
Veritabanı:
drush sql:dump
,drush sql:cli
-
Watchdog:
drush ws --severity=Error --count=100
20) Test Piramidi ile Reprodüksiyon: Nasıl Tekrar Üretiriz?
İlke: “Reprodüksiyon yoksa fix yok.”
-
Unit/Kernel/Functional/JS testleri ile daraltın.
-
E2E (Playwright/Cypress) ile kullanıcı izi oluşturun.
-
Görsel regresyon (tema değişimlerinde).
CI kapısı: Hata yeniden üretilmeden merge yok.
21) Olay (Incident) Yönetimi ve RCA
Runbook – İlk 5 Dakika:
-
Alarm doğrula (HTTP 5xx, latency, iş KPI),
-
Son dağıtım diff,
-
CDN/WAF/DB sağlık,
-
Gerekirse rollback,
-
Paydaş iletişimi.
RCA (Root Cause Analysis): Kök neden, tetikleyiciler, etki kapsamı, CAPA (düzeltici/önleyici) ve kapanış tarihi.
22) Günlük Sorun Tipleri için Hızlı Oyun Kitabı (Playbook)
-
Beyaz sayfa / 500: PHP log → hatalı modül/şablon; tek tek devre dışı bırak (maintenance mod +
drush pmu modul_x
). -
403/404 artışı: Route access/permission diff; canonical/hreflang/redirect loop kontrolü.
-
Yüksek TTFB: PHP-FPM kuyruğu, DB lock, harici API yavaşlığı; timeout/backoff/circuit breaker.
-
Cache kaosu: Yanlış tags/contexts; invalidation kapsamını daralt.
-
Arama eksik içerik: İndeks kuyruğu + schema farkı; yeniden indeks + test.
-
Cron birikimi: “zehirli iş” ayıklama, batch/timeout, paralel işçi.
23) Migrate API ve İçerik Taşıma Sorunları
Belirti: Göçte kayıp/çift kayıt, medya kırıkları.
-
Mapping dosyaları ve delta migration; idempotent yazın.
-
Dosya yolları ve URI şemaları; kaynak → hedef dönüştürücüleri.
-
Doğrulama: Örneklem karşılaştırması; kontrol toplamı.
24) Güvenlik Güncellemeleri Sonrası “Yan Etkiler”
Belirti: Güvenlik yaması → beklenmedik kısıtlama.
-
CSP/Headers sıkılaştıysa inline script’ler kırılabilir → nonce/hash.
-
Rol/izin daralması; geçici muafiyet değil kalıcı çözüm üretin.
-
3P entegrasyon (Ödeme, kimlik) token hataları; saat senkronizasyonu (NTP).
25) Belgeleme, KBA ve Öğrenen Organizasyon
-
KBA (Knowledge Base): “Belirti → Olası neden → Adım adım teşhis → Çözüm → Önleme” formatı.
-
Sürüm notları: Her fix sonrası “neden & nasıl” kısmı.
-
Eğitim: Çeyreklik sorun çözme atölyeleri; yeni ekip için “Troubleshooting 101”.
Sonuç: Drupal’da Sorun Çözme Bir Beceriden Fazlası, Bir Süreç Kültürü
Veriye dayalı, tekrar edilebilir bir sorun çözme kültürü kurduğunuzda, Drupal siteniz yalnızca “hataları gideren” değil, hataların kök nedenlerini yok eden bir organizmaya dönüşür. Bu yazıda; gözlemlenebilirlik (log/metrik/iz), cache ve render anatomisi, route/permission incelemeleri, konfig/ortam eşitlemesi, cron/queue disiplinleri, veritabanı ve arama optimizasyonları, composer & dağıtım hijyeni, frontend CWV etkileri ve olay yönetimi/RCA adımlarını; pratik Drush komutları ve vaka örnekleriyle bir araya getirdik.
Önerimiz, hemen uygulayabileceğiniz bir mikro-yol haritası:
-
Log/metrik/iz panolarını tamamlayın ve “kritik eşikleri” tanımlayın,
-
Cache/route/render için bir teşhis şablonu oluşturun,
-
Config & ortam drift’ini sıfırlayın;
cim/cex
disiplini, -
Cron/queue akışlarını ölçün; zehirli mesaj/kilitlenme gözlemleyin,
-
E2E + görsel regresyon kapılarını CI’da zorunlu yapın,
-
Olaylar için 5-dakika runbook’u ve RCA/CAPA ritmini kurun.
Böylelikle “tekrar eden problemler” yerini ölçülebilir iyileşmelere, “panikle koşuşturma” ise sakin, kanıta dayalı bir operasyon düzenine bırakır. Drupal, doğru süreçle yalnızca güçlü değil, öngörülebilir ve dayanıklıdır.