WP CLI ile WordPress Güncelleme ve Sürüm Yönetimi
WordPress sitenizi güncel tutmak, güvenlik açıklarını kapatmanın ve performansı korumanın en temel yoludur. Ancak production ortamında manuel güncellemeler hem zaman kaybettirir hem de hata yapma riskini artırır. İşte tam burada WP CLI devreye giriyor ve wp core komutu hayat kurtarıcı oluyor.
WP Core Nedir ve Neden Kullanmalıyız?
wp core, WP CLI’nin WordPress çekirdeğini yönetmek için sunduğu komut grubudur. Bu komutlarla WordPress’i indirip kurabilir, güncelleyebilir, sürüm bilgisini sorgulayabilir ve bütünlük kontrolü yapabilirsiniz. Özellikle birden fazla WordPress sitesi yöneten sysadmin’ler için bu komutlar hem zaman kazandırır hem de işlemleri tekrarlanabilir, otomatize edilebilir hale getirir.
Pano üzerinden güncelleme yapmanın birkaç ciddi sorunu vardır. Sunucuda PHP timeout olabilir, yarım kalan güncelleme siteyi bozabilir, hangi sürümden hangisine geçildiğini takip etmek zorlaşır. WP CLI ile bunların hiçbiri sorun olmaz.
Temel wp core Komutları
Önce mevcut WordPress kurulumunuzun durumunu kontrol etmekle başlayalım.
Sürüm Kontrolü
wp core version
Bu komut size kısa ve net bir çıktı verir: 6.4.2 gibi. Ama daha fazlasını istiyorsanız:
wp core version --extra
--extra parametresi ile WordPress sürümünün yanında veritabanı sürümünü ve diğer ayrıntıları da görebilirsiniz. Özellikle bir sorunu debug ederken bu bilgiler çok işe yarar.
Güncelleme Kontrolü
Güncelleme yapmadan önce ne kadar güncel olduğunuzu kontrol edin:
wp core check-update
Bu komutun çıktısı şöyle görünür:
+---------+-------------+---------------------------------------------------------------------+
| version | update_type | package_url |
+---------+-------------+---------------------------------------------------------------------+
| 6.5.3 | major | https://downloads.wordpress.org/release/wordpress-6.5.3.zip |
+---------+-------------+---------------------------------------------------------------------+
Eğer herhangi bir güncelleme yoksa Success: WordPress is at the latest version. mesajını görürsünüz. Bu komutu cron job’a bağlayıp günlük rapor almak için de kullanabilirsiniz.
WordPress Güncelleme İşlemi
Temel Güncelleme
En basit haliyle WordPress çekirdeğini güncellemek:
wp core update
Bu komut otomatik olarak en son kararlı sürümü indirir ve kurar. Güncelleme başarıyla tamamlandığında şöyle bir mesaj görürsünüz:
Downloading update from https://downloads.wordpress.org/release/wordpress-6.5.3.zip...
Unpacking the update...
Cleaning up files...
No files found that need cleaning up.
Success: WordPress updated successfully.
Belirli Bir Sürüme Güncelleme
Bazen en son sürüme değil, belirli bir sürüme geçmek istersiniz. Test ortamınızda belirli bir sürümü denemek ya da bir sürümü atlayarak ilerlemek gerekebilir:
wp core update --version=6.4.3
Eğer daha eski bir sürüme geçiş yapıyorsanız (downgrade) --force parametresini eklemeniz gerekir:
wp core update --version=6.3.2 --force
Bu özellik özellikle bir güncellemenin bir eklentiyle çakışma yarattığı durumlarda çok değerlidir. Hızlıca bir önceki sürüme dönebilirsiniz.
Sadece Veritabanını Güncelleme
Bazen dosyalar güncellenir ama veritabanı şeması güncellenmez. Bu durumda:
wp core update-db
Birden fazla siteniz varsa ve hepsinin veritabanını güncellemeniz gerekiyorsa:
wp core update-db --network
Bu komut multisite kurulumlarında ağdaki tüm sitelerin veritabanını tek seferde günceller. Elle tek tek yapmak yerine bu komutu kullanmak saatlerce zaman kazandırabilir.
WordPress Bütünlük Kontrolü
Sitenizin hacklenebildiğini düşünüyor musunuz? Ya da bir güncelleme sırasında bir şeylerin bozulduğundan mı şüpheleniyorsunuz? wp core verify-checksums tam bunun için var:
wp core verify-checksums
Bu komut WordPress çekirdeğindeki dosyaların beklenen hash değerleriyle eşleşip eşleşmediğini kontrol eder. Değiştirilmiş veya bozulmuş dosyaları raporlar:
Warning: File doesn't verify against checksum: wp-login.php
Warning: File doesn't verify against checksum: wp-includes/functions.php
Error: WordPress installation doesn't verify against checksums.
Böyle bir çıktı aldığınızda alarm zilleri çalmalı. Bu dosyalar ya hacklenmiş ya da güncelleme sırasında bozulmuş demektir. Ardından şu komutla WordPress dosyalarını yeniden indirip onarabilirsiniz:
wp core download --force
Gerçek Dünya Senaryosu 1: Toplu Güncelleme Scripti
Diyelim ki sunucunuzda 15 farklı WordPress sitesi var ve hepsini düzenli olarak güncellemeniz gerekiyor. Her birine tek tek girmek yerine şu scripti kullanabilirsiniz:
#!/bin/bash
# WordPress toplu güncelleme scripti
# /usr/local/bin/wp-update-all.sh
SITES_DIR="/var/www"
LOG_FILE="/var/log/wp-updates.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$DATE] Güncelleme başladı" >> $LOG_FILE
for site_dir in $SITES_DIR/*/; do
if [ -f "$site_dir/wp-config.php" ]; then
site_name=$(basename $site_dir)
echo "[$DATE] $site_name güncelleniyor..." >> $LOG_FILE
# Bakım modunu aç
wp maintenance-mode activate --path="$site_dir" --quiet
# Önce yedek al (WP Snapshots veya mysqldump ile)
DB_NAME=$(wp config get DB_NAME --path="$site_dir" 2>/dev/null)
mysqldump $DB_NAME > "/var/backups/wp/$site_name-$(date +%Y%m%d).sql" 2>/dev/null
# WordPress çekirdeğini güncelle
UPDATE_RESULT=$(wp core update --path="$site_dir" 2>&1)
if echo "$UPDATE_RESULT" | grep -q "Success"; then
echo "[$DATE] $site_name: Başarıyla güncellendi" >> $LOG_FILE
# Veritabanını da güncelle
wp core update-db --path="$site_dir" --quiet
else
echo "[$DATE] $site_name: HATA - $UPDATE_RESULT" >> $LOG_FILE
fi
# Bakım modunu kapat
wp maintenance-mode deactivate --path="$site_dir" --quiet
fi
done
echo "[$DATE] Güncelleme tamamlandı" >> $LOG_FILE
Bu scripti cron’a ekleyerek haftalık otomatik güncelleme yapabilirsiniz:
# Her Pazar gece 03:00'de çalıştır
0 3 * * 0 /usr/local/bin/wp-update-all.sh
Gerçek Dünya Senaryosu 2: Staging Ortamında Test, Production’da Uygulama
Profesyonel bir WordPress yönetimi akışı şöyle görünmeli:
#!/bin/bash
# Staging'de test et, production'da uygula
STAGING_PATH="/var/www/staging.sirketim.com"
PRODUCTION_PATH="/var/www/www.sirketim.com"
echo "=== Staging ortamında güncelleme testi ==="
# Staging'de mevcut sürümü kontrol et
STAGING_VERSION=$(wp core version --path=$STAGING_PATH)
echo "Staging mevcut sürüm: $STAGING_VERSION"
# Staging'de güncellemeleri kontrol et
AVAILABLE=$(wp core check-update --path=$STAGING_PATH --format=count 2>/dev/null)
if [ "$AVAILABLE" -gt "0" ]; then
echo "Güncelleme mevcut, staging'de test ediliyor..."
# Staging'i güncelle
wp core update --path=$STAGING_PATH
# Temel kontrolü yap
wp core verify-checksums --path=$STAGING_PATH
echo "Staging güncellendi. Manuel testleri tamamlayın."
echo "Production güncellemesi için: wp core update --path=$PRODUCTION_PATH"
else
echo "Güncel sürüm kullanılıyor, güncelleme gerekmez."
fi
Bu tür bir workflow, production siteyi kör körüne güncellemek yerine önce staging ortamında test etmenizi sağlar.
wp core download ile Temiz Kurulum
Yeni bir WordPress kurulumu başlatıyorsanız ya da mevcut kurulumu sıfırlamak istiyorsanız:
# Türkçe WordPress indir
wp core download --locale=tr_TR --path=/var/www/yenisite.com
# Belirli sürümü indir
wp core download --version=6.5.3 --locale=tr_TR
# Sadece Türkçe dil paketini güncelle
wp language core update
İndirme işleminden sonra WordPress kurulumunu tamamlamak için:
# wp-config.php oluştur
wp config create
--dbname=wordpress_db
--dbuser=wp_user
--dbpass=guclu_sifre_buraya
--dbhost=localhost
--path=/var/www/yenisite.com
# WordPress'i kur
wp core install
--url=https://yenisite.com
--title="Site Adı"
--admin_user=admin
--admin_password=cok_guclu_sifre
[email protected]
--path=/var/www/yenisite.com
Otomatik Güncelleme Ayarları
WordPress’in otomatik güncelleme davranışını wp-config.php üzerinden kontrol edebilirsiniz. WP CLI ile bu ayarları yönetmek çok pratiktir:
# Otomatik küçük güncellemeleri etkinleştir (güvenlik güncellemeleri)
wp config set AUTOMATIC_UPDATER_DISABLED false --raw --path=/var/www/siteniz.com
# Büyük sürüm güncellemelerini otomatik yap (dikkatli kullanın!)
wp config set WP_AUTO_UPDATE_CORE true --raw --path=/var/www/siteniz.com
# Sadece küçük güncellemeler için (önerilen)
wp config set WP_AUTO_UPDATE_CORE minor --path=/var/www/siteniz.com
WP_AUTO_UPDATE_CORE için geçerli değerler:
- true: Tüm güncellemeler otomatik yapılır
- false: Otomatik güncelleme tamamen devre dışı
- minor: Sadece küçük sürüm güncellemeleri (6.4.1 -> 6.4.2 gibi) otomatik yapılır
Production sunucularda genellikle minor değeri önerilir. Büyük sürüm geçişlerini elle kontrol etmek daha güvenlidir.
Güncelleme Sonrası Kontrol Listesi
Güncellemeyi yaptıktan sonra her şeyin yolunda olduğunu doğrulamanız gerekir. Bunu da WP CLI ile otomatize edebilirsiniz:
#!/bin/bash
# Güncelleme sonrası doğrulama scripti
SITE_PATH="/var/www/www.sirketim.com"
echo "=== Güncelleme Sonrası Kontrol ==="
# 1. Sürümü doğrula
echo "WordPress sürümü:"
wp core version --path=$SITE_PATH
# 2. Bütünlük kontrolü
echo "Dosya bütünlüğü kontrol ediliyor..."
wp core verify-checksums --path=$SITE_PATH
# 3. Veritabanı durumu
echo "Veritabanı durumu:"
wp core update-db --path=$SITE_PATH
# 4. Eklentilerin aktif olup olmadığını kontrol et
echo "Aktif eklenti sayısı:"
wp plugin list --status=active --path=$SITE_PATH --format=count
# 5. Hata ayıklama - son PHP hatalarına bak
echo "Son hata logları:"
tail -20 /var/log/php/error.log | grep -i "fatal|error" || echo "Kritik hata bulunamadı"
# 6. Basit HTTP kontrolü
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" https://www.sirketim.com)
if [ "$HTTP_CODE" -eq "200" ]; then
echo "Site erişilebilir: HTTP $HTTP_CODE"
else
echo "UYARI: Site yanıt kodu: $HTTP_CODE"
fi
Minor ve Major Güncelleme Farkı
WP CLI check-update komutu size güncellemenin tipini gösterir:
- minor: Aynı major sürüm içindeki küçük güncellemeler (6.4.1 -> 6.4.2). Genellikle güvenlik yamaları ve küçük düzeltmeler içerir. Neredeyse her zaman güvenle uygulanabilir.
- major: Farklı major sürüme geçiş (6.4.x -> 6.5.0). Yeni özellikler ve bazen uyumsuzluk değişiklikleri içerebilir. Daha dikkatli test gerektirir.
Major güncelleme öncesi şu önlemleri alın:
- Tam veritabanı yedeği alın
- Dosya sistemi yedeği alın
- Staging ortamında önce test edin
- Eklenti uyumluluğunu kontrol edin
- Bakım modunu açın
# Güvenli major güncelleme akışı
wp maintenance-mode activate --path=/var/www/siteniz.com
wp db export /var/backups/pre-update-$(date +%Y%m%d-%H%M).sql --path=/var/www/siteniz.com
wp core update --path=/var/www/siteniz.com
wp core update-db --path=/var/www/siteniz.com
wp cache flush --path=/var/www/siteniz.com
wp maintenance-mode deactivate --path=/var/www/siteniz.com
Multisite Ortamlarında wp core
WordPress Multisite kurulumlarında güncelleme biraz daha dikkat ister:
# Multisite'da WordPress güncelle
wp core update --path=/var/www/multisite.com
# Ağdaki tüm sitelerin veritabanını güncelle
wp core update-db --network --path=/var/www/multisite.com
# Ağdaki tüm sitelerin listesini gör
wp site list --path=/var/www/multisite.com
# Belirli bir alt sitenin URL'sini kullanarak işlem yap
wp --url=alt-site.multisite.com core version --path=/var/www/multisite.com
Multisite’da --network parametresini unutmak sık yapılan hatalardan biridir. Sadece ana sitenin veritabanını güncellerseniz alt siteler eski şemayla çalışmaya devam eder ve beklenmedik hatalar alabilirsiniz.
WP CLI ile Sürüm Yönetimi İpuçları
Birkaç pratik ipucu:
Sessiz mod kullanımı: Cron job’larda çıktıyı bastırmak için --quiet kullanın ama hataları yine de loglamayı unutmayın.
Format parametresi: Çıktıyı farklı formatlarda alabilirsiniz. Bash scriptlerinde parse etmek için --format=json veya --format=csv işe yarar.
# JSON formatında güncelleme bilgisi
wp core check-update --format=json
# Sadece güncelleme sayısını al
wp core check-update --format=count
--allow-root parametresi: Root kullanıcısıyla WP CLI çalıştırmanız gerekiyorsa (genellikle önerilmez ama bazen zorunludur) bu parametreyi ekleyin:
wp core update --allow-root --path=/var/www/siteniz.com
--path parametresi: Her zaman açık belirtin. Özellikle birden fazla WordPress kurulumu olan sunucularda yanlış dizinde işlem yapmak ciddi sorunlara yol açabilir.
Yaygın Hatalar ve Çözümleri
Sysadmin’lerin en sık karşılaştığı durumlar:
“This WordPress version requires a newer version of PHP” hatası: WordPress’in yeni sürümü sunucunuzdaki PHP sürümünü desteklemiyor olabilir. Önce PHP’yi güncelleyin.
Güncelleme yarıda kesilirse: Sunucuda wp-content/upgrade/ dizinine bakın. Yarım kalan güncelleme dosyaları orada kalabilir. Temizleyip tekrar deneyin.
“Failed to connect to FTP” hatası: wp-config.php dosyasında define('FS_METHOD', 'direct'); satırı eksik olabilir. WP CLI genellikle bunu atlar ama bazı durumlarda gerekebilir:
wp config set FS_METHOD direct --path=/var/www/siteniz.com
Güncelleme sonrası beyaz ekran: Cache’i temizleyin ve debug modunu açın:
wp cache flush --path=/var/www/siteniz.com
wp config set WP_DEBUG true --raw --path=/var/www/siteniz.com
wp config set WP_DEBUG_LOG true --raw --path=/var/www/siteniz.com
Sonuç
wp core komut grubu, WordPress güncelleme ve sürüm yönetimini sysadmin dostu bir hale getirir. Manuel güncellemelerin getirdiği belirsizlik ve risk yerine, scriptlenebilir ve tekrarlanabilir bir süreç elde edersiniz. Özellikle çok siteli ortamlarda bu komutları iyi öğrenmek günde saatler kazandırabilir.
Güncelleme stratejinizi belirlerken şunu unutmayın: minor güncellemeleri mümkün olduğunca hızlı uygulayın çünkü bunların büyük çoğunluğu güvenlik yaması içerir. Major güncellemeleri ise staging ortamında test edip, tam yedek alarak ve bakım penceresi belirleyerek yapın. Bu disiplini WP CLI scriptleriyle otomatize ettiğinizde hem güvenli hem de verimli bir WordPress yönetim sürecine sahip olursunuz.
WP CLI’nin diğer komutlarını da öğrendikçe bu komutları birbirine zincirleyerek daha güçlü otomasyon senaryoları oluşturabilirsiniz. wp plugin update, wp theme update ve wp language update komutları da wp core update ile birlikte kullanılabilecek en değerli komutlar arasındadır.
