WP CLI ile wp super-admin Komutu Kullanarak Ağ Yöneticisi Atama

WordPress multisite kurulumlarında ağ yöneticisi atama işlemi, birçok sysadmin’in terminal üzerinden hızlıca halletmek istediği ama tam sözdizimini her seferinde araştırmak zorunda kaldığı konulardan biri. WP-CLI’ın wp super-admin komutu bu işi dakikalar içinde çözüyor ve üstelik birden fazla kullanıcıyı aynı anda yönetme imkanı sunuyor. Bu yazıda konuyu gerçek dünya senaryolarıyla ele alacağız.

WordPress Multisite ve Super Admin Kavramı

WordPress’in tekil kurulumlarında “Administrator” rolü en yüksek yetki seviyesini temsil eder. Ancak bir Multisite (çok siteli) ağ kurduğunuzda işler biraz değişir. Ağdaki her site kendi yöneticisine sahip olabilir, bu yöneticiler kendi sitelerini yönetir ama ağın tamamına erişemezler.

Super Admin (Ağ Yöneticisi) ise bu hiyerarşinin en tepesinde yer alır. Bir super admin:

  • Ağdaki tüm siteleri yönetebilir
  • Yeni site ekleyip silebilir
  • Ağ genelinde eklenti ve tema yükleyebilir
  • Tüm kullanıcı hesaplarını yönetebilir
  • Ağ ayarlarını değiştirebilir

Bu yetki seviyesi, özellikle ajansların müşterilerine ait çok sayıda WordPress sitesini tek bir multisite üzerinde yönettiği senaryolarda kritik önem taşır.

WP-CLI Olmadan Hayat

Eğer WP-CLI kullanmadan bir kullanıcıya super admin yetkisi vermek isteseydiniz, WordPress admin paneline girmeniz, “Ağım > Kullanıcılar” bölümüne gitmeniz ve oradan düzenleme yapmanız gerekirdi. Toplu işlemlerde bu yöntem hem zaman alıcı hem de hata yapmaya açık bir süreç haline gelir.

Üstelik bazı durumlarda admin paneline erişim mümkün olmayabilir: site çökmüş olabilir, eklenti çakışması var olabilir ya da sadece bir betik içinden otomatik olarak bu işlemi yapmanız gerekiyor olabilir. İşte tam bu noktada WP-CLI devreye girer.

Temel Kullanım: wp super-admin

WP-CLI’ın wp super-admin komutu üç temel alt komutla gelir:

  • wp super-admin add: Kullanıcıya super admin yetkisi verir
  • wp super-admin remove: Super admin yetkisini geri alır
  • wp super-admin list: Mevcut tüm super adminleri listeler

Basit Super Admin Atama

En temel kullanım şekliyle bir kullanıcıya super admin yetkisi vermek:

wp super-admin add ahmet

Burada ahmet kullanıcı adıdır. Komut başarıyla çalışırsa terminal size şunu gösterir:

Success: Granted super-admin capabilities.

Kullanıcı adı yerine e-posta adresiyle de çalışabilirsiniz, ancak bu durumda önce kullanıcı ID’sini bulup kullanmanız daha güvenli olur.

Kullanıcı ID ile Çalışmak

Büyük sistemlerde kullanıcı adları çakışabilir ya da tam olarak hatırlanmayabilir. Kullanıcı ID’siyle işlem yapmak daha güvenlidir:

# Önce kullanıcının ID'sini bulalım
wp user get ahmet --field=ID

# Çıktı: 42

# Şimdi bu ID ile super admin yapalım
wp super-admin add $(wp user get ahmet --field=ID)

Bu yaklaşım özellikle otomasyon betiklerinde çok işe yarar çünkü kullanıcı adının değişmiş olma ihtimaline karşı her zaman ID’ye geri dönebilirsiniz.

Birden Fazla Kullanıcıya Aynı Anda Yetki Verme

WP-CLI’ın en güzel özelliklerinden biri toplu işlem yapabilmesidir. Tek komutla birden fazla kullanıcıyı super admin yapabilirsiniz:

wp super-admin add ahmet mehmet zeynep fatma

Bu komut dört kullanıcıyı da tek seferde ağ yöneticisi yapacaktır. Özellikle yeni bir multisite kurulumunu devreye alırken ya da ekip üyelerini toplu olarak yetkilendirmeniz gerektiğinde bu özellik büyük zaman tasarrufu sağlar.

Super Admin Listesini Görüntüleme

Sisteminizde kaç tane super admin var, kimler bu yetkiye sahip? Bunu anlamak için:

wp super-admin list

Çıktı şöyle görünür:

admin
ahmet
mehmet

Eğer bu listeyi başka bir betik içinde işleyecekseniz, çıktı formatını değiştirebilirsiniz:

# JSON formatında almak için
wp super-admin list --format=json

# CSV formatında
wp super-admin list --format=csv

Kaç tane super admin olduğunu saymak için:

wp super-admin list | wc -l

Super Admin Yetkisini Geri Alma

Bir çalışan şirketten ayrıldı, bir müşterinin yetkisini kısıtlamanız gerekiyor ya da yanlışlıkla birini super admin yaptınız. remove alt komutu bu durumları halleder:

wp super-admin remove ahmet

Başarılı olursa:

Success: Revoked super-admin capabilities.

Yine toplu işlem yapabilirsiniz:

wp super-admin remove ahmet mehmet

Gerçek Dünya Senaryosu 1: Ajans Müşteri Yönetimi

Diyelim ki bir dijital ajansın sistem yöneticisisiniz. Müşterilerinize ait 15 farklı WordPress sitesini tek bir multisite üzerinde çalıştırıyorsunuz. Yeni bir müşteri eklendi ve bu müşterinin teknik ekibinden iki kişinin kendi sitelerine tam erişim yerine genel ağa erişimi olmamalı, sadece kendi sitelerini yönetmesi gerekiyor.

Ama öte yandan kendi ajans ekibinizden bir kıdemli geliştirici işe başladı ve ona tam ağ yönetici yetkisi vermeniz lazım.

# Önce yeni geliştiricinin hesabını oluşturalım
wp user create kadir [email protected] 
  --role=administrator 
  --first_name=Kadir 
  --last_name=Yilmaz 
  --send-email

# Ardından super admin yapalım
wp super-admin add kadir

# Doğrulama yapalım
wp super-admin list | grep kadir

Bu üç adım, yeni bir ekip üyesini sisteme dahil etmekten tutun yetkisini doğrulamaya kadar her şeyi kapsar.

Gerçek Dünya Senaryosu 2: Otomatik Yedek ve Yetki Denetimi

Bir sistem yöneticisi olarak zaman zaman “bu sistemde kimin ne yetkisi var?” sorusunu yanıtlamanız gerekebilir. Özellikle güvenlik denetimleri sırasında bu bilgi kritiktir. Aşağıdaki betik super admin listesini alıp zaman damgalı bir dosyaya kaydeder:

#!/bin/bash
# super_admin_audit.sh
# Super admin listesini denetim dosyasına kaydeder

SITE_PATH="/var/www/html/wordpress"
AUDIT_FILE="/var/log/wp_super_admins_$(date +%Y%m%d).txt"

echo "=== Super Admin Denetimi ===" > $AUDIT_FILE
echo "Tarih: $(date)" >> $AUDIT_FILE
echo "Site: $SITE_PATH" >> $AUDIT_FILE
echo "---" >> $AUDIT_FILE

cd $SITE_PATH
wp super-admin list --allow-root >> $AUDIT_FILE

echo "Denetim dosyasi olusturuldu: $AUDIT_FILE"
cat $AUDIT_FILE

Bu betiği cron job olarak her hafta çalıştırabilir ve çıktıyı bir izleme sistemine gönderebilirsiniz.

Gerçek Dünya Senaryosu 3: Toplu Kullanıcı Aktarımı

Eski bir multisite sisteminden yeni bir sisteme geçiş yapıyorsunuz ve eski sistemdeki super admin listesini yeni sisteme aktarmanız gerekiyor. Bu senaryo büyük site migrasyonlarında sıkça karşılaşılan bir durum:

#!/bin/bash
# migrate_super_admins.sh
# Kaynak siteden super admin listesini alıp hedef siteye uygular

SOURCE_PATH="/var/www/old_site"
TARGET_PATH="/var/www/new_site"

echo "Kaynak sistemdeki super admin listesi aliniyor..."

# Kaynak sistemden super admin listesi al
SUPER_ADMINS=$(cd $SOURCE_PATH && wp super-admin list --allow-root)

echo "Bulunan super adminler:"
echo "$SUPER_ADMINS"

# Her bir super admin için hedef sistemde işlem yap
for username in $SUPER_ADMINS; do
    echo "Isleniyor: $username"
    
    # Kullanıcı hedef sistemde var mı kontrol et
    USER_EXISTS=$(cd $TARGET_PATH && wp user get $username --field=ID --allow-root 2>/dev/null)
    
    if [ -n "$USER_EXISTS" ]; then
        cd $TARGET_PATH && wp super-admin add $username --allow-root
        echo "$username icin super admin yetkisi verildi"
    else
        echo "UYARI: $username hedef sistemde bulunamadi, atlaniyor"
    fi
done

echo "Aktarim tamamlandi."

Path Belirtme ve Farklı Kurulumlar

WP-CLI komutlarını her zaman WordPress kurulum dizininden çalıştırmanız gerekmiyor. --path parametresiyle farklı dizinlerdeki kurulumları yönetebilirsiniz:

wp super-admin add ahmet --path=/var/www/html/wordpress

# Veya URL bazlı çalışmak için
wp super-admin add ahmet --url=https://example.com

Özellikle birden fazla WordPress kurulumunu aynı sunucudan yönetiyorsanız --path parametresi hayat kurtarır:

# Birden fazla WordPress sitesini yönetmek
for site_path in /var/www/site1 /var/www/site2 /var/www/site3; do
    echo "=== $site_path ==="
    wp super-admin list --path=$site_path --allow-root
    echo ""
done

SSH Üzerinden Uzak Sunucu Yönetimi

WP-CLI’ın SSH desteği sayesinde uzak sunuculardaki WordPress kurulumlarını yerel terminalinizden yönetebilirsiniz. Bunun için ~/.ssh/config dosyanız düzgün yapılandırılmış olmalı:

# Uzak sunucudaki WordPress'e super admin ekle
wp super-admin add ahmet --ssh=sunucu.example.com

# Belirli bir path ile
wp super-admin add ahmet --ssh=sunucu.example.com:/var/www/html

# SSH konfigürasyon dosyasındaki alias ile
wp super-admin add ahmet --ssh=production-server

Bu özellik özellikle staging ve production ortamları arasında yönetim yaparken çok işe yarar. Sunucuya ayrıca bağlanmak zorunda kalmadan işlemlerinizi halledebilirsiniz.

Hata Yönetimi ve Sık Karşılaşılan Sorunlar

“Not a multisite installation” Hatası

Super admin komutları yalnızca multisite kurulumlarında çalışır. Eğer tekil bir WordPress kurulumunda bu komutu çalıştırmaya çalışırsanız şu hatayı alırsınız:

Error: This is not a multisite installation.

Bu durumda önce wp-config.php dosyanızda multisite’ın aktif olup olmadığını kontrol edin:

wp config get MULTISITE
# Çıktı: true olmalı

wp config get WP_ALLOW_MULTISITE
# Bu da true olmalı

Kullanıcı Bulunamadı Hatası

wp super-admin add olmayan_kullanici
# Error: User 'olmayan_kullanici' not found.

Bu durumda kullanıcının gerçekten var olup olmadığını kontrol edin:

wp user list --fields=user_login,user_email,display_name | grep "aranacak_isim"

Zaten Super Admin Olan Kullanıcı

Eğer bir kullanıcı zaten super admin ise WP-CLI bunu size bildirir ama işlem başarısız sayılmaz:

wp super-admin add zaten_super_admin
# Success: User 'zaten_super_admin' already has super-admin capabilities.

Bu davranış betikler yazarken önemlidir çünkü idempotent (tekrar çalıştırılabilir) betikler yazmanıza imkan tanır.

WP-CLI Konfigürasyon Dosyası ile Çalışmak

Eğer sık sık aynı WordPress kurulumu üzerinde çalışıyorsanız, proje dizinine bir wp-cli.yml dosyası ekleyerek her seferinde parametreleri tekrar yazma zahmetinden kurtulabilirsiniz:

# wp-cli.yml dosyası oluştur
cat > /var/www/html/wordpress/wp-cli.yml << EOF
path: /var/www/html/wordpress
url: https://example.com
user: admin
EOF

Artık bu dizinde çalışırken --path ve --url parametrelerini tekrar yazmanıza gerek kalmaz:

cd /var/www/html/wordpress
wp super-admin list
wp super-admin add yeni_kullanici

Güvenlik Tavsiyeleri

Super admin yönetimi güvenlik açısından son derece hassas bir alan. Bu konuda dikkat etmeniz gereken bazı pratik noktalar var:

  • Minimum yetki prensibi: Gerçekten ağ genelinde yönetim yapması gerekmeyen kullanıcılara super admin vermeyin. Site düzeyinde administrator rolü çoğu durumda yeterlidir.
  • Düzenli denetim: Ayda bir kez super admin listesini gözden geçirin. İşten ayrılan, rolü değişen ya da artık bu yetkiye ihtiyacı olmayan kullanıcıları tespit edin.
  • Değişiklik kaydı: Sisteminize yeni super admin eklerken ya da çıkarırken bu değişiklikleri bir log dosyasına yazın. Kim ne zaman yetkilendirildi ya da yetkisi alındı, ilerleyen dönemde bu bilgiye ihtiyaç duyabilirsiniz.
  • WP-CLI’a erişimi kısıtlayın: Sunucu üzerinde WP-CLI’ı sadece yetkili sistem kullanıcıları çalıştırabilmeli. Özellikle shared hosting ortamlarında bu önemlidir.
# Super admin değişikliklerini otomatik loglamak için basit bir wrapper fonksiyon
wp_super_admin_add() {
    local username=$1
    local logfile="/var/log/wp_admin_changes.log"
    
    wp super-admin add $username --path=/var/www/html/wordpress
    
    if [ $? -eq 0 ]; then
        echo "$(date): Super admin EKLENDI - Kullanici: $username - Islem yapan: $(whoami)" >> $logfile
    else
        echo "$(date): Super admin EKLEME HATASI - Kullanici: $username - Islem yapan: $(whoami)" >> $logfile
    fi
}

Multisite URL Yapısına Dikkat

WordPress multisite kurulumlarında alt domain ya da alt dizin yapısı kullanılabilir. WP-CLI komutlarını çalıştırırken hangi URL’i hedeflediğinize dikkat etmelisiniz çünkü bazı komutlar URL bağlamında çalışır:

# Ana ağ üzerinde işlem yapmak için
wp super-admin list --url=https://example.com

# Alt site için değil, her zaman ana domain kullanılmalı
# Bu YANLIS kullanim:
# wp super-admin list --url=https://subsite.example.com

Super admin komutları ağ düzeyinde çalıştığı için her zaman ana network URL’ini kullanın.

Pratik Bir Deployment Betiği

Yeni bir multisite kurulumu ayağa kaldırdığınızda ve standart sürecinizde belirli kullanıcıları her zaman super admin yapmanız gerektiğinde, bunu bir deployment betiğine dahil edebilirsiniz:

#!/bin/bash
# setup_multisite_admins.sh
# Yeni multisite kurulumu sonrası standart admin atamaları

WP_PATH="/var/www/html/wordpress"
SUPER_ADMINS=("teknik_yonetici" "sistem_admini" "proje_lead")

echo "Multisite admin atamalari basliyor..."

for admin_user in "${SUPER_ADMINS[@]}"; do
    # Kullanıcı var mı?
    USER_ID=$(wp user get $admin_user 
        --field=ID 
        --path=$WP_PATH 
        --allow-root 2>/dev/null)
    
    if [ -z "$USER_ID" ]; then
        echo "UYARI: $admin_user kullanicisi bulunamadi, atlaniyor."
        continue
    fi
    
    # Super admin yap
    wp super-admin add $admin_user 
        --path=$WP_PATH 
        --allow-root
    
    echo "$admin_user super admin yapildi (ID: $USER_ID)"
done

# Sonucu doğrula
echo ""
echo "Mevcut super admin listesi:"
wp super-admin list --path=$WP_PATH --allow-root

echo "Islem tamamlandi."

Sonuç

wp super-admin komutu görünürde basit bir araç gibi görünse de doğru şekilde kullanıldığında WordPress multisite yönetiminde büyük fark yaratır. Özellikle birden fazla site içeren büyük ağlarda, düzenli kullanıcı denetimleri ve otomatik deployment süreçlerinde bu komutun gücünden faydalanmak sizi hem zamandan hem de potansiyel hatalardan kurtarır.

En önemli nokta, bu yetkiyi gerçekten ihtiyaç duyan kullanıcılara verdiğinizden emin olmak ve düzenli aralıklarla super admin listesini gözden geçirip güncel tutmak. Güvenlik her zaman ilk öncelik olmalı ve minimum yetki prensibi multisite yönetiminde de geçerliliğini korur.

WP-CLI’ın bu komutunu betiklerinize entegre ettiğinizde, manuel panel üzerinden uğraşmanız gereken işlerin büyük çoğunluğunu otomatize edebilirsiniz. Bu da hem iş yükünüzü azaltır hem de insan hatası kaynaklı yanlış yapılandırmaların önüne geçer.

Bir yanıt yazın

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