WP CLI ile wp-config.php Dosyasını Yönetme

WordPress kurulumlarında wp-config.php dosyası adeta bir kontrol merkezidir. Veritabanı bağlantı bilgilerinden güvenlik anahtarlarına, hata ayıklama modundan önbellek ayarlarına kadar sitenin temel davranışını bu dosya belirler. Manuel olarak düzenlemek her zaman mümkün olsa da, özellikle çok sayıda site yönetiyorsanız ya da otomasyon betikleri yazıyorsanız, WP-CLI’nin wp config komutu hayat kurtarır. Bu yazıda wp config komutunu tüm alt komutları ve gerçek dünya senaryolarıyla ele alacağız.

wp config Nedir ve Neden Kullanmalısınız?

wp config, WP-CLI’nin wp-config.php dosyasını okumak, yazmak ve yönetmek için sunduğu komut grubudur. Bu komut sayesinde:

  • wp-config.php dosyasını sıfırdan oluşturabilirsiniz
  • Mevcut sabitleri (constant) okuyabilir veya değiştirebilirsiniz
  • PHP değişkenlerini yönetebilirsiniz
  • Güvenlik anahtarlarını yenileyebilirsiniz
  • Dosyanın içeriğini listeleyebilirsiniz

Manuel düzenlemeye göre en büyük avantajı, sözdizimi hatasına düşme riskini ortadan kaldırması ve betik entegrasyonunu kolaylaştırmasıdır. Bir PHP editörü olmadan sunucuya SSH ile bağlandığınızda bile wp config ile güvenle çalışabilirsiniz.

wp config create: Yeni wp-config.php Oluşturma

Yeni bir WordPress kurulumu yapıyorsanız ya da mevcut wp-config.php dosyası bozulduysa, wp config create komutu ile sıfırdan bir yapılandırma dosyası oluşturabilirsiniz.

wp config create 
  --dbname=benim_sitem 
  --dbuser=wp_kullanici 
  --dbpass=guclu_sifre_123 
  --dbhost=localhost 
  --dbprefix=wp_ 
  --locale=tr_TR

Bu komut, WordPress kurulum dizininde wp-config.php dosyasını otomatik olarak oluşturur. --locale parametresi sayesinde Türkçe dil ayarlarıyla başlayabilirsiniz.

Eğer dosya zaten varsa ve üzerine yazmak istiyorsanız --force parametresini ekleyin:

wp config create 
  --dbname=benim_sitem 
  --dbuser=wp_kullanici 
  --dbpass=guclu_sifre_123 
  --force

Önemli Not: --force parametresini dikkatli kullanın. Mevcut yapılandırmanızı tamamen siler ve yerine yenisini yazar. Öncesinde mutlaka yedek alın.

Uzak Veritabanı Sunucusu ile Kullanım

Özellikle yönetilen veritabanı hizmetleri (AWS RDS, DigitalOcean Managed Databases gibi) kullanıyorsanız, --dbhost parametresine uzak sunucu adresini verebilirsiniz:

wp config create 
  --dbname=production_db 
  --dbuser=admin 
  --dbpass=super_secret 
  --dbhost=mydb.cluster-xyz.eu-west-1.rds.amazonaws.com 
  --dbprefix=site_

wp config get: Mevcut Değerleri Okuma

wp config get komutu, wp-config.php dosyasındaki belirli bir sabit veya değişkenin değerini getirir. Özellikle otomasyon betiklerinde mevcut değeri kontrol etmek için çok kullanışlıdır.

# Tek bir sabitin değerini okuma
wp config get DB_NAME

# Çıktı: benim_sitem

Tablo önekini öğrenmek istediğinizde:

wp config get table_prefix
# Çıktı: wp_

Hata ayıklama modunun açık olup olmadığını kontrol etmek için:

wp config get WP_DEBUG
# Çıktı: false veya true

Bu komutu bash betiklerinde kullanarak koşullu mantık kurabilirsiniz:

#!/bin/bash
DEBUG_MODE=$(wp config get WP_DEBUG)
if [ "$DEBUG_MODE" = "true" ]; then
    echo "UYARI: WP_DEBUG aktif! Production ortamında kapatın."
fi

wp config set: Değer Atama ve Güncelleme

wp config set, mevcut bir sabiti güncellemek veya yeni bir sabit eklemek için kullanılır. Sysadmin işlerinde en sık başvuracağınız alt komutlardan biridir.

Temel Kullanım

# WP_DEBUG sabitini true yapma
wp config set WP_DEBUG true --raw

# WP_DEBUG'u false yapma
wp config set WP_DEBUG false --raw

Burada --raw parametresi önemlidir. Bu parametre olmadan değer string olarak yazılır yani 'true' şeklinde. --raw ile boolean veya integer olarak yazılır.

Tip Belirtme

# Boolean değer
wp config set WP_CACHE true --raw --type=constant

# Integer değer
wp config set WP_MEMORY_LIMIT 256 --raw --type=constant

# String değer (--raw olmadan)
wp config set WP_MEMORY_LIMIT "256M" --type=constant

--type parametresi iki değer alır:

  • constant: PHP define() ile tanımlanan sabitler için
  • variable: $table_prefix gibi PHP değişkenleri için

Tablo Önekini Değiştirme

Veritabanı geçişlerinde veya güvenlik sertleştirme çalışmalarında tablo önekini değiştirmeniz gerekebilir:

wp config set table_prefix "yeni_prefix_" --type=variable

Dikkat: Tablo önekini değiştirirseniz veritabanındaki tabloları da yeniden adlandırmanız gerekir. Bu komut yalnızca yapılandırma dosyasını günceller.

Gerçek Dünya Senaryosu: Staging Ortamı Hazırlama

Production’dan aldığınız yedekle staging ortamı kuruyorsunuz ve bazı ayarları değiştirmeniz gerekiyor:

# Staging veritabanı bilgilerini güncelle
wp config set DB_NAME staging_db
wp config set DB_USER staging_user
wp config set DB_PASSWORD "staging_pass_456"
wp config set DB_HOST localhost

# Hata ayıklama modunu aç
wp config set WP_DEBUG true --raw
wp config set WP_DEBUG_LOG true --raw
wp config set WP_DEBUG_DISPLAY false --raw

# Search engine indexlemeyi engelle (bu wp-config ile değil, WordPress ayarlarından yapılır)
# Ama cache'i devre dışı bırakalım
wp config set WP_CACHE false --raw

echo "Staging ortamı hazır!"

wp config delete: Sabit veya Değişken Silme

Artık ihtiyaç duyulmayan sabitleri veya yanlış eklenmiş değerleri wp config delete ile kaldırabilirsiniz:

# Bir sabiti silme
wp config delete WP_DEBUG

# Bir değişkeni silme
wp config delete table_prefix --type=variable

Gerçek hayatta bu komutu ne zaman kullanırsınız? Örneğin bir eklenti kurulumu sırasında wp-config.php dosyasına yazılan ancak eklenti kaldırıldıktan sonra kalan artık sabitleri temizlemek için idealdir.

wp config list: Tüm Yapılandırmayı Görüntüleme

Dosyadaki tüm sabit ve değişkenleri listelemek için wp config list kullanın:

wp config list

Bu komut, her bir sabitin adını, değerini ve tipini gösterir. Hassas bilgilerin (veritabanı şifresi gibi) ekranda görünmesini istemiyorsanız dikkatli kullanın, özellikle ekran kaydı yapılan ortamlarda.

Belirli sabitleri filtrelemek için --fields ve grep kombinasyonu kullanabilirsiniz:

wp config list | grep DEBUG

Sadece belirli alanları görmek için:

wp config list --fields=name,value

wp config path: Dosya Yolunu Öğrenme

wp-config.php dosyasının tam yolunu öğrenmek için:

wp config path
# Çıktı: /var/www/html/sitem/wp-config.php

Bu komut, özellikle betiklerde dosyayı yedeklemek veya izin ayarlarını kontrol etmek için kullanışlıdır:

#!/bin/bash
CONFIG_PATH=$(wp config path)
cp "$CONFIG_PATH" "${CONFIG_PATH}.backup.$(date +%Y%m%d_%H%M%S)"
echo "wp-config.php yedeklendi: ${CONFIG_PATH}.backup.$(date +%Y%m%d_%H%M%S)"

wp config shuffle-salts: Güvenlik Anahtarlarını Yenileme

WordPress, oturum güvenliği için çeşitli salt anahtarları kullanır. Bu anahtarlar çalınırsa ya da bir güvenlik ihlali yaşandıysa derhal yenilenmelidir. wp config shuffle-salts komutu bu işi tek satırda halleder:

wp config shuffle-salts

Bu komut AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY, NONCE_KEY ve diğer tüm güvenlik anahtarlarını WordPress API’sinden yeni değerler çekerek günceller. Komut çalıştırıldıktan sonra tüm aktif kullanıcı oturumları geçersiz kalır ve herkes yeniden giriş yapmak zorunda kalır.

Senaryo: Güvenlik İhlali Sonrası Acil Müdahale

#!/bin/bash
SITE_DIR="/var/www/html/sitem"
cd "$SITE_DIR"

echo "Güvenlik anahtarları yenileniyor..."
wp config shuffle-salts

echo "Tüm aktif oturumlar sonlandırılıyor..."
wp session destroy --all

echo "İşlem tamamlandı. Tüm kullanıcılar yeniden giriş yapmalı."

wp config has: Sabit Varlığını Kontrol Etme

Bir sabitin wp-config.php içinde tanımlı olup olmadığını kontrol etmek için wp config has kullanın:

wp config has WP_DEBUG
# Sabit varsa çıkış kodu 0 döner, yoksa 1 döner

Bu komutu betiklerde koşullu işlemler için kullanabilirsiniz:

#!/bin/bash
if wp config has CUSTOM_CONSTANT; then
    echo "Sabit zaten mevcut."
else
    wp config set CUSTOM_CONSTANT "deger" --type=constant
    echo "Sabit eklendi."
fi

Gelişmiş Kullanım Senaryoları

Çoklu Site Kurulumu (Multisite)

WordPress Multisite kurulumlarında wp-config.php dosyasına özel sabitler eklemek gerekir:

# Multisite aktifleştirme sabitleri
wp config set WP_ALLOW_MULTISITE true --raw
wp config set MULTISITE true --raw
wp config set SUBDOMAIN_INSTALL false --raw
wp config set DOMAIN_CURRENT_SITE "sitem.com"
wp config set PATH_CURRENT_SITE "/"
wp config set SITE_ID_CURRENT_SITE 1 --raw
wp config set BLOG_ID_CURRENT_SITE 1 --raw

Performans Optimizasyonu Sabitleri

# PHP bellek limitini artırma
wp config set WP_MEMORY_LIMIT "256M"
wp config set WP_MAX_MEMORY_LIMIT "512M"

# Otomatik güncelleme ayarları
wp config set AUTOMATIC_UPDATER_DISABLED false --raw
wp config set WP_AUTO_UPDATE_CORE "minor"

# Dosya düzenlemeyi devre dışı bırakma (güvenlik)
wp config set DISALLOW_FILE_EDIT true --raw
wp config set DISALLOW_FILE_MODS false --raw

Cron Yönetimi

# WordPress dahili cron'u devre dışı bırakma (sunucu cron'u kullanmak için)
wp config set DISABLE_WP_CRON true --raw

Ardından /etc/cron.d/wordpress dosyasına:

*/5 * * * * www-data cd /var/www/html/sitem && wp cron event run --due-now

SSL ve HTTPS Zorlama

wp config set FORCE_SSL_ADMIN true --raw
wp config set FORCE_SSL_LOGIN true --raw

Toplu Site Yönetimi için Bash Betiği

Sunucunuzda onlarca WordPress sitesi yönetiyorsanız, tüm sitelerde aynı anda yapılandırma değişikliği yapmanız gerekebilir. İşte bunu otomatikleştiren bir betik:

#!/bin/bash
# Tüm WordPress sitelerinde WP_DEBUG'u kapat ve güvenlik ayarlarını güncelle

SITES_DIR="/var/www/html"

for site_dir in "$SITES_DIR"/*/; do
    if [ -f "${site_dir}wp-config.php" ]; then
        echo "Işleniyor: $site_dir"
        cd "$site_dir"

        # WP-CLI'nin çalışıp çalışmadığını kontrol et
        if wp core is-installed 2>/dev/null; then
            wp config set WP_DEBUG false --raw
            wp config set DISALLOW_FILE_EDIT true --raw
            wp config set WP_MEMORY_LIMIT "256M"
            echo "  Tamamlandi: $site_dir"
        else
            echo "  Atlandi (gecersiz kurulum): $site_dir"
        fi
    fi
done

echo "Tum siteler guncellendi!"

Sık Yapılan Hatalar ve Çözümleri

Hata: wp-config.php bulunamadı

WP-CLI’yi WordPress kurulum dizininin dışında çalıştırıyorsanız bu hatayı alırsınız. --path parametresi ile dizini belirtin:

wp config get DB_NAME --path=/var/www/html/sitem

Hata: Boolean değerler string olarak yazılıyor

--raw parametresini unuttuğunuzda true yerine 'true' string değeri yazılır. PHP’de bu ikisi farklı davranır. Daima boolean için --raw kullanın:

# YANLIS: string 'true' yazar
wp config set WP_DEBUG true

# DOGRU: boolean true yazar
wp config set WP_DEBUG true --raw

İzin Sorunları

wp-config.php dosyasına yazma izni yoksa komutlar başarısız olur. Dosya sahipliğini kontrol edin:

ls -la $(wp config path)
# Web sunucusu kullanıcısının sahibi olması gerekir
chown www-data:www-data $(wp config path)
chmod 640 $(wp config path)

wp config ve Versiyon Kontrolü

wp-config.php dosyasını Git ile takip ediyorsanız, hassas bilgilerin (şifreler, anahtarlar) commit’lenmemesine dikkat edin. .gitignore dosyanıza wp-config.php ekleyin ve bunun yerine wp-config-sample.php ile environment variable tabanlı bir yapıya geçin:

# Environment variable'dan değer okuma örneği
wp config set DB_PASSWORD "$(grep DB_PASSWORD /etc/wordpress/secrets.conf | cut -d= -f2)" 

Ya da wp-config.php içinde doğrudan environment variable kullanımını wp config set ile ekleyebilirsiniz. Ancak bu durumda wp config set yerine dosyayı manuel düzenlemeniz daha pratik olur.

Sonuç

wp config komutu, WordPress yönetiminde verimliliği ciddi ölçüde artıran bir araçtır. Manuel nano veya vim ile düzenleme yapmak yerine bu komutları kullanmak hem hata riskini azaltır hem de otomasyon kapılarını açar. Özellikle birden fazla site yönetiyorsanız, toplu güncelleme betikleri yazıyorsanız ya da DevOps pipeline’larına WordPress konfigürasyonunu entegre etmek istiyorsanız wp config vazgeçilmez bir araç haline gelir.

Güvenlik açısından da değerlendirildiğinde, wp config shuffle-salts ile düzenli aralıklarla güvenlik anahtarlarınızı yenilemek, DISALLOW_FILE_EDIT ile tema ve eklenti editörünü kapatmak gibi önlemleri tek bir betikle tüm sunucularınıza uygulamak büyük kolaylık sağlar. Bu komutları kendi iş akışınıza entegre etmek için küçük bir yatırım yaptığınızda, uzun vadede kazanacağınız zaman ve güvenlik oldukça değerlidir.

Bir yanıt yazın

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