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 verirwp super-admin remove: Super admin yetkisini geri alırwp 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.
