OpenLiteSpeed ile WordPress Multisite Yapılandırması

WordPress Multisite, birden fazla siteyi tek bir WordPress kurulumundan yönetmenin en verimli yollarından biri. Ama bu yapıyı OpenLiteSpeed ile birleştirdiğinde, hem performans hem de yönetim kolaylığı açısından ciddi bir güç elde ediyorsun. Ben bu ikilinin üretim ortamlarında nasıl çalıştığını defalarca gördüm ve doğru yapılandırıldığında gerçekten etkileyici sonuçlar veriyor. Bu yazıda sıfırdan başlayarak OpenLiteSpeed üzerinde WordPress Multisite kurulumunu adım adım ele alacağız.

Neden OpenLiteSpeed ve WordPress Multisite?

Apache veya Nginx kullananlar için OpenLiteSpeed ilk başta yabancı gelebilir. Ama özellikle WordPress için tasarlanmış LiteSpeed Cache eklentisiyle birlikte kullandığında, sayfa yükleme sürelerinde dramatik iyileşmeler görüyorsun. WordPress Multisite tarafında ise 50-100 siteyi tek bir kontrol panelinden yönetmek, güncellemeleri toplu uygulamak ve kaynakları paylaştırmak büyük avantaj sağlıyor.

Gerçek dünya senaryosuna bakalım: Bir dijital ajans, müşterileri için onlarca WordPress sitesi yönetiyor. Her biri için ayrı sunucu veya ayrı WordPress kurulumu yerine, tek bir Multisite ağı üzerinden tüm siteleri idare ediyor. Bu senaryoda OpenLiteSpeed’in sunduğu önbellekleme mekanizması, her site için ayrı ayrı yapılandırma yapılmasına gerek kalmadan merkezi bir performans katmanı sunuyor.

Ön Gereksinimler ve Sistem Hazırlığı

Kuruluma geçmeden önce sistemin hazır olduğundan emin olmamız lazım. Ubuntu 22.04 LTS üzerinde çalışacağız ama CentOS/AlmaLinux için komutlar benzer, sadece paket yöneticisi farklı.

# Sistemi güncelleyelim
sudo apt update && sudo apt upgrade -y

# Gerekli temel paketleri kuralım
sudo apt install -y wget curl unzip git

# Swap alanı kontrolü (özellikle küçük sunucular için)
free -h
swapon --show

# Eğer swap yoksa ekleyelim
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Sunucunun en az 2 GB RAM’e sahip olmasını tavsiye ederim. WordPress Multisite, tek site kurulumuna göre daha fazla kaynak tüketiyor ve buna PHP-FPM süreçlerini de eklediğinde bellek yönetimi kritik hale geliyor.

OpenLiteSpeed Kurulumu

OpenLiteSpeed’i resmi depolardan kurmak en güvenli yol. Kaynak koddan derleme seçeneği de var ama üretim ortamı için depo üzerinden kurmak güncelleme yönetimini çok kolaylaştırıyor.

# OpenLiteSpeed deposunu ekleyelim
wget -O - https://repo.litespeed.sh | sudo bash

# OpenLiteSpeed'i kuralım
sudo apt install openlitespeed -y

# PHP 8.2 ve gerekli uzantıları kuralım
sudo apt install lsphp82 lsphp82-common lsphp82-mysql lsphp82-curl 
  lsphp82-json lsphp82-imagick lsphp82-intl lsphp82-opcache 
  lsphp82-redis lsphp82-zip lsphp82-xml lsphp82-mbstring -y

# OpenLiteSpeed servisini başlatalım
sudo systemctl start lsws
sudo systemctl enable lsws

# Durumu kontrol edelim
sudo systemctl status lsws

Kurulum tamamlandıktan sonra admin paneline erişmek için varsayılan port 7080. İlk girişte şifreyi değiştirmen zorunlu, bunu kesinlikle atlamayın.

# Admin şifresini değiştirelim
sudo /usr/local/lsws/admin/misc/admpass.sh

MariaDB ve Veritabanı Yapılandırması

WordPress Multisite için veritabanı yapılandırması önemli. Her alt site kendi tablo önekiyle aynı veritabanında çalışıyor, bu yüzden veritabanı performansı kritik.

# MariaDB kurulumu
sudo apt install mariadb-server mariadb-client -y
sudo systemctl start mariadb
sudo systemctl enable mariadb

# Güvenlik yapılandırması
sudo mysql_secure_installation

# WordPress için veritabanı ve kullanıcı oluşturalım
sudo mysql -u root -p << 'EOF'
CREATE DATABASE wordpress_multisite CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wp_multisite_user'@'localhost' IDENTIFIED BY 'GucluBirSifre123!';
GRANT ALL PRIVILEGES ON wordpress_multisite.* TO 'wp_multisite_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
EOF

MariaDB’nin innodb_buffer_pool_size ayarını toplam RAM’in %70’i olarak ayarlamak, özellikle çok sayıda alt site içeren Multisite kurulumlarında performansı belirgin şekilde artırıyor.

# MariaDB optimizasyonu
sudo nano /etc/mysql/mariadb.conf.d/99-wordpress-multisite.cnf

Dosyaya şu içeriği ekleyelim:

[mysqld]
innodb_buffer_pool_size = 512M
innodb_log_file_size = 128M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
max_connections = 150
query_cache_type = 1
query_cache_size = 64M
tmp_table_size = 32M
max_heap_table_size = 32M

WordPress İndirme ve Kurulumu

# Web kök dizini oluşturalım
sudo mkdir -p /var/www/multisite.ornek.com/html
sudo chown -R nobody:nogroup /var/www/multisite.ornek.com/html

# WordPress'i indirelim
cd /tmp
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
sudo mv wordpress/* /var/www/multisite.ornek.com/html/

# Doğru izinleri ayarlayalım
sudo chown -R nobody:nogroup /var/www/multisite.ornek.com/html
sudo find /var/www/multisite.ornek.com/html -type d -exec chmod 755 {} ;
sudo find /var/www/multisite.ornek.com/html -type f -exec chmod 644 {} ;

# wp-config.php oluşturalım
cd /var/www/multisite.ornek.com/html
sudo cp wp-config-sample.php wp-config.php
sudo nano wp-config.php

wp-config.php içinde şu değerleri düzenleyelim:

define( 'DB_NAME', 'wordpress_multisite' );
define( 'DB_USER', 'wp_multisite_user' );
define( 'DB_PASSWORD', 'GucluBirSifre123!' );
define( 'DB_HOST', 'localhost' );
define( 'DB_CHARSET', 'utf8mb4' );

# Multisite için gerekli satırlar
define( 'WP_ALLOW_MULTISITE', true );

# Performans için ek ayarlar
define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );
define( 'DISABLE_WP_CRON', true );

OpenLiteSpeed Virtual Host Yapılandırması

Bu kısım işin en kritik bölümü. OpenLiteSpeed’in web arayüzünden yapılandırma yapabiliriz ama ben doğrudan konfig dosyaları üzerinden çalışmayı tercih ediyorum, çünkü bu yaklaşım daha tekrarlanabilir ve versiyon kontrolüne uygun.

# Virtual host konfigürasyon dizini oluşturalım
sudo mkdir -p /usr/local/lsws/conf/vhosts/multisite

# Virtual host konfigürasyon dosyasını oluşturalım
sudo nano /usr/local/lsws/conf/vhosts/multisite/vhconf.conf

Dosya içeriği:

docRoot                   /var/www/multisite.ornek.com/html/
vhDomain                  multisite.ornek.com
vhAliases                 *.multisite.ornek.com
adminEmails               [email protected]

index  {
  useServer               0
  indexFiles              index.php, index.html
}

scripthandler  {
  add                     lsapi:lsphp82 php
}

extprocessor lsphp82 {
  type                    lsapi
  address                 uds://tmp/lshttpd/lsphp82.sock
  maxConns                10
  env                     PHP_LSAPI_CHILDREN=10
  initTimeout             60
  retryTimeout            0
  persistConn             1
  respBuffer              0
  autoStart               2
  path                    /usr/local/lsws/lsphp82/bin/lsphp
  backlog                 100
  instances               1
  priority                0
  memSoftLimit            2047M
  memHardLimit            2047M
  procSoftLimit           400
  procHardLimit           500
}

rewrite  {
  enable                  1
  autoLoadHtaccess        1
  rules                   <<<END_rules
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index.php$ - [L]
  
  # Multisite için network kurulumu - subdomain modunda
  RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
  
  RewriteCond %{REQUEST_FILENAME} -f [OR]
  RewriteCond %{REQUEST_FILENAME} -d
  RewriteRule ^ - [L]
  
  RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
  RewriteRule ^([_0-9a-zA-Z-]+/)?(.*.php)$ $2 [L]
  RewriteRule . index.php [L]
  END_rules
}

context / {
  location              /var/www/multisite.ornek.com/html/
  allowBrowse           1
  rewrite  {
    enable              1
  }
}

OpenLiteSpeed Ana Konfigürasyona Virtual Host Ekleme

sudo nano /usr/local/lsws/conf/httpd_config.conf

virtualhost bloğunu ekleyelim:

virtualhost multisite {
  vhRoot                  /usr/local/lsws/conf/vhosts/multisite/
  configFile              /usr/local/lsws/conf/vhosts/multisite/vhconf.conf
  allowSymbolLink         1
  enableScript            1
  restrained              0
  setUIDMode              0
}

listener HTTP {
  address                 *:80
  secure                  0
  map                     multisite multisite.ornek.com, *.multisite.ornek.com
}

WordPress Multisite Aktivasyonu

Web tarayıcıdan WordPress kurulumunu tamamladıktan sonra Multisite ağını aktif etmemiz gerekiyor. Bu adımı wp-cli üzerinden yapmak çok daha hızlı ve güvenilir.

# WP-CLI kurulumu
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

# Multisite ağını aktif edelim (subdomain modunda)
cd /var/www/multisite.ornek.com/html
sudo -u nobody wp core multisite-install 
  --url="https://multisite.ornek.com" 
  --title="Multisite Ağım" 
  --admin_user="admin" 
  --admin_password="GucluAdminSifresi!" 
  --admin_email="[email protected]" 
  --subdomains

# Kurulumun başarılı olduğunu doğrulayalım
sudo -u nobody wp site list

Kurulum tamamlandıktan sonra wp-config.php dosyasına eklenmesi gereken satırları WordPress otomatik olarak gösteriyor. Bu satırları mutlaka ekleyelim:

sudo nano /var/www/multisite.ornek.com/html/wp-config.php

Eklenmesi gereken satırlar:

define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', true );
define( 'DOMAIN_CURRENT_SITE', 'multisite.ornek.com' );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );

# Wildcard subdomain için
define( 'COOKIE_DOMAIN', '' );

LiteSpeed Cache Eklentisi Yapılandırması

OpenLiteSpeed’in gerçek gücü burada ortaya çıkıyor. LiteSpeed Cache eklentisi, sunucu seviyesinde önbellekleme yapabildiği için PHP’yi bypass ediyor ve statik dosya hızında içerik sunabiliyor.

# LiteSpeed Cache eklentisini yükleyelim
cd /var/www/multisite.ornek.com/html
sudo -u nobody wp plugin install litespeed-cache --activate --allow-root

# Network genelinde aktif edelim
sudo -u nobody wp plugin activate litespeed-cache --network

# Temel önbellek ayarlarını yapalım
sudo -u nobody wp litespeed-option set cache-browser true --allow-root
sudo -u nobody wp litespeed-option set cache-object true --allow-root
sudo -u nobody wp litespeed-option set object-kind 1 --allow-root

Multisite yapısında her alt sitenin önbelleği bağımsız olarak yönetiliyor. Network yöneticisi olarak global ayarları yapabilirsin, site yöneticileri ise kendi önbellek kurallarını ekleyebilir. Bu hiyerarşik yapı özellikle ajans senaryolarında çok işe yarıyor.

SSL Sertifikası Yapılandırması

Wildcard subdomain için SSL sertifikası almak Multisite’ın en kritik adımlarından biri. Let’s Encrypt ile Certbot kullanacağız.

# Certbot kurulumu
sudo apt install certbot -y

# Wildcard sertifika için DNS doğrulama kullanacağız
# (Örnek olarak Cloudflare DNS eklentisi)
sudo apt install python3-certbot-dns-cloudflare -y

# Cloudflare API bilgilerini girelim
sudo mkdir -p /root/.secrets
sudo nano /root/.secrets/cloudflare.ini

Dosya içeriği:

dns_cloudflare_api_token = CLOUDFLARE_API_TOKEN_BURAYA
sudo chmod 600 /root/.secrets/cloudflare.ini

# Wildcard sertifika alalım
sudo certbot certonly 
  --dns-cloudflare 
  --dns-cloudflare-credentials /root/.secrets/cloudflare.ini 
  -d multisite.ornek.com 
  -d *.multisite.ornek.com 
  --preferred-challenges dns-01

# OpenLiteSpeed SSL listener ekleyelim
sudo nano /usr/local/lsws/conf/httpd_config.conf

SSL listener bloğu:

listener HTTPS {
  address                 *:443
  secure                  1
  keyFile                 /etc/letsencrypt/live/multisite.ornek.com/privkey.pem
  certFile                /etc/letsencrypt/live/multisite.ornek.com/fullchain.pem
  certChain               1
  sslProtocol             24
  ciphers                 ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
  enableECDHE             1
  renegProtection         1
  sslSessionCache         1
  sslSessionTickets       0
  map                     multisite multisite.ornek.com, *.multisite.ornek.com
}

PHP Optimizasyonu

Multisite yapısı için PHP’yi doğru ayarlamak, sorunsuz bir deneyim için şart.

# PHP konfigürasyon dosyasını düzenleyelim
sudo nano /usr/local/lsws/lsphp82/etc/php/8.2/litespeed/php.ini

Kritik ayarlar:

memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
max_input_vars = 5000
opcache.enable = 1
opcache.memory_consumption = 256
opcache.max_accelerated_files = 20000
opcache.revalidate_freq = 60
opcache.validate_timestamps = 1
opcache.save_comments = 1

Wildcard DNS Yapılandırması

Bu adım çok atlanan ama çok önemli bir adım. Subdomain modunda Multisite için DNS tarafında wildcard kaydı olmadan yeni oluşturulan alt siteler erişilemez oluyor.

DNS sağlayıcında şu kayıtları oluşturman gerekiyor:

  • A kaydı: multisite.ornek.com -> Sunucu IP adresi
  • A kaydı: *.multisite.ornek.com -> Sunucu IP adresi

Eğer Cloudflare kullanıyorsan wildcard için proxy özelliğini dikkatli yönet. Bazı durumlarda wildcard subdomain proxy’yi devre dışı bırakmak gerekebilir.

Performans Testi ve İzleme

Kurulum tamamlandıktan sonra performansı test etmek ve izlemek önemli.

# OpenLiteSpeed'i yeniden başlatalım
sudo systemctl restart lsws

# Log dosyalarını izleyelim
sudo tail -f /usr/local/lsws/logs/error.log
sudo tail -f /usr/local/lsws/logs/access.log

# PHP hata logları
sudo tail -f /usr/local/lsws/logs/stderr.log

# Yeni site oluşturup test edelim
cd /var/www/multisite.ornek.com/html
sudo -u nobody wp site create 
  --slug="test-site" 
  --title="Test Sitesi" 
  --email="[email protected]"

# Önbellek durumunu kontrol edelim
sudo -u nobody wp litespeed-purge all

# Aktif siteleri listeleyelim
sudo -u nobody wp site list --fields=blog_id,domain,path,archived,spam,deleted

Yaygın Sorunlar ve Çözümleri

Üretim ortamında sıkça karşılaştığım sorunlardan bahsedelim.

“Too many redirects” hatası: Çoğunlukla HTTPS yönlendirmesi ile OpenLiteSpeed SSL sonlandırması arasındaki çakışmadan kaynaklanıyor. wp-config.php dosyasına şunu ekle:

if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && 'https' === $_SERVER['HTTP_X_FORWARDED_PROTO'] ) {
    $_SERVER['HTTPS'] = 'on';
}

Alt site görselleri yüklenmiyor: Multisite’ta uploads dizini yapısı farklı. wp-content/uploads/sites/ dizin yapısının doğru oluşturulduğunu ve izinlerin nobody:nogroup olduğunu kontrol et.

Yavaş admin paneli: Object caching aktif değilse her istek veritabanına gidiyor. Redis kurarak object cache’i aktif etmek bu sorunu çözüyor.

# Redis kurulumu
sudo apt install redis-server -y
sudo systemctl enable redis-server
sudo systemctl start redis-server

# WP-CLI ile Redis object cache aktif etme
sudo -u nobody wp plugin install redis-cache --activate --network
sudo -u nobody wp redis enable

Otomatik Yedekleme

Multisite yapısında yedekleme stratejisi kritik. Hem dosyaları hem de veritabanını düzenli yedeklemek zorundasın.

# Yedekleme scripti oluşturalım
sudo nano /usr/local/bin/multisite-backup.sh

Script içeriği:

#!/bin/bash
BACKUP_DIR="/backup/multisite"
DATE=$(date +%Y%m%d_%H%M%S)
SITE_DIR="/var/www/multisite.ornek.com/html"

mkdir -p $BACKUP_DIR

# Veritabanı yedeği
mysqldump -u wp_multisite_user -p'GucluBirSifre123!' 
  wordpress_multisite | gzip > $BACKUP_DIR/db_$DATE.sql.gz

# Dosya yedeği (uploads hariç, büyük olabilir)
tar -czf $BACKUP_DIR/files_$DATE.tar.gz 
  --exclude="$SITE_DIR/wp-content/uploads" 
  $SITE_DIR

# 30 günden eski yedekleri sil
find $BACKUP_DIR -type f -mtime +30 -delete

echo "Yedekleme tamamlandı: $DATE"
sudo chmod +x /usr/local/bin/multisite-backup.sh

# Cron job ekleyelim
echo "0 2 * * * root /usr/local/bin/multisite-backup.sh >> /var/log/multisite-backup.log 2>&1" | 
  sudo tee /etc/cron.d/multisite-backup

Güvenlik Sertleştirme

WordPress Multisite, tek site kurulumuna göre daha geniş bir saldırı yüzeyi sunuyor. Birkaç temel güvenlik adımı almak şart.

  • XML-RPC’yi devre dışı bırak: Brute force saldırılarının hedefi olan bu özelliği kullanmıyorsan kapat
  • wp-login.php için rate limiting: OpenLiteSpeed’in built-in DDoS koruma özelliğini aktif et
  • Dosya düzenlemeyi devre dışı bırak: define('DISALLOW_FILE_EDIT', true) satırını wp-config.php’ye ekle
  • Kullanılmayan temaları sil: Her alt sitede aktif olmayan temalar güvenlik açığı oluşturabilir
  • Yönetici kullanıcı adını değiştir: “admin” kullanıcı adını kullanma, saldırganların ilk denediği şey bu
# wp-config.php güvenlik ayarları
sudo nano /var/www/multisite.ornek.com/html/wp-config.php

Eklenecek satırlar:

define( 'DISALLOW_FILE_EDIT', true );
define( 'DISALLOW_FILE_MODS', false ); # Eklenti güncellemelerine izin ver
define( 'FORCE_SSL_ADMIN', true );
define( 'WP_DEBUG', false );
define( 'WP_DEBUG_LOG', false );
define( 'WP_DEBUG_DISPLAY', false );

Sonuç

OpenLiteSpeed ile WordPress Multisite kombinasyonu, doğru yapılandırıldığında son derece güçlü ve ölçeklenebilir bir platform sunuyor. Bu yazıda anlattığım adımları takip ederek hem performanslı hem de güvenli bir Multisite ağı kurabilirsin.

Benim deneyimimde en kritik nokta wildcard DNS yapılandırması ve SSL sertifikası ayarları. Bu iki konuya dikkat etmezsen saatler harcayabilirsin. LiteSpeed Cache eklentisinin sunucu seviyesinde entegrasyonu ise Apache veya Nginx ile kıyaslandığında belirgin bir fark yaratıyor; özellikle yoğun trafik alan sitelerde bu fark çok daha belirgin hale geliyor.

Kurulumun ardından birkaç hafta boyunca log dosyalarını takip etmeni ve performans metriklerini izlemeni öneririm. Her Multisite kurulumu kendine özgü davranış kalıpları geliştiriyor ve zamanla bu kalıplara göre yapılandırmanı ince ayar yapman gerekecek. Sorularınız için yorum bölümünü kullanabilirsiniz.

Yorum yapın