WP CLI ile WordPress için Yerleşik PHP Sunucusu Başlatma

WordPress geliştirme ortamı kurarken çoğu geliştirici hemen bir LAMP stack, Docker ya da XAMPP gibi araçlara yönelir. Oysa WP-CLI ile gelen yerleşik PHP sunucusu, özellikle hızlı testler, yerel geliştirme ve CI/CD pipeline’larında son derece kullanışlı bir alternatif sunar. wp server komutu, ek bir web sunucusu kurulumu gerektirmeden WordPress’i ayağa kaldırmanızı sağlar. Bu yazıda bu komutu her yönüyle inceleyeceğiz.

wp server Komutu Nedir?

wp server, PHP’nin yerleşik web sunucusunu (php -S) kullanarak WordPress sitenizi çalıştıran bir WP-CLI komutudur. Arka planda PHP’nin built-in server özelliğini tetikler ve WordPress’in router dosyasını devreye alır. Yani Apache veya Nginx kurmanıza gerek kalmadan, sadece PHP ve WP-CLI yeterli olur.

Bu komutun özellikle işe yaradığı durumlar şunlardır:

  • Hızlı bir tema veya eklenti testi yapmanız gerektiğinde
  • CI/CD pipeline’larında entegrasyon testleri çalıştırırken
  • Müşteriye hızlıca demo göstermek istediğinizde
  • Geliştirme ortamınızda Apache/Nginx yapılandırmasıyla uğraşmak istemediğinizde
  • Vagrant veya Docker olmadan minimal bir ortam kurmak istediğinizde

Önemli uyarı: PHP’nin yerleşik sunucusu tek thread çalışır ve üretim ortamı için kesinlikle uygun değildir. Bu araç saf bir geliştirme aracıdır.

Ön Koşullar

wp server komutunu kullanmadan önce sisteminizde şunların kurulu olması gerekir:

  • PHP 5.4 veya üzeri: Yerleşik sunucu özelliği PHP 5.4 ile geldi
  • WP-CLI: Güncel bir sürüm önerilir (2.x)
  • WordPress kurulumu: Çalışan bir wp-config.php dosyası
  • MySQL/MariaDB: Veritabanı bağlantısı hala gereklidir

Sisteminizde WP-CLI kurulu olup olmadığını kontrol etmek için:

wp --info

PHP sürümünüzü kontrol etmek için:

php -v

Temel Kullanım

En basit haliyle wp server komutunu WordPress kurulum dizininde çalıştırmanız yeterlidir:

cd /var/www/html/mysite
wp server

Bu komut varsayılan olarak localhost:8080 adresinde sunucuyu başlatır. Tarayıcınızdan http://localhost:8080 adresine giderek sitenizi görebilirsiniz.

Çıktı genellikle şuna benzer:

PHP 8.1.2 Development Server (http://localhost:8080) started

Sunucuyu durdurmak için terminalde Ctrl + C tuş kombinasyonunu kullanabilirsiniz.

Parametreler ve Seçenekler

wp server komutu birkaç önemli parametre kabul eder:

–host: Sunucunun dinleyeceği IP adresini belirtir. Varsayılan localhost‘tur.

–port: Dinlenecek port numarasını belirtir. Varsayılan 8080‘dir.

–docroot: Belge kök dizinini belirtir. Varsayılan olarak WordPress kurulum dizinini kullanır.

–config: PHP’nin hangi ini dosyasıyla başlatılacağını belirtmenizi sağlar.

–allow-root: WP-CLI’yi root kullanıcısıyla çalıştırmanız gerektiğinde bu bayrağı ekleyin.

Port Belirleme

Varsayılan 8080 portu meşgulse ya da farklı bir port kullanmak istiyorsanız:

wp server --port=9000

Birden fazla WordPress sitesi üzerinde aynı anda çalışıyorsanız her biri için farklı port kullanabilirsiniz:

# Site 1
cd /var/www/html/site1
wp server --port=8081 &

# Site 2
cd /var/www/html/site2
wp server --port=8082 &

Burada & ile komutu arka plana atıyoruz. Ancak arka planda çalışan sunucuları yönetmek için biraz sonra farklı bir yöntemden bahsedeceğiz.

Host Adresi Belirleme

Sunucunuzu sadece localhost yerine ağdaki diğer makinelerin de erişebileceği şekilde başlatmak isteyebilirsiniz. Örneğin bir test sunucusunda çalışıyorsunuz ve ekibinizdeki başka biri sitenizi görmek istiyor:

wp server --host=0.0.0.0 --port=8080

Bu komutla sunucu tüm ağ arayüzlerinde dinlemeye başlar. 0.0.0.0 yerine belirli bir IP de verebilirsiniz:

wp server --host=192.168.1.100 --port=8080

Güvenlik notu: Sunucunuzu 0.0.0.0 ile başlattığınızda, ağınızdaki herkes sitenize erişebilir. Bunu sadece güvenli, izole geliştirme ortamlarında kullanın.

Gerçek Dünya Senaryosu 1: Hızlı Tema Geliştirme

Bir müşteri için tema geliştiriyorsunuz ve her değişiklikte Nginx/Apache yapılandırmasıyla uğraşmak istemiyorsunuz. Şöyle bir iş akışı kurabilirsiniz:

# WordPress kurulu dizine git
cd ~/projects/client-theme

# wp-config.php'deki DB bilgilerinin doğru olduğundan emin ol
wp db check

# Sunucuyu başlat
wp server --port=8888

Artık http://localhost:8888 adresinden sitenize erişebilir, tema dosyalarınızı düzenleyip tarayıcıyı yenileyerek sonuçları anında görebilirsiniz. Tema dosyaları üzerinde çalışırken sunucu arka planda çalışmaya devam eder.

Gerçek Dünya Senaryosu 2: CI/CD Pipeline’da Otomatik Testler

GitHub Actions veya GitLab CI kullanıyorsanız, entegrasyon testleri için WordPress’i çalıştırmanız gerekebilir. wp server bu iş için biçilmiş kaftandır:

#!/bin/bash
# test-runner.sh

# WordPress dizinine geç
cd /tmp/wordpress-test

# Veritabanını hazırla
wp db create
wp core install 
  --url=http://localhost:8080 
  --title="Test Site" 
  --admin_user=admin 
  --admin_password=password 
  [email protected]

# Sunucuyu arka planda başlat
wp server --port=8080 &
SERVER_PID=$!

# Sunucunun hazır olmasını bekle
sleep 2

# Testleri çalıştır (örneğin Cypress veya PHPUnit)
./vendor/bin/phpunit --testsuite integration

# Test sonuçlarını al
TEST_RESULT=$?

# Sunucuyu durdur
kill $SERVER_PID

# Test sonucuna göre çık
exit $TEST_RESULT

Bu scriptte $! ile arka plana atılan process’in PID’ini alıyoruz ve testler bittikten sonra sunucuyu düzgünce kapatıyoruz. Bu yaklaşım, CI ortamında temiz bir test döngüsü sağlar.

Gerçek Dünya Senaryosu 3: Multisite Geliştirme

WordPress Multisite kurulumlarında her subsite için farklı host/port kombinasyonları kullanabilirsiniz:

# Ana site
wp server --host=localhost --port=8080

# Alt site testleri için (ayrı terminal)
wp server --host=localhost --port=8081

Ancak Multisite’da URL yapısı nedeniyle bazı ek wp-config.php ayarları gerekebilir. wp-config.php dosyanıza şunu ekleyin:

define('DOMAIN_CURRENT_SITE', 'localhost');
define('PORT_CURRENT_SITE', 8080);

PHP Konfigürasyonu ile Kullanım

Bazen özel PHP ayarları ile sunucuyu başlatmanız gerekebilir. Örneğin dosya yükleme limitini artırmak veya hata raporlamayı açmak için:

# Özel php.ini dosyası oluştur
cat > /tmp/dev-php.ini << 'EOF'
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
display_errors = On
error_reporting = E_ALL
max_execution_time = 120
EOF

# Bu konfigürasyon ile sunucuyu başlat
wp server --config=/tmp/dev-php.ini --port=8080

Bu yöntem özellikle büyük medya dosyaları yükleyerek test yapmanız gerektiğinde veya hata ayıklama sırasında çok işe yarar.

wp server ile WP-CLI’nin Diğer Komutlarını Birleştirme

wp server‘ın asıl gücü, WP-CLI ekosistemiyle birleştiğinde ortaya çıkar. Örneğin sunucuyu başlatmadan önce ortamı tamamen sıfırlayıp yeniden kurabilirsiniz:

#!/bin/bash
# fresh-start.sh

SITE_DIR="/var/www/html/devsite"
DB_NAME="devsite_db"
SITE_URL="http://localhost:8080"

cd $SITE_DIR

echo "Veritabanı sıfırlanıyor..."
wp db reset --yes

echo "WordPress kuruluyor..."
wp core install 
  --url=$SITE_URL 
  --title="Dev Site" 
  --admin_user=admin 
  --admin_password=admin123 
  [email protected] 
  --skip-email

echo "Demo içerik yükleniyor..."
wp plugin install wordpress-importer --activate
curl -s https://raw.githubusercontent.com/WPTT/theme-test-data/master/themeunittestdata.wordpress.xml -o /tmp/demo.xml
wp import /tmp/demo.xml --authors=create

echo "Geliştirme eklentileri aktifleştiriliyor..."
wp plugin install query-monitor --activate
wp plugin install debug-bar --activate

echo "Sunucu başlatılıyor: $SITE_URL"
wp server --port=8080

Bu script ile her sabah temiz bir geliştirme ortamıyla başlayabilirsiniz. Tek komutla veritabanı sıfırlanır, demo içerik yüklenir ve sunucu başlatılır.

Arka Planda Çalıştırma ve Yönetme

wp server‘ı nohup ile arka planda çalıştırıp log tutabilirsiniz:

# Arka planda başlat ve logla
nohup wp server --port=8080 > /tmp/wp-server.log 2>&1 &

# PID'i kaydet
echo $! > /tmp/wp-server.pid

echo "Sunucu başlatıldı. PID: $(cat /tmp/wp-server.pid)"
echo "Log: /tmp/wp-server.log"

Sunucuyu durdurmak için:

# PID dosyasından oku ve kapat
kill $(cat /tmp/wp-server.pid)
rm /tmp/wp-server.pid
echo "Sunucu durduruldu."

Sunucunun hala çalışıp çalışmadığını kontrol etmek için:

# Port dinleniyor mu kontrol et
if lsof -Pi :8080 -sTCP:LISTEN -t >/dev/null ; then
    echo "Sunucu 8080 portunda çalışıyor"
else
    echo "Sunucu çalışmıyor"
fi

Sık Karşılaşılan Hatalar ve Çözümleri

“Address already in use” Hatası

Bu hata, belirttiğiniz portun zaten kullanımda olduğu anlamına gelir:

# Hangi process portu kullanıyor?
lsof -i :8080

# Ya da netstat ile
netstat -tulpn | grep 8080

# O process'i kapat (PID ile)
kill -9 <PID>

# Sonra tekrar dene
wp server --port=8080

“Permission denied” Hatası

1024’ün altındaki portlar root yetkisi gerektirir. Bu yüzden her zaman 1024 üstü port kullanın veya:

# Root ile çalışıyorsanız
wp server --port=80 --allow-root

# Öneri: Yerine yüksek port kullanın
wp server --port=8080

“wp: command not found” Hatası

WP-CLI global olarak kurulmamış olabilir:

# WP-CLI'yi indirip çalıştırılabilir yap
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar

# wp-cli.phar ile kullan
php wp-cli.phar server --port=8080

# Ya da global konuma taşı
sudo mv wp-cli.phar /usr/local/bin/wp

Veritabanı Bağlantı Hatası

Sunucu başlasa bile veritabanı bağlantısı olmadan WordPress çalışmaz:

# wp-config.php ayarlarını kontrol et
wp config get DB_HOST
wp config get DB_NAME
wp config get DB_USER

# Bağlantıyı test et
wp db check

# MySQL servisinin çalışıp çalışmadığını kontrol et
systemctl status mysql

Performans ve Sınırlamalar

PHP’nin yerleşik sunucusu hakkında net olmak gerekir. Tek thread çalışması şu anlama gelir: Bir istek işlenirken gelen diğer istekler bekler. Bu nedenle:

  • Yoğun trafik testleri için kullanmayın
  • Aynı anda birden fazla kullanıcının erişeceği demolar için uygun değil
  • Statik dosyalar (CSS, JS, resimler) için Apache/Nginx kadar iyi değil
  • Long-polling veya WebSocket gerektiren durumlar için uygun değil

Buna karşın geliştirme amaçlı kullanımda bu sınırlamalar genellikle sorun yaratmaz. Tek geliştirici, yerel ortam, hızlı testler için mükemmeldir.

Pratik Alias’lar ve Kısayollar

Sık kullandığınız wp server komutlarını bash alias olarak tanımlayabilirsiniz. .bashrc veya .zshrc dosyanıza ekleyin:

# Hızlı WordPress geliştirme sunucusu başlat
alias wpdev='wp server --port=8080'

# Ağa açık başlat
alias wpnet='wp server --host=0.0.0.0 --port=8080'

# Belirli bir dizindeki siteyi başlat
wpsite() {
    local dir=$1
    local port=${2:-8080}
    if [ -d "$dir" ]; then
        cd "$dir" && wp server --port=$port
    else
        echo "Dizin bulunamadi: $dir"
    fi
}

Bu alias’ları kaydetikten sonra source ~/.bashrc komutunu çalıştırın ve artık wpdev, wpnet gibi kısayolları kullanabilirsiniz.

Docker ile Birlikte Kullanım

Docker kullanıyorsanız ama tam bir WordPress Docker image’ı yerine sadece PHP container’ı istiyorsanız:

# PHP container içinde WP-CLI ve wp server kullan
docker run -it --rm 
  -v $(pwd):/var/www/html 
  -p 8080:8080 
  -w /var/www/html 
  php:8.1-cli 
  bash -c "curl -sS https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar -o /usr/local/bin/wp && chmod +x /usr/local/bin/wp && wp server --host=0.0.0.0 --port=8080 --allow-root"

Bu yaklaşım, container’ı durdurunca her şey temizlendiğinden geçici test ortamları için idealdir.

Sunucu Loglarını Takip Etme

wp server çalışırken terminal’de HTTP isteklerini canlı olarak görebilirsiniz. Çıktı şuna benzer:

[Wed Jan 15 14:23:01 2025] 127.0.0.1:52341 [200]: GET /
[Wed Jan 15 14:23:01 2025] 127.0.0.1:52342 [200]: GET /wp-content/themes/mytheme/style.css
[Wed Jan 15 14:23:02 2025] 127.0.0.1:52343 [404]: GET /favicon.ico

Bu loglar debug için oldukça faydalıdır. Hangi isteklerin geldiğini, hangi dosyaların 404 döndürdüğünü anlık takip edebilirsiniz.

Logları bir dosyaya yönlendirip aynı zamanda ekranda görmek için:

wp server --port=8080 2>&1 | tee /tmp/wp-server-access.log

Güvenlik Kontrol Listesi

wp server kullanırken aklınızda bulundurmanız gerekenler:

  • Üretim sunucularında asla kullanmayın
  • --host=0.0.0.0 ile başlatırken güvenlik duvarı kurallarınızı kontrol edin
  • Gerçek kullanıcı verisi içeren veritabanlarını geliştirme ortamında kullanmaktan kaçının
  • Test bittikten sonra sunucuyu kapatmayı unutmayın
  • Güçlü admin şifreleri kullanın, her ne kadar geliştirme ortamı olsa da

Sonuç

wp server komutu, WP-CLI’nin en az konuşulan ama en pratik komutlarından biri. Özellikle sık sık farklı WordPress projeleri arasında geçiş yapan, hızlı test ortamı kurmak isteyen ya da CI/CD pipeline’larında WordPress ile çalışan geliştiriciler için büyük kolaylık sağlıyor.

Apache veya Nginx kurulumu gerektirmemesi, tek bir komutla çalışması ve WP-CLI’nin diğer komutlarıyla mükemmel entegrasyonu bu aracı geliştirme iş akışınızın ayrılmaz bir parçası haline getirebilir. Sınırlamalarını bilerek kullandığınız sürece, yani sadece geliştirme ve test amacıyla, son derece güvenilir ve pratik bir araç.

Bir sonraki yazıda wp eval ve wp shell komutlarına bakacağız; gerçek zamanlı PHP kodu çalıştırma ve WordPress ortamını interaktif olarak keşfetme konularını ele alacağız.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir