Cara mengisolasi situs klien WordPress tanpa Multisite
Isolasi adalah salah satu kata yang terdengar mutlak, sampai seorang klien mengajukan pertanyaan sulit: jika situs lain di instalasi ini diretas atau datanya korup, apakah situs saya ikut down? Jika jawaban Anda bergantung pada database bersama, jawaban jujurnya adalah “mungkin”. Panduan ini membahas alur kerja pengaturan untuk memberikan setiap situs klien isolasi yang sesungguhnya (data terpisah, kode terpisah, domain kegagalan terpisah) sementara Anda tetap mengelola satu instalasi WordPress.
Apa arti sebenarnya dari “isolasi”
Isolasi bukanlah satu properti tunggal. Terdapat tiga properti, dan Multisite hanya memberikan sekitar satu di antaranya.
- Isolasi data: baris, pengguna, dan opsi satu tenant tidak dapat dibaca atau dirusak melalui konteks tenant lain.
- Isolasi kode: setiap tenant dapat menjalankan tema dan plugin mereka sendiri dengan versi masing-masing, sehingga pembaruan atau plugin bermasalah di Klien A tidak akan pernah berdampak pada Klien B.
- Isolasi domain kegagalan: saat satu tenant mengalami kerusakan (fatal error, tabel korup, proses restore yang gagal), dampak kerusakannya (blast radius) berhenti di tenant tersebut.
Multisite membagikan satu database dan satu direktori wp-content ke semua subsitus. Subsitus hanya dipisahkan oleh ID blog dan awalan tabel di dalam database tunggal tersebut. Hal itu hanya memberi Anda bentuk pemisahan data yang lemah, dan tidak lebih dari itu: setiap subsitus menjalankan plugin dan tema yang sama dari direktori yang sama, serta error fatal dari satu plugin atau tabel yang korup berada dalam domain kegagalan yang sama dengan subsitus lainnya. Awalan (prefix) hanya memisahkan baris. Awalan tidak memisahkan risiko.
Isolasi database: Prefix, MySQL khusus, atau SQLite

Isolasi database adalah bagian yang memiliki opsi paling banyak, jadi pilihlah dengan cermat.
- MySQL bersama, prefix unik per tenant (plugin gratis): GrabWP Tenancy memberikan setiap tenant awalan tabel yang unik di database bersama ditambah direktori uploads yang terpisah. Ini adalah pemisahan tingkat baris yang nyata dan menjadi cara tercepat untuk membuat banyak situs klien, tetapi para tenant tersebut masih berada di dalam satu database, sehingga ini tergolong isolasi parsial.
- Database MySQL khusus per tenant (Pro): GrabWP Tenancy Pro memberikan setiap tenant database MySQL mereka masing-masing. Ini adalah isolasi data secara penuh dengan nol risiko lintas tenant di tingkat database: database lock, tabel yang membengkak, atau indeks yang korup hanya akan tetap berada di dalam database satu klien tersebut.
- SQLite per tenant (Pro): untuk tenant yang ringan atau portabel, versi Pro dapat mendukung tenant dengan file database SQLite-nya sendiri, sehingga tenant tersebut bersifat mandiri dan sangat mudah untuk dipindahkan.
Karena versi Pro mendukung migrasi lintas database, ini bukanlah pilihan permanen. Anda dapat memulai klien dengan model prefix bersama, dan memindahkan tenant tersebut ke database MySQL atau SQLite khusus di kemudian hari tanpa harus membangun ulang dari awal.
Isolasi kode melalui wp-content per tenant

Isolasi data hanyalah separuh cerita. Jika dua klien berbagi satu direktori wp-content, mereka berbagi satu kumpulan file plugin dan tema, yang berarti pembaruan plugin milik satu klien atau satu tema yang tidak kompatibel akan menjadi masalah bagi semuanya.
Plugin gratis mengisolasi file uploads per tenant. Versi Pro melangkah lebih jauh dengan pemisahan wp-content sepenuhnya: tema, plugin, dan uploads yang diisolasi per tenant, masing-masing berada di bawah direktori kontennya sendiri. Inilah yang memungkinkan Klien A menjalankan versi lawas dari sebuah page builder, sementara Klien B menjalankan versi terbaru, tanpa saling berbagi file dan tanpa adanya bentrok antar versi. Versi Pro juga dapat menempatkan lokasi data tenant sepenuhnya di luar direktori wp-content/uploads, yang mana ini sangat berguna jika Anda ingin menempatkan penyimpanan tenant pada volume terpisah.
Merutekan setiap tenant tanpa DNS
Isolasi tidak ada gunanya jika klien tidak bisa mengakses situs mereka, dan Anda semestinya tidak perlu menyentuh DNS setiap kali ada tenant baru. GrabWP Tenancy merutekan tenant melalui dua cara:
- Perutean berbasis jalur (subdirektori): jangkau sebuah tenant di
yoursite.com/site/client-atanpa perlu adanya perubahan DNS. Awalansitebisa dikonfigurasi melalui konstantaGRABWP_TENANCY_PATH_PREFIXjika Anda menginginkan segmen nama yang berbeda. - Perutean domain kustom: arahkan domain milik klien sendiri ke tenant saat mereka sudah siap dengan URL brand mereka.
Perutean berbasis jalur merupakan keunggulan utama dari alur kerja isolasi ini: Anda dapat melakukan provisioning, menguji, dan menyerahkan situs klien yang sepenuhnya terisolasi sebelum DNS-nya ada. Ada juga fitur isolasi cache bawaan, sehingga para tenant tidak saling bentrok pada infrastruktur bersama. Plugin ini menonaktifkan drop-in page-cache pada setiap request, dan menambahkan ID tenant sebagai awalan pada kunci object-cache, guna mencegah tabrakan cache lintas tenant pada backend Redis atau Memcached bersama.
Isolasi domain kegagalan melalui backup dan restore per tenant
Domain kegagalan adalah aspek yang sering dilupakan orang sampai terjadinya sebuah insiden. Isolasi yang sesungguhnya berarti Anda dapat mem-backup dan me-restore salah satu klien tanpa menyentuh klien yang lain.
Versi Pro menyediakan 7 langkah backup dan 8 langkah restore per tenant yang dilengkapi dengan indikator progres AJAX, sehingga proses recovery Klien A merupakan operasi yang mandiri. Anda bisa menjadwalkan backup otomatis (setiap jam, dua kali sehari, harian, mingguan, dua mingguan, atau bulanan) dengan pengaturan timpa (override) per tenant, dan menyimpannya (offload) ke S3. Kombinasi tersebutlah yang mengubah “terisolasi” dari yang tadinya sekadar klaim arsitektur menjadi sebuah kenyataan operasional: satu tenant dapat di-rollback ke versi kemarin, sementara semua tenant lainnya tetap berjalan tanpa terpengaruh.
Membangun tenant yang terisolasi, langkah demi langkah

Berikut ini adalah alur kerja konkret untuk mendapatkan situs klien yang benar-benar terisolasi:
- Instal GrabWP Tenancy di instalasi WordPress tunggal Anda dan aktifkan.
- Buat tenant untuk klien. Pada plugin gratis, langkah ini secara otomatis menyediakan awalan tabel yang unik dan direktori uploads yang terpisah.
- Tingkatkan tenant ke isolasi penuh dengan versi Pro: berikan database MySQL atau SQLite khusus beserta direktori wp-content-nya sendiri, sehingga data dan kode benar-benar terpisah.
- Rutekan tenant menggunakan perutean berbasis jalur (
yoursite.com/site/client-a) agar Anda bisa membangun dan mengujinya tanpa DNS, kemudian pasangkan domain kustom klien pada saat penyerahan. - Tetapkan jadwal backup untuk tenant tersebut, tambahkan target offload S3, dan jalankan satu backup manual beserta uji restore untuk memastikan domain kegagalan sudah benar-benar terisolasi.
- Kloning dari tenant dasar saat Anda membutuhkan titik awal yang bisa digunakan kembali: proses kloning akan menyalin tabel DB dan uploads sekaligus mengganti URL secara otomatis (melewati symlink), sehingga klien baru memulai dari konfigurasi stack standar Anda.
Hasil akhirnya adalah hanya ada satu instalasi yang perlu Anda perbarui dan pantau, namun setiap klien berada dalam batasan data, kode, dan pemulihannya sendiri.
Kapan isolasi menjadi hal yang sangat penting
Tidak semua proyek membutuhkan database khusus. Namun, isolasi bukan lagi sebuah pilihan opsional ketika:
- Anda meng-hosting pekerjaan klien yang secara kontrak menjadi tanggung jawab Anda, di mana insiden pada satu klien tidak boleh dibiarkan berdampak pada klien yang lain.
- Klien menjalankan versi plugin atau tema yang saling berkonflik sehingga tidak bisa dijalankan secara berdampingan di wp-content yang dibagikan.
- Anda memerlukan batas kegagalan dan pemulihan per klien yang bersih, agar proses restore yang buruk atau tabel yang korup hanya menjadi masalah satu klien tersebut, bukan masalah seluruh jaringan klien Anda.
- Anda menginginkan arsitektur isolasi data yang bisa Anda jelaskan dengan jujur kepada klien yang menanyakan di mana data mereka disimpan.
Untuk melihat lebih dalam kapan model penggunaan bersama mulai bermasalah, bacalah kapan tidak menggunakan WordPress Multisite dan juga perbandingan Multisite vs multi-tenancy secara lengkap.
Mulai sekarang
Mulailah dengan plugin GrabWP Tenancy gratis untuk mendapatkan awalan tabel unik, uploads yang terpisah, serta perutean jalur tanpa DNS. Ketika seorang klien membutuhkan isolasi penuh (database MySQL atau SQLite khusus, pemisahan wp-content sepenuhnya, serta backup dan restore per tenant), lakukan upgrade ke GrabWP Tenancy Pro seharga $9.99/month.
Pertanyaan yang sering diajukan
- Mengapa awalan tabel Multisite tidak dihitung sebagai isolasi yang nyata?
- Multisite menggunakan satu database dan satu direktori wp-content untuk setiap subsitus, yang hanya dibedakan berdasarkan ID blog dan awalan tabel (table prefix) di dalam satu database tunggal tersebut. Kueri yang crash, tabel yang korup, atau plugin yang menulis di luar cakupannya dapat memengaruhi seluruh jaringan. Awalan hanya memisahkan baris, bukan domain kegagalan, sehingga masalah di satu situs masih dapat membuat situs lainnya down.
- Dapatkah saya mengisolasi situs klien tanpa mengubah DNS atau membuat server baru?
- Ya. GrabWP Tenancy mendukung perutean berbasis jalur seperti yoursite.com/site/client-a tanpa perubahan DNS, berdampingan dengan opsi perutean domain kustom. Setiap tenant berjalan dari instalasi yang sama, sehingga Anda dapat menambahkan situs klien terisolasi tanpa akun hosting atau record DNS baru.
- Apa perbedaan antara plugin gratis dan Pro untuk isolasi?
- Plugin GrabWP Tenancy gratis memberi setiap tenant awalan tabel unik dan direktori uploads terpisah, yang mana ini adalah isolasi parsial. Versi Pro menambahkan database MySQL atau SQLite khusus per tenant beserta pemisahan wp-content sepenuhnya, sehingga tema, plugin, uploads, dan data terisolasi sepenuhnya untuk setiap klien.
Editorial standards: Our content is written by WordPress experts with hands-on multi-tenancy experience. Articles are fact-checked and regularly updated to ensure accuracy.