Nginx, PHP 8.3 ve MariaDB 11 çalıştıran VPS için önerdiğimiz JekCMS üretim yapılandırması; worker_processes, fastcgi_cache, opcache ayarları ve innodb_buffer_pool_size için belirli değerler içerir. Bu ayarlar aylık 50.000 ile 500.000 sayfa görüntüleme işleyen üretim sunucularında doğrulanmıştır.
2 vCPU'lu VPS için Nginx yapılandırması: worker_processes auto (CPU çekirdek sayısıyla eşleşir), worker_connections 1024, keepalive_timeout 65, client_max_body_size 50m (medya yüklemeleri için). PHP-FPM havuzu: pm = dynamic, pm.max_children = 20, pm.start_servers = 5, pm.min_spare_servers = 5, pm.max_spare_servers = 10. Bu değerler 4 GB RAM'li VPS varsayımıyla verilmiş; farklı RAM boyutları için pm.max_children'ı orantılı olarak ayarlayın.
fastcgi_cache: PHP'siz Trafik Emilimi
Web sunucusu katmanında tam sayfa önbellekleme için Nginx'te fastcgi_cache'i etkinleştirin. nginx.conf'ta 1 GB'lık önbellek bölgesi yapılandırın: fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=jekcms:10m max_size=1g.
200 döndüren GET istekleri için 10 dakikalık TTL ayarlayın. Oturum çerezi için bir fastcgi_cache_bypass direktifiyle giriş yapmış kullanıcılar için önbelleği atlayın. Bu katman PHP'yi hiç çalıştırmadan trafik zirvelerini emiyor; yüksek trafikli anlarda en büyük farkı bu yaratıyor.
Üretim için OPcache
php.ini'deki OPcache ayarları: opcache.memory_consumption=256, opcache.max_accelerated_files=20000, üretimde opcache.validate_timestamps=0 (dosya değişikliklerini almak için geliştirme ortamında 1 olarak ayarlayın). validate_timestamps=0 ayarı her istekte stat() çağrılarını ortadan kaldırıyor. NVMe depolamada bu marjinal bir iyileşme; ağa bağlı veya döner diskli depolamada istek gecikmesini istek başına 5–15 ms azaltabilir. Bu tek ayar yoğun trafikli sitelerde hissedilir fark yaratıyor.
MariaDB: Tampon Havuzu ve Yavaş Sorgu Günlüğü
MariaDB: innodb_buffer_pool_size'ı mevcut RAM'in %70'ine, en yakın 512 MB'a yuvarlayarak ayarlayın. 4 GB'lık sunucuda 2560M kullanın. Yavaş sorgu günlüğünü ilk günden etkinleştirin: slow_query_log=1, long_query_time=1, log_queries_not_using_indexes=1. Yavaş sorguları, zaten bir üretim olayının ortasındayken değil, iki haftalık geçmiş veriniz olduğunda teşhis etmek çok daha kolay. Bu günlükler sorun olmadan önce bottleneck'leri tanımlamaya yardımcı olur.
SSL ve Guvenlik Basliklari
Let's Encrypt kullanarak Certbot ile SSL yapilandirin. Nginx SSL yapilandirmasi TLSv1.2 ve TLSv1.3 protokollerini, guclu sifrelemeleri ve guvenlik basliklarini icermelidir. X-Frame-Options, X-Content-Type-Options, Referrer-Policy ve Strict-Transport-Security basliklarini ekleyin.
SSL yapilandirmanizi ssllabs.com/ssltest adresinde test edin ve A+ derecelendirmesi hedefleyin. 2 yillik max-age ile HSTS basligi tarayicilara her zaman HTTPS kullanmalarini soyler.
PHP Guvenlik Ayarlari
Bu php.ini direktifleriyle PHP'yi uretimde sertlestirin:
expose_php = OffileX-Powered-Bybasligini kaldirindisplay_errors = Offile hata mesajlarinin ziyaretcilere sizmasini onleyinlog_errors = Onile hatalarin gunluk dosyasina gitmesini saglayinsession.cookie_httponly = 1ile JavaScript'in oturum cerezlerini okumasini onleyinsession.cookie_secure = 1ile oturum cerezlerini yalnizca HTTPS uzerinden gonderinupload_max_filesize = 50Mile Nginxclient_max_body_sizeile eslestirin
Izleme ve Otomatik Yeniden Baslatma
Systemd, Ubuntu/Debian'da Nginx ve PHP-FPM icin otomatik jekcms.alfadizayn.com/tr/blog/jekcms-v1-4-0-cok-dilli-motor-bastan-yeniden-yazildi" class="auto-link" target="_blank" rel="noopener">yeniden baslatmayi yonetir. Uygulama duzeyinde izleme icin JekCMS'in /api/health adresinde saglanan saglik kontrolu uc noktasini yapilandirin. Bu uc nokta veritabani baglantisini, dosya sistemi yazilabilirligini ve onbellek katmani durumunu kontrol eder. Harici bir izleme servisi ile bu uc noktaya her 60 saniyede bir istek atin.
Log Rotasyonu
Disk alani tukenmesini onlemek icin tum gunluk dosyalari icin logrotate yapilandirin:
- Nginx erisim ve hata gunlukleri: gunluk dondur, 14 gun tut
- PHP-FPM yavas gunluk ve hata gunlugu: haftalik dondur, 4 hafta tut
- MariaDB yavas sorgu gunlugu: haftalik dondur, 8 hafta tut
- JekCMS uygulama gunlukleri: gunluk dondur, 30 gun tut
Aylik 500.000 Sayfa Goruntulenin Otesine Olcekleme
Trafik tek bir VPS'te aylik 500.000 sayfa goruntulenmeyi astiginda, donanim yukseltmeden once su optimizasyonlari degerlendirin:
- fastcgi_cache TTL'sini artirin: seyrek degisen sayfalar icin 10 dakikadan 1 saate cikarin. Bu tek basina 3-5x trafik artisini emebilir.
- CDN katmani ekleyin: Cloudflare (ucretsiz katman yeterli) veya Bunny.net (TB basina aylik 1$). Statik varliklari uc noktada onbellege alin.
- MariaDB'yi ayri sunucuya tasiyin: darboaz veritabaniysa. Ayirmak her servisin tam tampon havuzunu kullanmasini saglar.
- PHP on yuklemeyi etkinlestirin:
opcache.preloadile tum JekCMS cekirdek dosyalarini PHP-FPM baslangicinda derleyin.
Yedekleme Stratejisi
Uretim VPS dagitimlarinda 3-2-1 yedekleme stratejisi uygulayın: verilerin uc kopyasi, iki farkli depolama turunde, bir kopyasi site disinda. JekCMS icin:
- Veritabani: her gun saat 03:00'te otomatik
mysqldump, gzip ile sikistirilmis, yerel olarak saklanir ve S3 uyumlu bir kovaya senkronize edilir. Saklama: 30 gunluk yedek, 12 aylik yedek. - Yuklemeler dizini: her gece site disi depolamaya
rsync. Yalnizca yeni ve degismis dosyalar aktarilir, bant genisligi kullanimini minimum tutar. - Tam sunucu goruntusu: barindirma saglaiciinizin API'si araciligiyla haftalik VPS goruntusu. Bu, Nginx, PHP ve MariaDB yapilandirmalari dahil tum sistem durumunu yakalir.
Geri yukleme surecini uc ayda bir test edin. Hic geri yuklemediginiz bir yedek, guvenemeyeceginiz bir yedektir. Geri yukleme prosedurunu belgeleyin, boylece herhangi bir ekip uyesi olay sirasinda yurutebilir.
Guvenlik Duvarı ve Fail2Ban Yapilandirmasi
VPS uzerinde JekCMS calistirirken isletim sistemi duzeyinde guvenlik onlemleri almak sart. UFW ya da iptables ile yalnizca 22 (SSH), 80 (HTTP) ve 443 (HTTPS) portlarini acan bir guvenlik duvari kurun. SSH erisimini anahtar tabanli kimlik dogrulamayla sinirlayin ve sifre girisini devre disi birakin.
Fail2Ban kurarak basarisiz SSH ve Nginx giris denemelerini otomatik engelleyin; varsayilan olarak 5 basarisiz denemeden sonra IP adresini 10 dakika boyunca yasaklayan bir kural tanimlayin. MariaDB portunu (3306) dis erisime kapattiginizdan emin olun; veritabani baglantilari yalnizca localhost uzerinden yapilmali. Bu temel onlemler, VPS'inizin gaye haline gelmesini buyuk olcude zorlastirir ve JekCMS kurulumunuzu dis saldirilara karsi guclendirir.
Performans Izleme ve Darbogazlari Teshis Etme
Yapilandirmanizi tamamladiktan sonra performansi duzenli olarak izlemek kritiktir. JekCMS'in /api/health uc noktasinin yaninda, sunucu tarafinda htop, iostat ve vmstat araclariyla CPU, bellek ve disk I/O kullanimini takip edin.
PHP-FPM yavas gunlugunu aktif tutarak hangi isteklerin belirlenen suresi astigini goruntuleyin. MariaDB yavas sorgu gunlugu ile veritabani tarafindaki darbogazlari tanimlayarak eksik indeks veya verimsiz sorgu yapilarini tespit edin. Bu verileri haftalik olarak gozden gecirerek sorunlari buyumeden once cozebilirsiniz.