WordPress Siteleri İçin VPS Optimizasyonu Neden Bu Kadar Önemli?
WordPress sitenizi Paylaşımlı Hostingden VPS’e taşıdıktan sonra “Neden hâlâ yavaş?” sorusunu soruyorsanız, sorun çoğu zaman sunucunun kendisinde değil, MySQL, PHP ve önbellek katmanlarının doğru ayarlanmamış olmasında. Varsayılan ayarlarla kurulan bir VPS, genelde WordPress için optimize edilmemiş olur; bu da yüksek CPU kullanımı, RAM taşmaları, yavaş sorgular ve zaman zaman 502/504 hataları olarak geri döner.
Ben hem kendi projelerimde hem de müşterilerde gördüğüm en büyük problemi şöyle özetliyorum: Güçlü VPS alınmış, ama MySQL hâlâ masaüstü kullanımına göre ayarlanmış; PHP-FPM varsayılan değerlerde; önbellek yok ya da yanlış yapılandırılmış. Sonuç: Kaynaklar boşa harcanıyor ve kullanıcı deneyimi zayıf kalıyor.
Bu yazıda tamamen WordPress siteleri için VPS optimizasyonuna odaklanacağım. MySQL tarafında hangi ayarların kritik olduğunu, PHP-FPM’i nasıl ölçeklemeniz gerektiğini ve sayfa/nesne önbelleğini nasıl kurgulamanız gerektiğini adım adım anlatacağım. Daha önce WordPress için uygun hosting seçimi ve hız optimizasyonu üzerine yazdığım içeriklere ek olarak, bu yazı daha çok sunucu ve servis seviyesinde tuning rehberi olacak. Eğer WordPress tarafındaki uygulama optimizasyonlarına da bakmak isterseniz, WordPress hızlandırma rehberi yazısına da göz atmanızı öneririm.
Temel Altyapı: VPS, Web Sunucusu ve PHP İlişkisi
VPS optimizasyonuna girmeden önce, yığının (stack) nasıl çalıştığını netleştirelim: İstemci isteği gelir, web sunucusu (Nginx, Apache veya LiteSpeed) isteği alır, dinamik bir sayfa ise PHP-FPM’e gönderir, PHP kodu MySQL veritabanına sorgu atar, sonuç tekrar PHP’den web sunucusuna döner, en sonda kullanıcıya iletilir. Bu akışın her katmanında gecikme olursa, toplam yanıt süreniz katlanarak artar.
VPS Kaynak Planlaması: CPU, RAM ve Disk
Önce çıplak gerçek: Kötü yapılandırılmış güçlü bir VPS, iyi optimize edilmiş orta seviye bir VPS’ten daha yavaş olabilir. Yine de optimizasyona başlamadan önce kaynaklarınızın minimum düzeyde yeterli olduğundan emin olun.
- CPU: Basit bloglar için 2 vCPU genelde yeterli. Woocommerce, yoğun sorgulu eklentiler veya çoklu site (multisite) kurulumlarında 4+ vCPU’ya çıkmak mantıklı.
- RAM: 2 GB RAM altına WordPress + MySQL + PHP-FPM + Redis sığar ama limitte yaşarsınız. Gerçekçi alt sınır 4 GB; WooCommerce ve yoğun trafik için 8 GB ve üzeri konfor sağlar.
- Disk: SSD veya NVMe kullanmak neredeyse şart. Rastgele okuma/yazma performansı MySQL ve PHP için direkt hız kazancı demektir.
VPS seçerken DCHost gibi, kaynak ayrımı ve I/O performansını şeffaf şekilde anlatan sağlayıcılarla çalışmak genelde daha sağlıklı oluyor. Özellikle disk IOPS ve saniyedeki okuma/yazma değerlerini önemseyin.
Web Sunucusu Seçiminin Etkisi
WordPress performansında web sunucusunun etkisi sanılandan fazla. Apache, Nginx ve LiteSpeed arasında ciddi mimari farklar var. Özellikle yüksek eşzamanlı bağlantı altında Nginx ve LiteSpeed’in kaynak kullanım verimliliği öne çıkıyor. Bu konuda detaylı teknik karşılaştırmayı LiteSpeed, Nginx ve Apache karşılaştırması yazımda anlatmıştım.
Bu rehberde sunucu bağımsız anlatacağım ama şunu unutmayın: Sunucu tarafı önbellek (örneğin LiteSpeed Cache veya Nginx FastCGI cache) ile PHP’ye giden istek sayısını dramatik şekilde azaltabilirsiniz. Bu da hem MySQL hem PHP yükünü hafifletir.
MySQL Optimizasyonu: WordPress Veritabanını Rahatlatmak
WordPress sitelerinde en büyük darboğazlardan biri MySQL. Özellikle ziyaretçi trafiği arttığında ve eklentiler çoğaldığında, veritabanı sorguları ciddi yük oluşturuyor. Varsayılan MySQL konfigürasyonu genelde “her şeyden biraz” mantığıyla gelir; WordPress gibi spesifik bir senaryo için optimize edilmemiştir.
Doğru Versiyon ve Depolama Motoru
- MySQL / MariaDB versiyonu: Mümkün olduğunca güncel, ama kararlı bir sürüm kullanın. Eski sürümlerde performans iyileştirmelerinden ve güvenlik yamalarından mahrum kalırsınız.
- Depolama motoru: Tablo motorlarının InnoDB olduğundan emin olun. MyISAM hâlâ eski bazı kurulumlarda karşınıza çıkabiliyor; kilitlenme ve veri tutarlılığı açısından WordPress için önerilmez.
Mevcut tabloları kontrol etmek için:
SHOW TABLE STATUS FROM veritabani_adi;
Motoru MyISAM olan tablo görürseniz:
ALTER TABLE tablo_adi ENGINE=InnoDB;
Temel MySQL Ayarları: Nereden Başlamalı?
MySQL ayarları genelde my.cnf veya mysqld.cnf dosyasında olur. WordPress odaklı bir VPS için ilk bakmanız gereken kritik parametreler:
- innodb_buffer_pool_size: InnoDB tablolarının bellekte tutulduğu alan. Veritabanınız 2-3 GB ve üzeriyse, bu değeri RAM’in %40-60’ı civarına çekmek mantıklı. Örneğin 8 GB RAM’li bir VPS’te, 3-4 GB buffer pool genelde iyi çalışır.
- innodb_log_file_size: Çok küçük bırakılırsa yoğun yazma işlemlerinde performans düşer. Orta ölçek siteler için 256M–512M arası değerler pratikte iyi sonuç veriyor.
- max_connections: Aşırı yüksek tutulursa RAM tüketimi patlar, çok düşük tutulursa “Too many connections” hataları alırsınız. 100–200 arası genelde yeterli; ama PHP-FPM süreç sayısı ile uyumlu olmalı.
- query_cache: Modern MySQL/MariaDB kurulumlarında genelde kapalı bırakın. WordPress gibi sürekli yazma yapan sistemlerde query cache çoğu zaman zarar veriyor.
- slow_query_log ve long_query_time: Yavaş sorguları tespit etmek için slow query log’u açın ve
long_query_time’ı 1–2 saniye gibi bir değere çekin. Böylece optimize edilmesi gereken sorguları görebilirsiniz.
Başlangıç için örnek bir parça:
[mysqld]
innodb_buffer_pool_size = 3G
innodb_log_file_size = 512M
max_connections = 150
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 1
Tabii bu değerleri VPS’inizin RAM miktarına ve site trafiğine göre uyarlamanız gerekiyor. Özellikle innodb_buffer_pool_size’ı rastgele yükseltmeyin; sistemin diğer servislerine de RAM bırakmanız gerektiğini unutmayın.
WordPress Tarafında Veritabanı Temizliği
Sunucu tarafında MySQL’i optimize etmek tek başına yetmez. WordPress varsayılan olarak revizyonlar, otomatik taslaklar, kullanılmayan transient’ler gibi çok sayıda gereksiz kayıt üretir. Zamanla tablo boyutları şişer, indeksler büyür ve sorgular yavaşlar.
- Eski revizyonları periyodik olarak temizleyin.
- Çöp kutusu ve spam yorumları otomatik temizleme periyodunu kısaltın.
- Gereksiz eklentileri ve onlara ait tabloları kaldırın.
Bu temizlikler sayesinde MySQL tarafında ayarladığınız buffer’lar çok daha verimli kullanılacaktır. Özellikle e-ticaret sitelerinde veritabanı optimizasyonu, performans ve ölçeklenebilirlik açısından kritik hale geliyor.
PHP ve PHP-FPM Optimizasyonu
PHP tarafında iki ana konuya odaklanmanız gerekiyor: doğru PHP versiyonu ve PHP-FPM süreç (process) ayarları. Yanlış PHP-FPM konfigürasyonu, CPU’nuz boşta dururken ziyaretçilere “503 Service Unavailable” göstermenize bile sebep olabilir.
PHP Versiyonu ve Uzantılar
- PHP versiyonu: Desteklediğiniz en güncel, ama tema/eklenti uyum sorunları çıkarmayan bir PHP sürümü seçin. Yeni sürümler hem daha hızlı hem de daha güvenli.
- Gereksiz uzantıları kapatın: Kullanmadığınız PHP eklentilerini (extension) aktif tutmanın anlamı yok; bellek ve yük bindirir.
- memory_limit: Çok düşük tutarsanız “Allowed memory size exhausted” hataları alırsınız; çok yüksek tutarsanız tek bir süreç sistem RAM’ini sömürebilir. Orta ölçek WordPress siteleri için 256M çoğu zaman makul.
PHP-FPM Süreç Ayarları
PHP-FPM, gelen istekleri karşılayan PHP süreçlerini yönetir. En kritik parametreler pm, pm.max_children, pm.max_requests ve pm.max_spare_servers gibi değerlerdir. Genel yaklaşım şöyle:
- pm: Küçük sitelerde
ondemand, yoğun trafikli sitelerdedynamicmod genelde daha iyi çalışır. - pm.max_children: Aynı anda çalışabilecek PHP süreç sayısı. Bunu hesaplarken her sürecin ortalama bellek kullanımını dikkate alın. Örneğin süreç başına 60–80 MB kullanıyorsanız ve PHP için ayırabileceğiniz RAM 2 GB ise, 20–25 süreç üst sınırınız olabilir.
- pm.max_requests: Her süreç belli sayıda isteği karşıladıktan sonra yeniden başlatılsın. Böylece bellek sızıntılarını sınırlarsınız. 300–500 arası değerler pratikte iyi çalışıyor.
Örnek bir konfigürasyon (siteye göre uyarlayın):
[www]
pm = dynamic
pm.max_children = 20
pm.start_servers = 4
pm.min_spare_servers = 4
pm.max_spare_servers = 8
pm.max_requests = 400
Bu değerleri belirlerken, mutlaka top, htop veya benzeri araçlarla RAM ve CPU kullanımını takip edin. Özellikle bir süre gerçek trafik altında gözlem yapmak önemli.
OPcache ile PHP’yi Hızlandırmak
OPcache, PHP kodunun derlenmiş halini bellekte tutarak her istekte yeniden derleme ihtiyacını azaltır. WordPress için neredeyse zorunlu diyebilirim.
- opcache.enable ve opcache.enable_cli değerlerini aktif hale getirin.
- opcache.memory_consumption: Küçük siteler için 64M–128M, daha büyük kurulumlar için 256M ve üzeri kullanılabilir.
- opcache.max_accelerated_files: Dosya sayınızla orantılı olarak 10000–50000 arası bir değer belirleyin.
OPcache aktif ve doğru ayarlı olduğunda, aynı VPS üzerinde daha fazla trafiği daha düşük CPU ile karşılayabilirsiniz. Bu da özellikle maliyet duyarlı projelerde oldukça işe yarıyor.
Önbellek Katmanı: Sayfa, Nesne ve Tarayıcı Önbelleği
WordPress performansının en kritik katmanlarından biri önbellek. Doğru kurgulandığında, sayfalarınızın büyük bir kısmı hiç PHP çalışmadan, hatta çoğu zaman veritabanına dokunmadan sunulabilir.
Sayfa Önbelleği: İlk Savunma Hattı
Sayfa önbelleği, dinamik olarak üretilmiş HTML çıktısını disk veya RAM’de saklayıp sonraki ziyaretçilere direkt bu kopyayı sunar. Bunu üç farklı seviyede yapabilirsiniz:
- WordPress eklentisi ile: Çoğu site için en pratik yöntem. Doğru ayarlanmış bir sayfa önbellek eklentisi, VPS üzerindeki yükü ciddi şekilde azaltır.
- Sunucu tarafı önbellek: LiteSpeed Cache, Nginx FastCGI cache gibi çözümlerle, istek daha PHP’ye ulaşmadan cache’den yanıtlanır. Özellikle yüksek trafikli sitelerde farkı çok net hissedersiniz.
- CDN önbelleği: CDN tarafında HTML önbelleği (full page cache) kullanarak, statikleşebilen sayfaları uç noktalara dağıtabilirsiniz.
Önemli nokta, dinamik sayfalar (sepet, ödeme, kullanıcı hesabı vb.) için cache kurallarını doğru yazmak. E-ticaret sitelerinde yanlış yapılandırılmış sayfa önbelleği, kullanıcıların birbirinin sepetini görmesi gibi ciddi problemlere yol açabilir.
Nesne Önbelleği: Redis veya Memcached
WordPress çekirdeği ve birçok eklenti, nesne önbelleği ile ciddi performans kazancı sağlayabiliyor. Burada genelde iki seçenek var: Redis ve Memcached.
- Redis: Kalıcılık (persistency) desteği, gelişmiş veri türleri ve yaygın destek nedeniyle WordPress ekosisteminde biraz daha öne çıkıyor.
- Memcached: Çok hafif ve hızlı; basit key-value cache senaryolarında hâlâ oldukça başarılı.
Ben çoğu yeni projede Redis’i tercih ediyorum, ama asıl kritik nokta şu: Nesne önbelleğini uygulama katmanında da etkinleştirmek. Yani sadece Redis hizmetini kurmak yetmez; WordPress’te WP_Object_Cache ile entegrasyon sağlayacak eklentiyi veya yapılandırmayı da yapmak gerekir.
CDN, HTTP/2 ve HTTP/3 ile Entegre Çalışmak
Önbellek sadece sunucu içinde kalmak zorunda değil. CDN kullanarak, statik dosyalarınızı (CSS, JS, görseller) dünyanın farklı noktalarındaki edge sunuculara dağıtabilirsiniz. Bu sayede hem VPS’inizden daha az trafik geçer hem de ziyaretçilere daha yakın bir noktadan yanıt verilir. CDN kavramını ve performansa etkisini detaylı anlattığım CDN rehberine göz atabilirsiniz.
Ayrıca web sunucunuzda HTTP/2 ve HTTP/3 (QUIC) desteğini aktif etmek, özellikle çok sayıda küçük dosya isteği yapan WordPress temalarında hissedilir hız kazancı getiriyor. HTTP/2/3’ün nasıl çalıştığını ve hosting sunucularında nasıl aktif edileceğini HTTP/2 ve HTTP/3 rehberinde adım adım anlatmıştım.
Örnek Senaryolar ve İzleme Önerileri
Teoride her şey güzel görünüyor ama pratikte nereden başlayacağınızı bilemeyebilirsiniz. Aşağıda üç tipik WordPress VPS senaryosu üzerinden özet bir yol haritası paylaşayım.
Küçük Blog (Günlük 1–2K Tekil Ziyaret)
- VPS: 2 vCPU, 4 GB RAM, SSD disk.
- MySQL: 1–1.5 GB buffer pool, 100 max_connections, slow query log açık.
- PHP-FPM: ondemand mod, 10–15 max_children.
- Önbellek: Eklenti bazlı sayfa önbelleği + tarayıcı önbelleği.
- Opsiyonel: Nesne önbelleği (Redis) – özellikle çok eklentili sitelerde fark yaratır.
Kurumsal Site veya Orta Trafikli Blog (Günlük 5–20K Tekil)
- VPS: 4 vCPU, 8 GB RAM, güçlü SSD/NVMe.
- MySQL: 3–4 GB buffer pool, 150–200 max_connections, indeks optimizasyonu.
- PHP-FPM: dynamic mod, 20–30 max_children, OPcache iyi ayarlı.
- Önbellek: Sunucu tarafı sayfa cache (mümkünse) + CDN ile statik dosya dağıtımı.
- Nesne önbelleği: Redis şiddetle tavsiye edilir.
WooCommerce / Yoğun Trafikli Site
- VPS veya daha büyük bir mimari (örneğin veritabanını ayrı sunucuya ayırma) düşünün. Bu noktada DCHost gibi ölçeklenebilir VPS ve sunucu seçenekleri sunan sağlayıcılarla çalışmak işinizi kolaylaştırır.
- MySQL: Ayrı bir VPS’te, RAM’in büyük kısmı buffer pool’a ayrılmış şekilde çalışması ideal.
- PHP-FPM: Dinamik mod, iyi ayarlanmış max_children ve max_requests değerleri.
- Önbellek: Çok katmanlı cache (sayfa + nesne + CDN), sepet/ödemede özel kurallar.
- İzleme: MySQL slow query log, PHP error log, web sunucusu erişim log’ları düzenli analiz edilmeli.
İzleme, Güncelleme ve Bakım
Yapılandırmayı bir kez yapıp bırakmak, uzun vadede mutlaka problem çıkarır. VPS tarafında düzenli izleme ve bakım, en az ilk kurulum kadar önemli. Bu konuda daha genel bir perspektif için VPS sunucu yönetimi rehberi yazısına mutlaka göz atın.
- Kaynak takibi: CPU, RAM, disk I/O, network – düzenli olarak kontrol edin.
- Güncellemeler: PHP, MySQL/MariaDB ve WordPress çekirdeğini güncel tutun; büyük versiyon atlamalarında mutlaka staging ortamda test yapın.
- Log analizi: Yavaş sorgular, PHP hataları ve 4xx/5xx HTTP hata kodlarını düzenli inceleyin.
Sonuç: WordPress İçin VPS Optimizasyonunda Yol Haritası
WordPress sitenizi VPS’e taşıdığınızda iş aslında yeni başlıyor. MySQL, PHP-FPM ve önbellek katmanını bilinçli şekilde ayarlamadığınız sürece, kira ödediğiniz kaynağın önemli bir kısmı boşa gidiyor. Bu yazıda anlattığım ayarlar; buffer pool boyutundan PHP-FPM süreç sayısına, Redis kurulumu ve sayfa cache stratejilerine kadar tamamen pratikte karşılığı olan optimizasyon noktaları.
Ben kendi projelerimde genelde şu sırayı izliyorum: Önce temel VPS kaynak planlaması, sonra MySQL’in bellek ve bağlantı ayarları, ardından PHP-FPM süreç tuning’i ve en sonda çok katmanlı önbellek kurgusu. Bu aşamalardan sonra hâlâ yavaşlık varsa, odağı uygulama katmanına (tema, eklenti, sorgu optimizasyonu) çeviriyorum. Uygulama seviyesindeki optimizasyonlar için de WordPress odaklı diğer yazılarım, özellikle WordPress için en uygun hosting seçenekleri ve hızlandırma rehberleri iyi bir tamamlayıcı olacaktır.
Eğer sunucu yönetimiyle detaylı uğraşmak istemiyor ama yine de VPS esnekliğinden faydalanmak istiyorsanız, yönetilen VPS hizmeti sunan DCHost gibi sağlayıcılar üzerinden ilerlemek de mantıklı bir alternatif. Hangi yolu seçerseniz seçin, bu rehberi kendi sitenize uyarlayarak, birkaç adımda çok daha hızlı, stabil ve ölçeklenebilir bir WordPress altyapısı kurabilirsiniz.