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.

Bir yanıt yazın

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