WP-CLI Config Komutu ve İşlemleri
Komut Satırı Aracılığı İle WordPress Yönetimi
WP-ClI ile ilgili değinmek istediğim son birkaç ana konu kaldı. wp config
bunlardan biri ve aslında doğrudan çok kullanılmasa da ihtiyaçlarımıza göre önceden yapılandırıldığında WP-CLI kullanım sürecini oldukça pratikleştirmekte.
Bu yazıda da tam olarak değineceğim konu wp config
yapılandırma süreci ve belli başlı bazı komutlar olacak ve özellikle YAML içeriğine odaklanacağım.
WP-CLI Konfigürasyon Dosyaları
WP-CLI ile uzak bir sunucuda ya da sunuculardaki WordPress web site(leri)mize hızlı ve güvenli bir şekilde nasıl erişim sağlayabileceğimizden daha önce bahsetmiştim. İlgili işlem aslında sunucu içeriğindeki erişimleri de kapsamakta. Örneğin, DigitalOcean bünyesinde aynı droplet içerisinde birden fazla WordPress kurulumu kullanmaktayım. Doğru bir yapılandırma ile tanımladığım kısa adlarla hızlı bir şekilde tüm işlemlerimi hem sunucu içinde hem de diğer sunuculardaki kurulumlar üzerinden gerçekleştirebilmekteyim. Nasıl mı? Hemen bakalım.
WP-CLI YAML Dosyaları
WP-CLI birkaç konfigürasyon dosyası (tanımlılar ise) üzerinden hızlı bir şekilde kontrol tanımlanan kurallar dahilinde özelleştirilebilmekte. Bu özelleştirmeler çeşitli sınırlandırmalar, kısa yollar, bağlantılar ve daha pek çok içerik ile sağlanabilmekte. Öncelikle bu dosyalara ve bulunabilecekleri konumlara bir bakalım.
wp-cli.local.yml
WP-CLI project config
. Aktif olarak bulunulan klasör veya bir üst dizinde yer alabilir.local
burada bir değişken tanımı alsında. Farklı kurulumlar için farklı tanımlar kullanılabilir; örneğinwp-cli.production.yml
wp-cli.yml
WP-CLI project config
. Aktif olarak bulunulan klasör veya bir üst dizinde yer alabilir.~/.wp-cli/config.yml
WP-CLI global config
. İlgili diğer YAML dosyalarından farklı olarak~/.wp-cli
içeriğinde yer alır. Ancak bu yolWP_CLI_CONFIG_PATH
ile yeniden tanımlanabilir.
Yukarıda açıklamasıyla birlikte yer alan wp-cli.yml
dosyasını daha önce uzak sunucudaki WordPress sitelerimize kısa adlar tanımlarken kullanmıştık ve içeriğini şu şekilde hazırlamıştık:
@all
@per:
ssh: kullanici-adi@ip-veya-alanadi/public_html/directory/
@dev:
ssh: kullanici-adi@ip-veya-alanadi2
@both:
- @per
- @dev
Bu içerik sayesinde tanımladığımız @per
ve @dev
kısa adları üzerinden işaret ettiğimiz adreslere hızlı bir şekilde SSH bağlantısı sağlayabilmekteydik.
wp @dev [komut]
Elbette bu dosyalar içeriğinde daha pek çok tanımlama yapılabilmekte1. Ben bu yazıda örneklerde çeşitlilik olması adına ~/.wp-cli/config.yml
dosyasını oluşturup işlemlerimi bu dosya aracılığıyla gerçekleştireceğim. İlk olarak wp cli info
komutu ile WP-CLI global config
içeriğine bir bakalım.
wp cli info
Komut uygulandığında aşağıdakine benzer bir içerik dönecektir.
OS: Linux 3.10.0-714.10.2.lve1.5.19.3.el7.x86_64 #1 SMP Tue Aug 7 21:33:29 EDT 2018 x86_64
Shell: /bin/bash
PHP binary: /opt/alt/php71/usr/bin/php
PHP version: 7.1.25
php.ini used: /opt/alt/php71/etc/php.ini
WP-CLI root dir: phar://wp-cli.phar/vendor/wp-cli/wp-cli
WP-CLI vendor dir: phar://wp-cli.phar/vendor
WP_CLI phar path: /home/\[kullanici-adi\]/.wp-cli
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 2.1.0
Eğer WP-CLI global config
yukarıdaki örnekteki gibi boş dönmüş ise bash env olarak WP_CLI_CONFIG_PATH
tanımlaması yapmamız gerekir.
Eğer Oh My Zsh kullanıyorsanız .bashrc
ifadelerini .zshrc
şeklinde güncellemelisiniz.
echo "WP_CLI_CONFIG_PATH='/home/[kullanici-adi]/.wp-cli/config.yml'" >> ~/.bashrc && source ~/.bashrc && wp cli info
config.yml
oluşturalım ve sunucuda yer alan WordPress kurulumları için kısa adları ekleyelim. Komutun uygulanmasının ardından WP-CLI global config
içeriğinin /home/[kulanici-adi]/.wp-cli/config.yml
şeklinde değer aldığını görebilirsiniz. Şimdi ilgili dosyamızı oluşturalım.
nano ~/.wp-cli/config.yml
İçeriğimiz de şu şekilde olsun:
path: /www/wp0/
url: https://ornekwebsitesi.com
@all
@wp1:
path: /www/wp1/
@wp2:
path: /www/wp2/
inherit: wp1.yml
@wp3:
ssh: kullanici-adi@ip-veya-alanadi1
@wp4:
ssh: kullanici-adi@ip-veya-alanadi2
path: /www/wp4/
@wp5:
ssh: kullanici-adi@ip-veya-alanadi3
path: /www/wp5/
inherit: yc.yml
@clients:
- @wp2
- @wp5
Önceki örnekle karşılaştırdığımızda benzer tanımlamaların yanı sıra farklılıklarda var, değil mi? İlk farklılık herhangi bir adres barındırmayan global tanımlar. İlk satırlarda yer alan path
ve url
herhangi bir adres işaret etmediğim durumda hangi WordPress kurulumu üzerinde işlem yapılacağını göstermekte. Kimi zaman --path
hatası alabilirsiniz.
Error: This does not seem to be a WordPress installation.
Pass --path=`path/to/wordpress` or run `wp core download`.
Bu hatanın bulunulan wp
komutunun uygulandığı dizinde bir WordPress kurulumunun yer almıyor oluşudur. Normalde bu hatayı aldığımız zaman aşağıdaki örnekteki gibi wp
komutumuza ayrıca --path
ile ilgili kurulumun bulunduğu dizin bilgisini ekleriz.
wp plugin list --path=/www/wp0/
Elbette config.yml
sayesinde her defasında bu tanımlamayı yapmak zorunda kalmayız. Bir diğer farklılık @wp1
ve @wp2
gibi path
içerikleri barındıran tanımlamalar. Yazının giriş bölümünde de belirttiğim gibi, YAML içeriğinde sadece farklı sunucu erişimleri tanımlamak zorunda değiliz. Yukarıdaki örnekte de görebileceğiniz üzere aktif barındırma alanı da dahil pek çok alana erişimler tanımlayabilmekteyiz. @wp4
SSH bağlantısının yanı sıra ilgili sunucuda birden fazla WordPress var ise hangisine erişilmesi gerektiğini de göstermekte. Bu tanımlama elbette SSH bağlantısı sonuna dizin bilgisi eklenerek de yapılabilirdi. Son farklılık ise @wp2
, @wp4
, @wp5
gibi kendi konfigürasyon tanımlamalarına sahip kısa adlar. Evet, bazı erişimler için özelleştirilmiş alt konfigürasyonlar kullanabilmekteyiz. Unutmadan, ilgili konfigürasyon dosyalarına yeni ad tanımlamaları yaptığımızda ilgili tanımlamayı rewrite flush
ile işlemeliyiz. Örneğin @yeni-site
şeklinde yeni bir kısa ad tanımladık, o halde şu komutu uygulamalıyız.
wp @yeni-site rewrite flush
İlgili komutu uyguladıktan sonra eğer kısa ad içeriğinde bir sorun yoksa (kısa adın yanlış yazımı, ilgili WordPress dizininin doğruluğu vb.) bir doğrulama mesajı alırız.
Success: Rewrite rules flushed.
Bu doğrulama mesajı yerine eğer yukarıda da bahsi geçen --path
hatasını almışsak WordPress yolunu kontrol etmemiz gerekir. Fakat aşağıdaki gibi bir alias hatası alırsak bu durumda da YAML içeriğine eklediğimiz kısa adın doğruluğuna bakarız. İlgili tanımlama konfigürasyon dosyasına işlenmemiş ya da bir yazım hatası olabilir.
Error: Alias '@yeni-site' not found.
Şimdiye kadar her şey yolunda! O halde ilgili konfigürasyon dosyamızın içeriğini biraz daha genişletelim ve sınırlamalar ekleyelim. Örneğin, global olarak bazı komutların kullanımını engelleyelim.
disabled_commands:
- db drop
- plugin install
- plugin list
- user create
Bu satırları config.yml
dosyasında, global tanımlamalar yaptığımız alana eklediğimizde ilgili konfigürasyon dosyasında tanımlı kısa adlar üzerinden tanımlanan kısıtlamalar işleme alınacaktır. Son durumda dosyamız aşağı yukarı şöyle olacaktır:
path: /www/wp0/
url: https://ornekwebsitesi.com
disabled_commands:
- db drop
- plugin install
- plugin list
- user create
@all
@wp1:
path: /www/wp1/
@wp2:
path: /www/wp2/
inherit: wp1.yml
@wp3:
ssh: kullanici-adi@ip-veya-alanadi1
@wp4:
ssh: kullanici-adi@ip-veya-alanadi2
path: /www/wp4/
@wp5:
ssh: kullanici-adi@ip-veya-alanadi3
path: /www/wp5/
inherit: yc.yml
@clients:
- @wp2
- @wp5
İlgili komut sınırlandırmalarını test etmek amacıyla @wp2
için eklentileri listeleme komutunu girelim.
wp @wp2 plugin list
Komutu uyguladığımızda şu dönüşü almamız gerekir:
Error: The 'plugin list' command has been disabled from the config file.
Global tanımlamaların yanı sıra bu gibi sınırlandırmaları inherit
ile ilgili WordPress kurulumları için özelleştirebiliriz. Bu aşamaya kadar her şey yolundadır diye tahmin ediyorum. Bu arada, tanımlanabilecek yığınla parametre bulunmakta. Örnek olarak Feature: Run a WP-CLI command dosyasını inceleyebilirsiniz2. Ancak, WP-CLI > Config sayfası3 daha ileri seviye ihtiyaçlar doğrultusunda4 şekillendikleri için bu yazı bağlamında değinmeyeceğim. wp config
komutu öncesinde, son olarak değineceğim konfigürasyon parametresi config create
. Hemen bir örnek oluşturalım.
user: admin
config create:
dbuser: root
dbpass:
extra-php: |
define( 'WP_DEBUG', true );
define( 'WP_POST_REVISIONS', 3 );
Bu tanımlamayı config.yml
dosyamıza eklediğimizde, her uygulanan wp config
işleminde burada tanımlanan tanımlar işleme alınır. Son durumda config.yml
dosyamızın içeriği şöyle oldu:
path: /www/wp0/
url: https://ornekwebsitesi.com
user: admin
disabled_commands:
- db drop
- plugin install
- plugin list
- user create
config create:
dbuser: root
dbpass:
extra-php: |
define( 'WP_DEBUG', true );
define( 'WP_POST_REVISIONS', 3 );
@all
@wp1:
path: /www/wp1/
@wp2:
path: /www/wp2/
inherit: wp1.yml
@wp3:
ssh: kullanici-adi@ip-veya-alanadi1
@wp4:
ssh: kullanici-adi@ip-veya-alanadi2
path: /www/wp4/
@wp5:
ssh: kullanici-adi@ip-veya-alanadi3
path: /www/wp5/
inherit: yc.yml
@clients:
- @wp2
- @wp5
Evet, ayar dosyalarıyla ilgili temel olarak bahsedebileceklerim şimdilik bu kadar. İlerleyen zaman içerisinde çeşitli ihtiyaçlar doğrultusunda eklemeler yapmaya devam edeceğim. Gelelim wp config
komutuna.
WP Config Komutu
wp config
komutu temel olarak wp-config.php
dosyasından sorumludur ve bu dosyayı oluşturabilir ve okuyabilir. Yukarıda konfigürasyon tanımlamaları esnasında config create
ile bu komut ile ilişkili tanımlamlalar yapmıştık. Komutun kendisini bu tanımlamalarla birlikte config dosyasını oluşturulması, düzenlenmesi, silinmesi, içeriğinin okunması, tanımlamalar eklenmesi gibi amaçlarla kullanabilmekteyiz5. Örneğin, wp core download
sonrasında wp core install ile
kullanıcı detaylarını gireriz.
wp core install --url=[alan-adi] --title="[web-sitesi-basligi]" --admin_user=[kullanici-adi] --admin_password=[kullanici-sifresi] --admin_email="[kullanici-e-posta-adresi]"
wp config
ise bu adıların öncesinde veritabanı başta olmak üzere web sitesinin ayarlarını yapma imkanı sunar. Eğer administrator
oluşturulmadan wp config
komutunu uygularsak hata olarak install işleminin tamamlanması gerektiği mesajını alırız. install
işlemi ardından ise kullanım bilgilendirmesi dönecektir.
usage: wp config create --dbname=<dbname> --dbuser=<dbuser> [--dbpass=<dbpass>] [--dbhost=<dbhost>] [--dbprefix=<dbprefix>] [--dbcharset=<dbcharset>] [--dbcollate=<dbcollate>] [--locale=<locale>] [--extra-php] [--skip-salts] [--skip-check] [--force]
or: wp config delete <name> [--type=<type>]
or: wp config edit
or: wp config get <name> [--type=<type>] [--format=<format>]
or: wp config has <name> [--type=<type>]
or: wp config list [<filter>...] [--fields=<fields>] [--format=<format>] [--strict]
or: wp config path
or: wp config set <name> <value> [--add] [--raw] [--anchor=<anchor>] [--placement=<placement>] [--separator=<separator>] [--type=<type>]
or: wp config shuffle-salts
Örneğin wp-config.php
içeriğini görüntüleyelim.
wp config edit
Komutu uygulamamızın ardından ön tanımlı metin editörü (çoğu durumda nano
veya vim
) ile wp-config.php
dosyasının içeriği karşımıza çıkacaktır. Editörü kendiniz belirlemek isterseniz ilgili komut satırını EDITOR=nano
ile başlatabilirsiniz.
EDITOR=nano wp config edit
Veri tabanı tanımlamaları için ise --dbname
, --dbuser
ve --dbpass
kullanırız.
wp config create --dbname=[veri-tabani-adi] --dbuser=[veri-tabani-kullanici-adi] --dbpass=[veri-tabani-kullanici-sifresi]
wp-config.php
içerisinden bilgi almak için ise get
kullanırız. Örneğin, table_prefix
tanımına bakalım.
wp config get table_prefix
Eğer get
sonrasında herhangi bir tanım yapmazsak wp-config.php
içeriğindeki tüm değerler tablo olarak getirilecektir. Benzer bir işlemi wp config list
ile de gerçekleştirmek mümkün. Ancak, list
ile ayrıca bilgilerin sunulacağı format, gösterilecek alanlar, filtreler gibi tanımlamalar da yapılabilmekte.
list
kullanarak sadece DB_USER
ve DB_PASSWORD
bilgilerini alalım.
wp config list DB_USER DB_PASSWORD --strict
Son olarak wp config set
ile nasıl wp-config.php
içeriğine ekleme yapabileceğimize bakalım. list
ile WP_DEBUG
içeriğini kontrol edelim.
wp config list WP_DEBUG
Eğer tanımlı değilse Error: No matching entries found in 'wp-config.php'.
mesajı dönecektir. Ancak, list içeriğinde WP_DEBUG
listelenmişti. Dolayısıyla tanımlı olduğunu biliyoruz. Fakat herhangi bir value
tanımlı olmadığı için ilgili alan boş listelenecektir. Şimdi bu alanı true
olarak değiştirelim.
wp config set WP_DEBUG true --raw
Komutu uygulamamızın ardından şu dönüşü alırız; Success: Updated the constant 'WP_DEBUG' in the 'wp-config.php' file with the raw value 'true'.
Oldukça pratik, değil mi? wp config
ile ilgili işlemler yukarıdakilerle sınırlı değil elbette. Daha detaylı bilgi için WP-CLI Commands > wp config6 ve WP-CLI Configuration3 sayfalarını inceleyebilirsiniz.