WP-CLI Alias ile Uzak Sunucu Yönetimi
Birden fazla WordPress sitesi yönetiyorsanız ve her seferinde SSH ile sunucuya bağlanıp komut çalıştırmaktan bıktıysanız, WP-CLI alias özelliği tam olarak aradığınız şey. Yerel makinenizden tek bir komutla uzak sunucudaki WordPress kurulumuna müdahale edebilir, güncelleme yapabilir, veritabanını yönetebilir ve daha fazlasını yapabilirsiniz. Bu yazıda WP-CLI alias sistemini A’dan Z’ye inceleyeceğiz.
WP-CLI Alias Nedir?
WP-CLI alias, temelde bir kısayol tanımıdır. Normalde uzak bir sunucuda WP-CLI komutu çalıştırmak istediğinizde şu adımları takip edersiniz: SSH bağlantısı kurarsınız, doğru dizine geçersiniz, komutu çalıştırırsınız, bağlantıyı kapatırsınız. Bu döngü günde onlarca kez tekrarlandığında ciddi bir zaman kaybına dönüşür.
Alias sistemi bu adımları tek bir konfigürasyon altında toplar. @production veya @staging gibi bir takma ad tanımlarsınız ve WP-CLI bu takma adı kullandığınızda arka planda SSH bağlantısını kurarak komutu uzak sunucuda çalıştırır. Siz sadece şunu yazarsınız:
wp @production plugin update --all
Bu kadar. SSH bağlantısı, dizin geçişi, komut çalıştırma, bağlantı kapatma – hepsi otomatik.
Alias Konfigürasyon Dosyası Yapısı
WP-CLI konfigürasyonu birkaç farklı yerde tanımlanabilir. Global konfigürasyon için ~/.wp-cli/config.yml dosyası kullanılır. Proje bazlı konfigürasyon için ise projenin kök dizininde wp-cli.yml veya wp-cli.local.yml dosyası oluşturulur.
Alias tanımları için en mantıklı yer genellikle global konfigürasyon dosyasıdır. Böylece hangi dizinde olursanız olun tanımlı alias’larınıza erişebilirsiniz.
Temel bir alias tanımı şu şekilde görünür:
# ~/.wp-cli/config.yml
@production:
ssh: [email protected]/var/www/example.com/public_html
@staging:
ssh: [email protected]/var/www/staging/public_html
@local:
path: /var/www/local-wordpress
Burada ssh parametresinin formatına dikkat edin: kullanici@sunucu/wordpress-dizini şeklinde. Bu tek satır WP-CLI’ye hem nereye bağlanacağını hem de hangi dizinde çalışacağını söyler.
SSH Anahtar Tabanlı Kimlik Doğrulama Zorunluluğu
Alias sisteminin sorunsuz çalışması için SSH anahtar tabanlı kimlik doğrulama şart. Her komut çalıştırdığınızda şifre girmek zorunda kalırsanız otomasyonun anlamı kalmaz. Eğer henüz SSH anahtarı oluşturmadıysanız:
# SSH anahtar çifti oluştur
ssh-keygen -t ed25519 -C "wpcli-management"
# Public anahtarı uzak sunucuya kopyala
ssh-copy-id [email protected]
# Bağlantıyı test et
ssh [email protected] "wp --info"
Bağlantı şifresiz çalışıyorsa alias kullanımına geçebilirsiniz.
Gerçek Dünya Senaryosu: Ajans Ortamı
Diyelim ki bir dijital ajans olarak 15 farklı müşterinin WordPress sitesini yönetiyorsunuz. Her müşterinin production, staging ve bazen de development ortamı var. Bu durumda config dosyanız şu şekle bürünür:
# ~/.wp-cli/config.yml
# Musteri A
@musteri-a-prod:
ssh: [email protected]/var/www/musteri-a/public_html
@musteri-a-staging:
ssh: [email protected]/var/www/musteri-a-staging/public_html
# Musteri B
@musteri-b-prod:
ssh: [email protected]:2222/home/musteriB/public_html
@musteri-b-staging:
ssh: [email protected]:2222/home/musteriB-staging/public_html
# Musteri C - Farkli SSH portu
@musteri-c-prod:
ssh: [email protected]:22222/var/www/html
# Yerel gelistirme
@local-musteri-a:
path: /home/user/projects/musteri-a
Dikkat ederseniz @musteri-b için SSH portu farklı (2222). WP-CLI bu durumu destekler; kullanici@sunucu:port/dizin formatını kullanmanız yeterli.
Artık herhangi bir müşterinin sitesine müdahale etmek için tek satır yeterli:
# Tüm müşterilerin production sitelerindeki eklentileri listele
wp @musteri-a-prod plugin list
wp @musteri-b-prod plugin list
# Belirli bir müşterinin staging ortamında güncelleme yap
wp @musteri-a-staging core update
wp @musteri-a-staging plugin update --all
wp @musteri-a-staging theme update --all
Alias Grupları ile Toplu İşlemler
Birden fazla siteyi aynı anda yönetmek için alias grupları tanımlayabilirsiniz. Bu özellik özellikle güvenlik güncellemelerini hızlıca uygulamak istediğinizde hayat kurtarıcı.
# ~/.wp-cli/config.yml
@musteri-a-prod:
ssh: [email protected]/var/www/musteri-a/public_html
@musteri-b-prod:
ssh: [email protected]/var/www/musteri-b/public_html
@musteri-c-prod:
ssh: [email protected]/var/www/musteri-c/public_html
# Grup tanımı
@all-production:
- @musteri-a-prod
- @musteri-b-prod
- @musteri-c-prod
Artık tek komutla tüm production sitelerinizi güncelleyebilirsiniz:
# Tüm production sitelerinde eklenti güncelleme
wp @all-production plugin update --all
# Tüm production sitelerinde WordPress core güncelleme
wp @all-production core update
# Tüm sitelerde önbellek temizleme
wp @all-production cache flush
WP-CLI gruba dahil her alias için sırayla komutu çalıştırır. Çıktıda hangi sitenin sonucu olduğu da belirtilir, böylece takip etmesi kolay olur.
SSH Konfigürasyonu ile Entegrasyon
Çok sayıda sunucu yönetiyorsanız ~/.ssh/config dosyasını da devreye sokabilirsiniz. Bu iki konfigürasyon dosyasını birlikte kullanmak yönetimi büyük ölçüde kolaylaştırır.
# ~/.ssh/config
Host server1
HostName 185.123.45.67
User deploy
Port 22
IdentityFile ~/.ssh/wpcli_key
ServerAliveInterval 60
Host server2
HostName server2.hosting.com
User deploy
Port 2222
IdentityFile ~/.ssh/wpcli_key
ServerAliveInterval 60
Host musteri-c
HostName musteri-c.com
User admin
Port 22222
IdentityFile ~/.ssh/wpcli_key_musteri_c
SSH config tanımladıktan sonra WP-CLI config’de sadece host adını kullanabilirsiniz:
# ~/.wp-cli/config.yml
@musteri-a-prod:
ssh: server1/var/www/musteri-a/public_html
@musteri-b-prod:
ssh: server2/var/www/musteri-b/public_html
@musteri-c-prod:
ssh: musteri-c/var/www/html
Bu yaklaşım çok daha temiz ve yönetilebilir bir yapı oluşturur.
Pratik Kullanım Senaryoları
Veritabanı Yedekleme ve Transfer
Staging’den production’a ya da production’dan lokale veritabanı aktarımı sık karşılaşılan bir senaryo. Alias’larla bu işlem oldukça basitleşir:
# Production veritabanını yerel makineye indir
wp @production db export - | wp @local db import -
# Staging veritabanını production'a yükle (dikkatli kullanın!)
wp @staging db export /tmp/staging-backup.sql
# Sonra production'da import et
wp @production db import /tmp/staging-backup.sql
# URL değişimi ile birlikte
wp @local search-replace 'https://example.com' 'http://localhost/example' --precise
Eklenti ve Tema Yönetimi
# Belirli bir eklentinin tüm ortamlardaki versiyonunu kontrol et
wp @production plugin get woocommerce --field=version
wp @staging plugin get woocommerce --field=version
wp @local plugin get woocommerce --field=version
# Sadece belirli bir eklentiyi güncelle
wp @production plugin update woocommerce
# Eklenti aktivasyon durumunu kontrol et
wp @production plugin list --status=inactive --format=csv
Kullanıcı Yönetimi
Müşteri production sitesine geçici erişim sağlamak gerektiğinde:
# Geçici admin kullanıcısı oluştur
wp @production user create gecici-admin [email protected] --role=administrator --user_pass=GucluSifre123!
# Belirli bir kullanıcının şifresini sıfırla
wp @production user update kullanici_adi --user_pass=YeniSifre456!
# Geçici kullanıcıyı sil
wp @production user delete gecici-admin --reassign=1
Performans ve Bakım İşlemleri
# Bakım modunu aç/kapat
wp @production maintenance-mode activate
wp @production maintenance-mode deactivate
# Önbellek yönetimi
wp @production cache flush
wp @production transient delete --expired
# Veritabanı optimizasyonu
wp @production db optimize
wp @production db repair
# Cron görevlerini yönet
wp @production cron event list
wp @production cron event run --due-now
Güvenlik Güncellemesi Acil Senaryosu
Gerçek bir senaryo düşünelim: WooCommerce’de kritik bir güvenlik açığı keşfedildi ve yönettiğiniz tüm siteleri hızla güncellemeniz gerekiyor. Normalde her siteye tek tek girmek saatler alabilir. Alias gruplarıyla:
#!/bin/bash
# emergency-update.sh
echo "=== Acil Guvenlik Guncellemesi Basliyor ==="
echo "Tarih: $(date)"
# Tüm sitelerde WooCommerce versiyonunu kontrol et
echo "--- Mevcut WooCommerce Versiyonlari ---"
wp @all-production plugin get woocommerce --field=version
# Güncelleme öncesi yedek al
echo "--- Veritabani Yedekleri Aliniyor ---"
wp @musteri-a-prod db export ~/backups/musteri-a-$(date +%Y%m%d-%H%M).sql
wp @musteri-b-prod db export ~/backups/musteri-b-$(date +%Y%m%d-%H%M).sql
wp @musteri-c-prod db export ~/backups/musteri-c-$(date +%Y%m%d-%H%M).sql
# Güncelleme
echo "--- Guncelleme Yapiliyor ---"
wp @all-production plugin update woocommerce
# Güncelleme sonrası versiyonu doğrula
echo "--- Guncelleme Sonrasi Versiyon Kontrolu ---"
wp @all-production plugin get woocommerce --field=version
echo "=== Islem Tamamlandi ==="
Bu script dakikalar içinde tüm sitelerinizi güvenli duruma getirir.
Ortam Bazlı Konfigürasyon
Proje bazlı wp-cli.yml dosyalarını da alias sistemiyle kullanabilirsiniz. Bu sayede her proje kendi ortam tanımlarını taşır:
# /var/www/myproject/wp-cli.yml
path: /var/www/myproject/public_html
@staging:
ssh: [email protected]/var/www/myproject-staging/public_html
@production:
ssh: [email protected]/var/www/myproject/public_html
# Varsayılan URL yeniden yazma ayarları
url: http://localhost/myproject
Bu yaklaşımın avantajı, projeyi klonlayan her geliştirici aynı alias tanımlarına sahip olur. Git reposuna dahil edebilirsiniz (şifre veya özel bilgi içermediği sürece).
Alias Listesi ve Debug
Tanımlı alias’larınızı listelemek için:
# Tüm alias'ları listele
wp cli alias list
# Belirli bir alias'ın detayını gör
wp cli alias get @production
# Alias ile komut çalıştırırken verbose mod
wp @production --debug plugin list
# SSH bağlantısını test et (gerçek komut çalıştırmadan)
wp @production cli info
Bir alias çalışmıyorsa ilk kontrol noktanız SSH bağlantısının düzgün kurulup kurulmadığı olmalı:
# Manuel SSH testi
ssh [email protected] "which wp && wp --info"
# WP-CLI'nin remote'da bulunup bulunmadığını kontrol et
ssh [email protected] "wp cli version"
Uzak sunucuda WP-CLI kurulu değilse ya da PATH’te yoksa alias çalışmaz. Sunucuda WP-CLI’nin /usr/local/bin/wp gibi standart bir konumda olduğundan emin olun.
WP-CLI Alias ile CI/CD Entegrasyonu
GitHub Actions veya GitLab CI ile alias’ları kullanmak mümkün. Bu sayede deployment pipeline’ınıza WordPress yönetim adımları ekleyebilirsiniz:
# .github/workflows/deploy.yml
name: Deploy ve Guncelle
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: SSH anahtarini ayarla
run: |
mkdir -p ~/.ssh
echo "${{ secrets.DEPLOY_KEY }}" > ~/.ssh/deploy_key
chmod 600 ~/.ssh/deploy_key
ssh-keyscan -H ${{ secrets.SERVER_HOST }} >> ~/.ssh/known_hosts
- name: WP-CLI config olustur
run: |
mkdir -p ~/.wp-cli
cat > ~/.wp-cli/config.yml << EOF
@production:
ssh: deploy@${{ secrets.SERVER_HOST }}/var/www/html
EOF
- name: WP-CLI yukle
run: |
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
- name: Production guncelleme
run: |
wp @production plugin update --all
wp @production core update
wp @production cache flush
Yaygın Hatalar ve Çözümleri
“Error: There is no SSH command available” hatası: WP-CLI’nin SSH özelliği için proc_open PHP fonksiyonu aktif olmalı. Ayrıca yerel makinenizde SSH client kurulu olmalı.
Uzak sunucuda WP-CLI bulunamıyor: wp-binary parametresi ile WP-CLI’nin tam yolunu belirtebilirsiniz:
@production:
ssh: [email protected]/var/www/html
wp-binary: /usr/local/bin/wp
Zaman aşımı sorunları: Uzun süren işlemler için SSH timeout değerini artırın. ~/.ssh/config dosyasına ServerAliveInterval 60 ve ServerAliveCountMax 10 ekleyin.
Dizin izin sorunları: Deploy kullanıcısının WordPress dizinine okuma/yazma yetkisi olduğundan emin olun:
# Dizin sahibini kontrol et
ssh [email protected] "ls -la /var/www/html"
# Gerekiyorsa izin ver
ssh [email protected] "chown -R deploy:deploy /var/www/html"
Alias ile Multisite Yönetimi
WordPress Multisite kurulumlarında alias’larla birlikte --url parametresini kullanabilirsiniz:
# Ana site
wp @production site list
# Belirli bir alt siteye işlem uygula
wp @production --url=subsite.example.com plugin activate akismet
# Tüm alt sitelerde önbellek temizle
wp @production site list --field=url | xargs -I {} wp @production --url={} cache flush
Sonuç
WP-CLI alias sistemi, çok sunuculu WordPress yönetimini kökten dönüştüren bir özellik. Kurulumu on dakika alan bu yapı, günlük çalışma akışınızda size saatler kazandırır. Özellikle ajans ortamlarında veya çok sayıda WordPress kurulumu yönetenler için bu özelliği kullanmamak için hiçbir neden yok.
Başlangıç noktası olarak basit tutun: iki veya üç ortam için alias tanımlayın, birkaç gün kullanın ve iş akışınıza uygun özelleştirmeleri zamanla ekleyin. Alias grupları, SSH config entegrasyonu ve script tabanlı toplu işlemler başlangıçta karmaşık görünebilir ama pratik yaptıkça her şey yerine oturuyor.
Bir sunucu yöneticisi olarak şunu söyleyebilirim: Tekrarlayan manuel işlemleri ne kadar otomatize ederseniz, o kadar az hata yaparsınız ve gerçekten önemli işlere o kadar fazla vakit ayırabilirsiniz. WP-CLI alias bu otomasyonun en temiz ve en az riskli formlarından biri.
