Cara Merampingkan Migrasi Multisite WordPress Dengan MU-Migration

Diterbitkan: 2022-03-10
Ringkasan cepat Memperkenalkan alat MU-Migration, perintah WP-CLI yang membantu pengembang memigrasikan situs ke atau di antara instans multisitus. Migrasi multisitus memiliki berbagai kerumitan teknis, dan alat ini dapat membantu meringankannya.

Memindahkan situs WordPress mandiri ke lingkungan jaringan situs (atau "multisitus") adalah upaya yang membosankan dan rumit, sebaliknya juga benar. Pengimpor WordPress bekerja dengan cukup baik untuk situs yang lebih kecil dan sederhana, tetapi menyisakan ruang untuk perbaikan. Itu mengekspor konten, tetapi bukan data konfigurasi situs seperti konfigurasi Widget dan Penyesuai, plugin, dan pengaturan situs. Importir juga kesulitan menangani konten dalam jumlah besar. Dalam artikel ini, Anda akan mempelajari cara merampingkan jenis migrasi ini dengan menggunakan MU-Migration, sebuah plugin WP-CLI.

Memahami Multisitus

Multisite WordPress memungkinkan Anda menjalankan beberapa situs web dalam instalasi WordPress yang sama. Ini sering disebut sebagai "Jaringan Multisite." WordPress.com mungkin adalah contoh terbesar dari jaringan multisite, menjalankan ribuan situs dalam instance WordPress yang sama.

Multisite WordPress bisa sangat cocok untuk beberapa kasus penggunaan, beberapa di antaranya meliputi:

  • Klien Anda mungkin memiliki beberapa properti, dan mungkin masuk akal untuk menggabungkan semua situsnya ke dalam instalasi WordPress yang unik, berbagi satu domain, tetapi tidak terbatas pada itu.

  • Setelah Anda mengaturnya, ini adalah proses yang sederhana dan mudah untuk memutar situs baru dan memanfaatkan tema dan plugin yang sudah tersedia di jaringan

Pemahaman mendalam tentang cara kerja multisitus berada di luar cakupan artikel ini, tetapi Anda dapat melihat tautan berikut:

  • “Buat Jaringan,” Codex, WordPress.org

  • “WordPress Multisite: Fungsi dan Metode Praktis,” Kevin Leary, Majalah Smashing

Lebih banyak setelah melompat! Lanjutkan membaca di bawah ini

Memahami Tantangan

Perbedaan antara struktur situs tunggal dan multisitus WordPress cukup masuk akal. Dengan multisite, setiap subsitus mendapatkan kumpulan tabel databasenya sendiri, dengan pengecualian tabel pengguna ( wp_user ) yang dibagikan di semua situs. Cara kerjanya di WordPress adalah bahwa setiap set tabel subsitus memiliki ID situs yang ditambahkan ke setiap nama tabel ( wp_X_posts , wp_X_postmeta , wp_X_options ).

Struktur database ini sendiri sudah memperkenalkan beberapa kompleksitas. Misalnya, bagaimana Anda akan memigrasikan subsitus dari multisitus ke satu pemasangan? Jelas, Anda tidak bisa hanya mengekspor dan mengimpor database ke dalam satu instalasi — nama tabelnya berbeda! Anda perlu mengganti nama tabel dalam file .sql yang diekspor atau menggunakan kueri ALTER TABLE SQL untuk mengganti nama tabel setelah mengimpornya. Hal yang sama berlaku untuk cara sebaliknya: Jika Anda mengimpor satu situs ke multisite, awalan tabel juga harus diperbarui. Kedengarannya seperti terlalu banyak pekerjaan, bukan?

Tabel pengguna di multisitus bersifat global, yang berarti Anda tidak bisa hanya mengimpor tabel pengguna dari situs tunggal Anda karena itu akan sepenuhnya menimpa tabel pengguna global multisitus. Jika Anda melakukan kebalikannya, mengekstrak subsitus dari WordPress dan mengimpor ke satu situs, Anda akan membawa semua pengguna jaringan, bahkan mereka yang bukan milik subsitus yang sedang dimigrasikan. Selain itu, jika memigrasikan subsitus dari satu multisitus ke multisitus lainnya, mengekspor tabel pengguna benar-benar keluar dari tabel.

Solusi terbaik adalah mengekspor pengguna secara terpisah, tetapi ini menimbulkan masalah lain: ketika pengguna diimpor, mereka akan mendapatkan ID yang berbeda. Untuk mengatasi masalah ini, perlu untuk melacak id pengguna baru, membuat tabel pemetaan dan menggunakan tabel pemetaan untuk memperbarui semua referensi ke ID pengguna di WordPress! Sekali lagi, terlalu banyak pekerjaan, bukan?

Ini hanyalah dua contoh dari tantangan yang dapat dihadapi seseorang ketika berhadapan dengan migrasi seperti ini. Ada banyak hal kecil lainnya yang juga perlu diperhatikan, seperti memindahkan folder unggahan ke lokasi yang tepat, memigrasikan catatan dalam database yang merujuk ke ID situs, dll.

Temui MU-Migration

MU-Migration adalah plugin WP-CLI yang saya buat saat mengerjakan beberapa migrasi klien dan kemudian open-source oleh 10up. Itu disusun untuk merampingkan proses pemindahan situs dari situs WordPress tunggal ke instance multisite (atau sebaliknya). Ini pada dasarnya mengekspor semuanya ke dalam paket ZIP yang kemudian dapat digunakan untuk mengimpor situs di instalasi WordPress yang diinginkan.

Ia bekerja dengan mengekspor konten situs dan secara opsional tema, plugin, dan folder unggahan ke dalam paket zip yang dapat dengan mudah diimpor ke instalasi WordPress lain. Saat menggunakan MU-Migration, Anda tidak perlu khawatir tentang detail teknis yang mendasari migrasi. Ini hanya akan mengurus semua itu untuk Anda sehingga Anda dapat fokus pada apa yang penting: memberikan migrasi yang sukses ke klien Anda.

Menginstal WP-CLI Dan MU-Migration

Untuk menggunakan MU-Migration, Anda harus terlebih dahulu menginstal WP-CLI, alat baris perintah WordPress resmi. Menginstal WP-CLI semudah menjalankan perintah di bawah ini di server Anda:

 $ 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

Setelah menjalankan langkah-langkah ini, Anda akan dapat menjalankan WP-CLI dengan mengetikkan wp saja dari instalasi WordPress mana pun, selama Anda berada di dalam direktori root WordPress.

Misalnya, pada folder instalasi WordPress Anda, coba jalankan perintah berikut:

 $ wp theme status

Ini adalah perintah sederhana dan akan mencantumkan semua tema yang tersedia, menyoroti mana yang sedang aktif.

Terakhir, untuk menginstal MU-Migration, Anda dapat memanfaatkan perintah package install . Gunakan perintah berikut untuk mengunduh dan menginstal MU-Migration sebagai plugin WP-CLI.

 $ wp package install 10up/mu-migration

Menjalankan Migrasi Sederhana

Penggunaan MU-Migration cukup sederhana. Untuk skenario pertama kami, kami akan memindahkan satu situs WordPress ke dalam instalasi multisitus WordPress.

Mengekspor Situs Tunggal

Kami akan memulai dengan mengekspor satu situs. Untuk melakukannya, kita perlu menggunakan perintah ekspor semua :

 $ wp mu-migration export all single-site.zip --themes --plugins --uploads

Perintah di atas akan mengekspor seluruh situs ke dalam paket ZIP, flag --themes , --plugins , dan --uploads adalah opsional dan akan menyertakan tema saat ini, semua plugin, dan folder unggahan, masing-masing, dalam ekspor. Bergantung pada ukuran situs Anda, mungkin perlu beberapa saat untuk menyelesaikan prosesnya, tetapi untuk sebagian besar situs, proses ekspor tidak akan memakan waktu lebih dari beberapa menit.

Setelah selesai, itu akan membuat file bernama single-site.zip yang berisi semua data situs, tema, dan plugin serta direktori unggahan. Langkah selanjutnya adalah memindahkannya ke server tempat multisite WordPress berada. Anda dapat menggunakan klien SFTP pilihan Anda atau solusi yang lebih kuat seperti rsync .

Mengimpor Situs Tunggal ke Multisitus

Dengan file yang diekspor di server multisite Anda, yang perlu Anda lakukan hanyalah menggunakan perintah import dari direktori multisite WordPress; tentu saja, baik WP-CLI dan MU-Migration perlu diinstal pada server tujuan juga.

 $ wp mu-migration import all /path/to/single-site.zip --new_url=example.com/single-site

Perintah di atas akan mengambil file single-site.zip , mengekstraknya dan mengimpor semuanya ke multisite. Ini akan membuat subsitus baru di jaringan Anda. Parameter --new_url adalah opsional; itu akan menginstruksikan MU-Migration untuk melakukan pencarian, dan mengganti untuk mengganti semua kemunculan URL situs dari situs yang diekspor dengan yang ditentukan. Parameter ini berguna saat migrasi menyertakan perubahan URL atau jika Anda mengimpor secara lokal, atau bahkan dalam lingkungan staging.

Proses impor biasanya memakan waktu lebih lama dan tergantung pada ukuran situs yang Anda impor, tetapi jangan takut, MU-Migration akan terus memperbarui Anda saat migrasi berjalan. Ketika proses selesai, MU-Migration akan menginformasikan kepada Anda URL final dari situs yang Anda impor. Sangat disarankan untuk membersihkan semua lapisan cache yang berjalan di server Anda, khususnya Memcache atau Redis.

Menjalankan Kembali Migrasi

Saat melakukan migrasi, cukup umum untuk melakukan dry-run terlebih dahulu dengan tujuan menguji hal-hal sebelum menjalankan migrasi terakhir, yang biasanya berarti mengambil ekspor dan impor ulang lain di instalasi multisite tujuan. Namun, perhatikan bahwa dalam contoh migrasi pertama kami, MU-Migration membuat subsitus baru di dalam jaringan untuk mengimpor satu situs di atasnya. Menjalankan perintah yang sama persis lagi akan mengarah pada pembuatan subsitus lain, yang tidak persis seperti yang kita harapkan.

Untungnya, dimungkinkan untuk menentukan blog_id , yang memberi tahu MU-Migration untuk mengganti subsitus dengan blog_id yang ditentukan. Misalnya, mari kita asumsikan bahwa perintah impor sebelumnya membuat subsitus dengan 2 sebagai ID dan Anda ingin menjalankan kembali migrasi. Anda dapat melakukan hal berikut:

 $ wp mu-migration import all /path/to/single-site.zip --new_url=example.com/single-site --blog_id=2

Jika Anda tidak tahu blog_id , Anda bisa mendapatkannya melalui Pengaturan Admin Jaringan atau dengan menjalankan $ wp site list .

Mengekstrak Subsite Dari Instalasi Multisite

MU-Migration juga mendukung ekstraksi subsitus dari instalasi multisite dan mengimpornya ke multisite lain atau dalam satu situs.

Untuk dua skenario ini, kami akan menjalankan perintah ekspor dari instalasi multisite dan bukan dari satu situs; ini berarti kita memerlukan cara untuk menentukan subsitus mana yang ingin kita ekspor. Untuk melakukan itu, kita hanya perlu meneruskan parameter --blog_id ke perintah ekspor:

 $ wp mu-migration export all subsite-3.zip --themes --plugins --uploads --blog_id=3

Dalam contoh ini, kami mengekspor subsitus dengan ID sama dengan 3; ini akan membuat file ZIP yang siap diimpor ke multisite lain atau di satu situs. Perintah untuk mengimport ke satu situs dan multisitus sama persis, MU-Migration akan mendeteksi apakah itu berjalan di multisite atau tidak dan akan menyesuaikan diri dengan itu secara otomatis. Sebagai tambahan, saat mengimpor ke instance multisitus lain, Anda juga dapat menentukan parameter --blog_id untuk mengganti subsitus yang ada.

 $ 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= ]

Tips Untuk Menjalankan Migrasi Besar

Sementara contoh sebelumnya bekerja dengan sangat baik untuk migrasi ukuran kecil hingga menengah, migrasi situs besar ke atau dari multisitus dapat memakan waktu yang cukup lama. Di bagian ini, saya akan membagikan beberapa pelajaran saat melakukan beberapa migrasi seperti perusahaan.

Buat Rencana Migrasi

Migrasi data seringkali diperlukan, tetapi ini adalah bagian yang diabaikan dari banyak proyek. Migrasi bisa menjadi rumit dan rumit, tetapi jika direncanakan dengan tepat, ini bisa jadi tidak menyakitkan. Membuat rencana migrasi harus menjadi langkah pertama dari setiap proyek migrasi.

Rencana migrasi tipikal mencakup hal-hal seperti:

  • Dampak migrasi pada setiap proses editorial produksi (yaitu, pembekuan konten, persyaratan migrasi diferensial).

  • Berapa lama migrasi diharapkan berjalan?

  • Bagaimana cadangan akan dipulihkan? Bagaimana migrasi yang gagal akan ditangani?

  • Bagaimana proses ekspor akan mempengaruhi kinerja situs? Banyak situs tidak mampu mengekspor database selama masa puncaknya.

Sebagai aturan umum, migrasi harus semulus mungkin, dan idealnya, pada hari peluncuran, semua pengangkatan berat sudah selesai, dan hanya langkah-langkah yang benar-benar diperlukan yang harus dilakukan. Ini berarti Anda harus memigrasikan semua yang Anda bisa sebelum tanggal peluncuran yang sebenarnya karena ini akan memberi Anda ruang untuk memperbaiki kesalahan dan QAing. Jika ini adalah pembuatan situs baru dan Anda memigrasikan data, Anda sering kali dapat memanfaatkan jendela pembekuan konten dan memindahkan konten Anda lebih awal. Anda juga dapat menggunakan strategi untuk memindahkan konten Anda secara progresif jika memungkinkan. Lihat bagian berikutnya untuk contoh teknik ini.

Meskipun diabaikan berkali-kali, rencana migrasi yang tepat dapat menghindari berbagai macam masalah dalam migrasi. Jangan biarkan keadaan tak terduga menyebabkan migrasi Anda gagal, rencanakan ke depan! Untuk diskusi yang lebih mendalam tentang merencanakan migrasi, saya mendorong Anda untuk memeriksa bagian migrasi dari praktik terbaik 10up.

Gunakan Rsync Untuk Menyalin Unggahan Secara Progresif

Folder unggahan situs besar bisa sangat besar, dan mengompresnya menjadi file ZIP untuk ekstraksi nanti tidak selalu merupakan solusi terbaik dan tercepat. Ada beberapa cara lain untuk menyalin folder unggahan ke server tujuan. Alat yang umum digunakan untuk migrasi seperti perusahaan adalah rsync , yang dapat mentransfer file antar server lebih cepat daripada menggunakan solusi SFTP standar, dan sebagai nilai tambah, alat ini dapat menjeda dan memulihkan transfer. Itu melacak apa yang telah ditransfer, artinya kami dapat menyinkronkan file kami secara progresif. Misalnya, Anda dapat mulai menyinkronkan file beberapa hari sebelum migrasi sebenarnya untuk memberi Anda waktu. Kemudian, pada hari migrasi, yang perlu Anda lakukan hanyalah menyinkronkan file untuk memastikan bahwa semua yang telah ditambahkan sejak sinkronisasi terakhir ditransfer ke server tujuan.

Satu-satunya peringatan dari pendekatan ini adalah Anda harus memindahkan subdirektori unggahan secara manual ke tempat yang tepat karena multisite memiliki struktur yang sedikit berbeda untuk folder unggahan: setiap situs mendapatkan subfoldernya sendiri di mana namanya adalah ID situs .

Sebagai contoh terakhir, mari kita lihat bagaimana kita dapat memigrasikan satu situs besar ke dalam instance multisitus. Kami akan memulai dengan mengekspor satu situs ke dalam paket ZIP dan menjalankan uji coba di server tujuan. Pada saat itu, situs tidak akan dapat diakses oleh siapa pun karena domain masih mengarah ke server lama, artinya Anda dapat dengan aman mengarahkan file host ke server baru untuk menguji migrasi. Anda juga dapat mengaktifkan plugin seperti Batasi Akses Situs di situs tujuan untuk memastikan bahwa itu tidak dapat diakses publik dengan cara apa pun.

Untuk uji coba kering kami, kami akan mengekspor situs beberapa hari atau minggu sebelum tanggal migrasi yang direncanakan untuk menguji dan mengetahui berapa lama prosesnya. Perhatikan bahwa folder unggahan tidak disertakan.

Lakukan Dry-Run Terlebih Dahulu

Selalu lakukan dry-run terlebih dahulu. Idealnya, dry-run harus terjadi di server sebenarnya atau di lingkungan staging dengan tumpukan server yang serupa.

Pertimbangkan Menggunakan --mysql-single-transaction

Perintah import juga mendukung --mysql-single-transaction yang akan membungkus ekspor SQL menjadi satu transaksi untuk melakukan semua perubahan dari impor sekaligus, mencegah penulisan membanjiri server database, terutama di lingkungan MySQL yang dikelompokkan.

 $ cd /path/to/wordpress $ wp mu-migration export all site.zip --themes --plugins

Dengan rsync , kita dapat dengan mudah mentransfer file yang diekspor:

 $ rsync -aP site.zip [email protected]:/var/www/multisite/

Kemudian kita jalankan perintah import di server tujuan:

 $ ssh [email protected] $ cd /var/www/multisite $ wp mu-migration import all site.zip

Sekarang kita perlu tahu apa itu blog_id dari subsitus yang baru dibuat; kita bisa mendapatkan info itu dengan menjalankan:

$wp daftar situs
blog_id url last_updated terdaftar
1 https://multisite.com/ 09-09-2017 20:59:31 23-11-2016 21:59:34
2 https://siglesite.com/ 21-06-2017 18:30:09 25-04-2017 13:07:46

Dari output perintah di atas, kita tahu bahwa situs kita telah diimpor dengan ID 2. Kita memerlukannya untuk memindahkan folder unggahan dengan benar menggunakan rsync . Dari server situs tunggal, kami akan menjalankan yang berikut:

 $ rsync -azP wp-content/uploads/ [email protected]:/var/www/multisite/wp-content/uploads/sites/2/

Perintah di atas akan menyalin seluruh folder unggahan ke tempat yang tepat pada instalasi multisite, yang berada di bawah folder situs dan di dalam folder di mana namanya hanyalah ID situs (dalam hal ini, 2). Pada titik ini, kita sekarang dapat mengedit file host untuk mengarahkan domain situs tunggal ke server multisitus; maka kita dapat melakukan beberapa pengujian untuk memastikan bahwa migrasi bekerja seperti yang diharapkan.

Untuk migrasi terakhir, semuanya akan sama, dengan pengecualian bahwa kita akan meneruskan --blog_id=2 ke perintah import:

 $ wp mu-migration import all site.zip --blog_id=2

Dan sebagai keuntungannya, sinkronisasi unggahan akan terjadi jauh lebih cepat karena rsync hanya akan mentransfer file yang telah diubah atau ditambahkan sejak sinkronisasi terakhir.

Kesimpulan

Migrasi ke atau dari multisite sulit dilakukan dan alat yang diperkenalkan dalam artikel ini menyederhanakan seluruh proses migrasi dengan mengurangi upaya menjadi beberapa perintah CLI. MU-Migration telah aktif digunakan dalam produksi selama lebih dari satu tahun dan merupakan proyek sumber terbuka sepenuhnya. Plugin ini dikembangkan di Github dan permintaan tarik dipersilakan!