MU-Migration ile WordPress Çoklu Site Geçişlerini Kolaylaştırma
Yayınlanan: 2022-03-10Bağımsız bir WordPress sitesini bir site ağı (veya "çoklu site") ortamına taşımak sıkıcı ve zor bir iştir, bunun tersi de geçerlidir. WordPress İçe Aktarıcı, daha küçük, daha basit siteler için oldukça iyi çalışır, ancak iyileştirme için yer bırakır. İçeriği dışa aktarır, ancak Widget ve Özelleştirici yapılandırmaları, eklentiler ve site ayarları gibi site yapılandırma verilerini dışa aktarmaz. İthalatçı ayrıca büyük miktarda içeriği idare etmekte zorlanıyor. Bu makalede, bir WP-CLI eklentisi olan MU-Migration kullanarak bu tür geçişi nasıl kolaylaştıracağınızı öğreneceksiniz.
Çoklu Siteyi Anlamak
Bir WordPress çoklu sitesi, aynı WordPress kurulumunda birden fazla web sitesi çalıştırmanıza izin verir. Genellikle “Çok Siteli Ağ” olarak adlandırılır. WordPress.com, muhtemelen aynı WordPress örneğinde binlerce site çalıştıran çok siteli bir ağın en büyük örneğidir.
Bir WordPress çoklu sitesi, birkaç kullanım durumu için mükemmel bir seçim olabilir, bunlardan bazıları şunları içerir:
Müşterinizin birden fazla mülkü olabilir ve tüm sitelerini tek bir etki alanını paylaşarak benzersiz bir WordPress kurulumunda birleştirmek mantıklı olabilir, ancak bununla sınırlı değildir.
Bir kez kurduktan sonra, yeni siteler oluşturmak ve ağda zaten mevcut olan temalardan ve eklentiden yararlanmak basit ve anlaşılır bir işlemdir.
Çoklu sitenin nasıl çalıştığını derinlemesine anlamak bu makalenin kapsamı dışındadır, ancak aşağıdaki bağlantılara göz atabilirsiniz:
“Bir Ağ Oluşturun,” Codex, WordPress.org
“WordPress Multisite: Pratik İşlevler ve Yöntemler,” Kevin Leary, Smashing Magazine
Zorlukları Anlamak
Tek bir sitenin yapısı ile bir WordPress çoklu site yapısı arasındaki farklar oldukça makul. Çoklu site ile, tüm sitelerde paylaşılan kullanıcı tablosu ( wp_user
) dışında her alt site kendi veritabanı tablolarını alır. Bunun WordPress'te çalışma şekli, her alt site tablo kümesinin, her tablo adına eklenen site kimliğine sahip olmasıdır ( wp_X_posts
, wp_X_postmeta
, wp_X_options
).
Bu veritabanı yapısının kendisi zaten bazı karmaşıklıklar getiriyor. Örneğin, bir alt siteyi çoklu siteden tek bir yüklemeye nasıl geçirirsiniz? Açıkçası, veritabanını tek bir kuruluma aktarıp içe aktaramazsınız - tablo adları farklıdır! Dışa aktarılan .sql
dosyasındaki tabloları yeniden adlandırmanız veya içe aktardıktan sonra tabloları yeniden adlandırmak için bir ALTER TABLE SQL
sorgusu kullanmanız gerekir. Aynısı tersi için de geçerlidir: Tek bir siteyi çoklu siteye aktarıyorsanız, tablo öneklerinin de güncellenmesi gerekir. Kulağa çok fazla iş gibi geliyor, değil mi?
Kullanıcının çoklu sitedeki tablosu globaldir; bu, çok siteli global kullanıcının tablosunu tamamen geçersiz kılacağından, kullanıcının tablosunu tek sitenizden içe aktaramayacağınız anlamına gelir. Tersini yapıyorsanız, WordPress'ten bir alt site ayıklıyor ve tek bir siteye aktarıyorsanız, taşınan alt siteye ait olmayanlar bile ağın tüm kullanıcılarını taşıyor olacaksınız. Ek olarak, bir alt siteyi bir çoklu siteden diğerine taşıyorsanız, kullanıcının tablosunu dışa aktarmak tamamen masanın dışındadır.
En iyi çözüm, kullanıcıları ayrı ayrı dışa aktarmaktır, ancak bu başka bir sorunu da beraberinde getirir: kullanıcılar içe aktarıldığında farklı kimlikler alacaklardır. Bu sorunu çözmek için, yeni kullanıcının kimliklerini takip etmek, bir eşleme tablosu oluşturmak ve WordPress'teki tüm kullanıcı kimliklerine yapılan referansları güncellemek için eşleme tablosunu kullanmak gereklidir! Yine, çok fazla iş, değil mi?
Bunlar, bunun gibi göçlerle uğraşırken karşılaşılabilecek zorluklara sadece iki örnek. Yüklenenler klasörünü uygun konuma taşımak, veritabanındaki site kimliğine referans veren kayıtları taşımak vb. gibi dikkat edilmesi gereken bir dizi başka küçük şey de vardır.
MU-Migration ile tanışın
MU-Migration, birkaç istemci geçişi üzerinde çalışırken oluşturduğum ve daha sonra 10up tarafından açık kaynaklı bir WP-CLI eklentisidir. Siteleri tek WordPress sitelerinden çok siteli bir örneğe (veya tam tersi) taşıma sürecini kolaylaştırmak için tasarlandı. Esasen her şeyi bir ZIP paketine aktarır ve daha sonra siteyi istenen WordPress kurulumunda içe aktarmak için kullanılabilir.
Sitenin içeriğini ve isteğe bağlı olarak temayı, eklentileri dışa aktararak çalışır ve klasörleri başka bir WordPress kurulumuna kolayca aktarılabilen bir zip paketine yükler. MU-Migration'ı kullanırken, geçişin altında yatan teknik ayrıntılar hakkında endişelenmenize gerek yoktur. Önemli olana odaklanabilmeniz için tüm bunları sizin için halledecektir: müşterilerinize başarılı bir geçiş sağlamak.
WP-CLI ve MU-Migration'ı Yükleme
MU-Migration'ı kullanmak için önce resmi WordPress komut satırı aracı olan WP-CLI'yi yüklemeniz gerekir. WP-CLI'yi kurmak, sunucunuzda aşağıdaki komutları çalıştırmak kadar basittir:
$ 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
Bu adımları çalıştırdıktan sonra, WordPress kök dizininde olduğunuz sürece herhangi bir WordPress kurulumundan sadece wp
yazarak WP-CLI'yi çalıştırabileceksiniz.
Örneğin, WordPress kurulum klasörünüzde aşağıdaki komutu çalıştırmayı deneyin:
$ wp theme status
Bu basit bir komuttur ve mevcut olan tüm temaları listeleyerek hangisinin aktif olduğunu vurgular.
Son olarak, MU-Migration'ı kurmak için package install
komutundan yararlanabilirsiniz. MU-Migration'ı bir WP-CLI eklentisi olarak indirmek ve kurmak için aşağıdaki komutu kullanın.
$ wp package install 10up/mu-migration
Basit Bir Taşıma Çalıştırma
MU-Migration'ın kullanımı oldukça basittir. İlk senaryomuz için, tek bir WordPress sitesini bir WordPress çoklu site kurulumuna taşıyacağız.
Tek Siteyi Dışa Aktarma
Tek siteyi dışa aktararak başlayacağız. Bunu yapmak için, tüm dışa aktar komutunu kullanmamız gerekiyor:
$ wp mu-migration export all single-site.zip --themes --plugins --uploads
Yukarıdaki komut, tüm siteyi bir ZIP paketine aktaracaktır, --themes
, --plugins
ve --uploads
bayrakları isteğe bağlıdır ve dışa aktarmada sırasıyla mevcut temayı, tüm eklentileri ve yüklemeler klasörünü içerecektir. Sitenizin boyutuna bağlı olarak, işlemin tamamlanması biraz zaman alabilir, ancak çoğu site için dışa aktarma işlemi birkaç dakikadan fazla sürmemelidir.
Tamamlandığında, sitenin tüm verilerini, temalarını ve eklentilerini ve ayrıca yükleme dizinini içeren single-site.zip
adlı bir dosya oluşturacaktır. Bir sonraki adım, onu WordPress çoklu sitesinin yaşadığı sunucuya taşımaktır. Tercih ettiğiniz SFTP istemcisini veya rsync
gibi daha sağlam bir çözümü kullanabilirsiniz.
Tek Siteyi Çoklu Siteye Aktarma
Dışa aktarılan dosya multisite sunucunuzdayken, tek yapmanız gereken WordPress multisite dizininden import komutunu kullanmaktır; söylemeye gerek yok, hem WP-CLI hem de MU-Migration'ın hedef sunucuya da yüklenmesi gerekiyor.
$ wp mu-migration import all /path/to/single-site.zip --new_url=example.com/single-site
Yukarıdaki komut, single-site.zip
dosyasını alacak, ayıklayacak ve her şeyi multisite'ye aktaracaktır. Ağınızda yeni bir alt site oluşturacaktır. --new_url
parametresi isteğe bağlıdır; MU-Migration'a bir arama yapması ve dışa aktarılan sitenin site URL'sinin tüm oluşumlarını belirtilen URL ile değiştirmek için değiştirme talimatı verecektir. Bu parametre, taşıma bir URL değişikliği içerdiğinde veya yerel olarak veya hatta bir hazırlama ortamında içe aktarıyorsanız kullanışlıdır.
İçe aktarma işlemi genellikle daha uzun sürer ve içe aktardığınız sitenin boyutuna bağlıdır, ancak korkmayın, MU-Migration, geçiş çalışırken sizi güncel tutacaktır. İşlem bittiğinde, MU-Migration, içe aktarılan sitenizin nihai URL'sini size bildirecektir. Sunucunuzda çalışan tüm önbellek katmanlarını, özellikle Memcache veya Redis'i temizlemeniz şiddetle önerilir .
Bir Taşımayı Yeniden Çalıştırma
Geçişler yaparken, son geçişi çalıştırmadan önce işleri test etmek amacıyla ilk önce bir kuru çalıştırma yapmak oldukça yaygındır; bu, genellikle başka bir dışa aktarmayı almak ve hedef çok bölgeli kurulumda yeniden içe aktarmak anlamına gelir. Ancak, ilk geçiş örneğimizde, MU-Migration'ın tek siteyi bunun üzerine içe aktarmak için ağ içinde yeni bir alt site oluşturduğunu unutmayın. Aynı komutu tekrar çalıştırmak, tam olarak beklediğimiz gibi olmayan başka bir alt sitenin oluşturulmasına yol açacaktır.
Neyse ki, MU-Migration'a belirtilen blog_id
ile alt siteyi geçersiz kılmasını söyleyen bir blog_id
belirtmek mümkündür. Örneğin, önceki içe aktarma komutunun kimlik olarak 2
olan bir alt site oluşturduğunu ve taşımayı yeniden çalıştırmak istediğinizi varsayalım. Aşağıdakileri yapabilirsiniz:
$ wp mu-migration import all /path/to/single-site.zip --new_url=example.com/single-site --blog_id=2
blog_id
bilmiyorsanız, Ağ Yönetici Ayarları aracılığıyla veya $ wp site list
çalıştırarak alabilirsiniz.
Çoklu Site Kurulumundan Bir Alt Siteyi Çıkarma
MU-Migration ayrıca, çok bölgeli kurulumlardan alt sitelerin çıkarılmasını ve başka bir çok siteye veya tek bir siteye içe aktarılmasını da destekler.
Bu iki senaryo için, dışa aktarma komutunu tek bir siteden değil, çok siteli bir kurulumdan çalıştırırdık; bu, hangi alt siteyi dışa aktarmak istediğimizi belirtmek için bir yola ihtiyacımız olduğu anlamına gelir. Bunu yapmak için --blog_id
parametresini dışa aktarma komutuna geçirmemiz yeterli:
$ wp mu-migration export all subsite-3.zip --themes --plugins --uploads --blog_id=3
Bu örnekte, kimliği 3'e eşit olan bir alt siteyi dışa aktarıyoruz; bu, başka bir çoklu siteye veya tek bir siteye aktarılmaya hazır bir ZIP dosyası oluşturacaktır. Tek bir siteye ve çoklu siteye içe aktarma komutu tamamen aynıdır, MU-Migration çoklu sitede çalışıp çalışmadığını algılar ve kendini buna otomatik olarak ayarlar. Ek olarak, başka bir çoklu site örneğine içe aktarırken, mevcut bir alt siteyi geçersiz kılmak için --blog_id
parametresini de belirtebilirsiniz.
$ wp mu-migration import all /path/to/subsite-3.zip [--new_url= ] [--blog_id= ]
$ wp mu-migration import all /path/to/subsite-3.zip [--new_url= ] [--blog_id= ]
$ wp mu-migration import all /path/to/subsite-3.zip [--new_url= ] [--blog_id= ]
Büyük Geçişleri Çalıştırmak İçin İpuçları
Önceki örnekler küçük ve orta boyutlu geçişler için çok iyi çalışırken, büyük siteleri çoklu sitelere veya çoklu sitelerden taşımak makul bir süre alabilir. Bu bölümde, kurumsal benzeri birkaç geçiş yaparken öğrenilen bazı dersleri paylaşacağım.
Bir Taşıma Planı Oluşturun
Veri geçişleri genellikle gereklidir, ancak birçok projenin ihmal edilen bir parçasıdır. Göçler hantal ve karmaşık olabilir, ancak uygun şekilde planlandığında ağrısız olabilir. Bir geçiş planı oluşturmak, herhangi bir geçiş projesinin ilk adımı olmalıdır.
Tipik bir geçiş planı şunları içerir:
Geçişin herhangi bir üretim editoryal süreci üzerindeki etkisi (yani, içerik donmaları, farklı geçiş gereksinimleri).
Göçün ne kadar sürmesi bekleniyor?
Yedekler nasıl geri yüklenecek? Başarısız bir geçiş nasıl ele alınacak?
Dışa aktarma işlemi sitenin performansını nasıl etkiler? Çoğu site, yoğun zamanlarda bir veritabanı dışa aktarımını karşılayamaz.
Genel bir kural olarak, geçişler mümkün olduğunca sorunsuz olmalıdır ve ideal olarak, fırlatma gününde tüm ağır kaldırma işlemleri tamamlanmış olmalı ve yalnızca kesinlikle gerekli olan adımlar gerçekleştirilmelidir. Bu, hataları düzeltmek ve QAing için size yer açacağından, gerçek lansman tarihinden önce elinizden gelen her şeyi taşımanız gerektiği anlamına gelir. Bu yeni bir site yapısıysa ve verileri taşıyorsanız, genellikle bir içerik dondurma penceresinden yararlanabilir ve içeriğinizin önceden taşınmasını sağlayabilirsiniz. Mümkünse içeriğinizi aşamalı olarak taşımak için stratejiler de kullanabilirsiniz. Bu tekniğin bir örneği için sonraki bölüme bakın.
Birçok kez ihmal edilse de, uygun bir göç planı, göçle ilgili çok çeşitli sorunları önleyebilir. Beklenmedik koşulların geçişinizin başarısız olmasına neden olmasına izin vermeyin, önceden plan yapın! Geçiş planlama hakkında daha ayrıntılı bir tartışma için 10up'ın en iyi uygulamalarının geçiş bölümüne göz atmanızı tavsiye ederim.
Yüklemeleri Aşamalı Olarak Kopyalamak için Rsync Kullanın
Büyük sitelerin yüklemeler klasörü son derece büyük olabilir ve daha sonra çıkarmak için bir ZIP dosyasına sıkıştırmak her zaman en iyi ve en hızlı çözüm değildir. Yüklemeler klasörünü hedef sunucuya kopyalamanın başka birkaç yolu vardır. Kurumsal benzeri geçiş için yaygın olarak kullanılan bir araç, dosyaları sunucular arasında standart bir SFTP çözümü kullanmaktan daha hızlı aktarabilen ve bir artı olarak aktarımları duraklatıp geri yükleyebilen rsync
. Halihazırda aktarılanların kaydını tutar, bu da dosyalarımızı aşamalı olarak senkronize edebileceğimiz anlamına gelir. Örneğin, size biraz zaman kazandırmak için gerçek geçişten birkaç gün önce dosyaları senkronize etmeye başlayabilirsiniz. Ardından, taşıma gününde tek yapmanız gereken, son eşitlemeden bu yana eklenen her şeyin hedef sunucuya aktarıldığından emin olmak için dosyaları eşitlemektir.
Bu yaklaşımın tek uyarısı, çoklu sitenin yüklemeler klasörü için biraz farklı bir yapısı olduğundan, yüklemelerin alt dizinlerini manuel olarak doğru yere taşımanız gerekmesidir: her site kendi alt klasörünü alır, burada adı sitenin kimliğidir .
Son bir örnek olarak, büyük bir tek siteyi çok siteli bir örneğe nasıl taşıyabileceğimizi görelim. Tek siteyi bir ZIP paketine aktararak ve hedef sunucuda bir kuru çalıştırma testi yaparak başlayacağız. Bu noktada, alan adı hala eski sunucuyu işaret ettiğinden siteye kimse erişemez; bu, taşımayı test etmek için ana makinenizin dosyasını güvenle yeni sunucuya yönlendirebileceğiniz anlamına gelir. Ayrıca, herhangi bir şekilde herkese açık olarak erişilebilir olmadığından emin olmak için hedef sitede Site Erişimini Kısıtla gibi bir eklentiyi etkinleştirebilirsiniz.
Kuru çalıştırma testimiz için, test etmek ve sürecin ne kadar süreceğine dair bir fikir edinmek için planlanan geçiş tarihinden birkaç gün veya hafta önce siteyi dışa aktarırdık. Yüklemeler klasörünün dahil olmadığını unutmayın.
Önce Kuru Çalıştırma Yapın
Daima önce bir kuru çalıştırma yapın. İdeal olarak, gerçek sunucuda veya benzer bir sunucu yığınına sahip bir hazırlama ortamında bir kuru çalıştırma gerçekleştirilmelidir.
--mysql-single-transaction
Bayrağını Kullanmayı Düşünün
import komutu ayrıca, SQL dışa aktarımını tek bir işleme saracak ve içe aktarmadaki tüm değişiklikleri bir kerede gerçekleştirecek bir --mysql-single-transaction
bayrağını da destekler ve yazma işleminin, özellikle kümelenmiş MySQL ortamlarında veritabanı sunucusunu aşırı yüklemesini önler.
$ cd /path/to/wordpress $ wp mu-migration export all site.zip --themes --plugins
rsync
ile oluşturulan dışa aktarılan dosyayı kolayca aktarabiliriz:
$ rsync -aP site.zip [email protected]:/var/www/multisite/
Ardından hedef sunucuda import komutunu çalıştırıyoruz:
$ ssh [email protected] $ cd /var/www/multisite $ wp mu-migration import all site.zip
Şimdi yeni oluşturulan alt sitenin blog_id
ne olduğunu bilmemiz gerekiyor; bu bilgiyi çalıştırarak alabiliriz:
$ wp site listesi | |||
---|---|---|---|
blog_id | url | Son güncelleme | kayıtlı |
1 | https://multisite.com/ | 2017-09-09 20:59:31 | 2016-11-23 21:59:34 |
2 | https://siglesite.com/ | 2017-06-21 18:30:09 | 2017-04-25 13:07:46 |
Yukarıdaki komutun çıktısından, sitemizin ID 2 ile içe aktarıldığını biliyoruz. rsync
kullanarak uploads klasörünü düzgün bir şekilde taşımak için buna ihtiyacımız olacak. Tek site sunucusundan aşağıdakileri çalıştırırdık:
$ rsync -azP wp-content/uploads/ [email protected]:/var/www/multisite/wp-content/uploads/sites/2/
Yukarıdaki komut, yüklemeler klasörünün tamamını, siteler klasörünün altındaki ve adının yalnızca sitenin kimliği olduğu bir klasörün içindeki çok siteli bir kurulumda doğru yere kopyalayacaktır (bu durumda, 2). Bu noktada, artık tek site etki alanını çok siteli sunucuya yönlendirmek için ana bilgisayarın dosyasını düzenleyebiliriz; daha sonra, geçişin beklendiği gibi çalıştığından emin olmak için bazı testler yapabiliriz.
Son geçiş için, import komutuna --blog_id=2
dışında her şey aynı olacaktır:
$ wp mu-migration import all site.zip --blog_id=2
Ve bir avantaj olarak, rsync
yalnızca son senkronizasyondan bu yana değiştirilen veya eklenen dosyaları aktaracağından, yükleme senkronizasyonu çok daha hızlı gerçekleşecektir.
Çözüm
Çoklu siteye veya çoklu siteden geçiş yapmak zordur ve bu makalede tanıtılan araç, çabayı birkaç CLI komutuna indirgeyerek tüm geçiş sürecini basitleştirir. MU-Migration, bir yılı aşkın süredir üretimde aktif olarak kullanılmaktadır ve tamamen açık kaynaklı bir projedir. Eklenti Github'da geliştirilmiştir ve çekme istekleri kabul edilir!