Bisakah kita menggunakan satu instalasi WordPress untuk beberapa database, domain, dan direktori konten


10

Saya telah melihat beberapa pertanyaan yang terlihat serupa, tetapi semuanya berakhir dengan multisite . Untuk pemeliharaan, kinerja, dan keamanan, saya tidak ingin menggunakan multisite. Jadi tolong bersabarlah.

Inilah yang saya pikirkan:

.
|_____branch1 // for branch1.domain.com
|  |_____themes
|  |_____plugins
|
|_____branch2 // for branch2.domain.com
|  |_____themes
|  |_____plugins
|
|_____branch3 // for branch3.domain.com
|  |_____themes
|  |_____plugins
|
|_____index.php
|_____WordPress
|_____wp-config.php

Seperti yang Anda lihat, setiap domain memiliki basis data dan direktori konten sendiri tetapi hanya satu contoh WordPress. Sekarang, tema, plugin, dan basis data menjadi lebih kecil dan independen. Maka, akan lebih mudah untuk mempertahankan, ...

Tetapi apakah itu mungkin? Jika Anda pernah mengalami masalah yang sama sebelumnya, silakan bagikan pendapat Anda! Saya sangat menghargai bantuan Anda.


1
Mengapa multisite dihilangkan sebagai suatu kemungkinan? Melakukan hal ini akan melibatkan pembuatan sistem yang rapuh yang akan lebih sedikit pemeliharaannya daripada multisite, memiliki kinerja lebih lambat daripada multisite, dan keamanan yang lebih buruk daripada multisite. Beberapa pemasangan WordPress terbesar adalah pemasangan multisite, dan semuanya adalah kode yang sama yang berjalan di satu situs standar
Tom J Nowell

Saya mengelola beberapa multisite WP termasuk yang memiliki lebih dari 500 sub-situs. Kinerja akan sama apakah Anda menggunakan satu instance multisite atau 500 WP kecuali Anda memiliki 500 instance pada VM dan basis data yang terpisah. Maintabilitas sucks dengan multisite? Coba pertahankan 500 jumlah situs tunggal.
user42826

@ TomJNowell Saya tidak yakin apakah instalasi terbesar hanya menggunakan satu database, tapi saya pikir ini dan video ini mungkin membawa kita ke halaman yang sama. Kami terutama menggunakan WordPress untuk CRM dan privasi pengguna sangat penting.
SarahCoding

@ user42826 Saat ini, perusahaan saya tidak memiliki banyak situs. Saya juga tidak dapat mengonversi situs saat ini ke multisite dan membandingkannya. Dan perangkat keras dan hal-hal lain mungkin berbeda dari Anda. Jadi saya hanya ingin bertanya tentang arsitektur instalasi yang optimal dalam kasus saya. Sejauh yang saya tahu, multisite berfungsi dengan subdomain tetapi tidak bisa digunakan untuk domain yang berbeda.
SarahCoding

Multisite berfungsi dengan berbagai domain. Kami menggunakan domain utama, * .domain.com, dan beberapa domain lainnya, www.domain2.com dan www.domain3.com. Kami menggunakan plugin pemetaan WP Domain untuk menyelesaikan multidomain, tetapi dari apa yang saya dengar, WP core mendukung pemetaan multidomain sekarang secara asli.
user42826

Jawaban:


10

Seperti @ tom-j-nowell mengatakan dalam komentar untuk OP, multisite dapat membuat ini lebih mudah.

Kinerja dan keamanan sebenarnya bukan masalah bagi multisite (setidaknya, tidak lebih dari itu untuk instalasi reguler), tetapi saya setuju bahwa multisite kadang-kadang bisa menjadi masalah, karena banyak plugin (baik custom atau pihak ke-3) mungkin tidak berfungsi dengan baik di multisite, atau mungkin karena Anda ingin memisahkan pengguna dari situs web yang berbeda.

Yang mengatakan apa yang ingin Anda capai tidaklah sulit.

Yang perlu Anda ubah di antara instalasi adalah:

  • folder plugin
  • folder tema
  • pengaturan basis data

Konfigurasi tersebut dapat dilakukan dengan menggunakan konstanta dalamwp-config.php satu-satunya masalah Anda adalah bagaimana cara mengubahnya berdasarkan URL.

Variabel server 'SERVER_NAME'harus bekerja untuk Anda, setidaknya jika server web Anda dikonfigurasi dengan benar.

Misalnya Anda dapat membuat folder bernama /confpada tingkat yang sama dari wp-config.phpfile yang dan /WordPressfolder.

Di folder itu Anda dapat menambahkan beberapa file:

  • branch1.domain.com.conf
  • branch2.domain.com.conf
  • branch3.domain.com.conf

di dalam masing-masing Anda dapat melakukan sesuatu seperti

$branch = 'branch1';
$base_dir = dirname( __DIR__) . "/{$branch}";

defined( 'WP_CONTENT_DIR' ) or define( 'WP_CONTENT_DIR', $base_dir );

// be sure WP understand URLs correctly
defined( 'DB_HOME' ) or define( 'DB_HOME', "{$branch}.example.com" );
defined('WP_SITEURL') or define('WP_SITEURL', "{$branch}.example.com/WordPress");

// adjust DB settings  as needed
defined( 'DB_NAME' ) or define( 'DB_NAME', $branch );
defined( 'DB_USER' ) or define( 'DB_USER', $branch );
defined( 'DB_PASSWORD' ) or define( 'DB_PASSWORD', '********' );

unset( $base_dir, $branch );

Ini akan berubah pada setiap file konfigurasi sesuai dengan "cabang".

Setelah itu, dalam keunikan wp-config.phpAnda, Anda dapat sesuatu seperti:

$defaults_conf = [
  'WP_CONTENT_DIR' => __DIR__ . '/branch1',
  'DB_HOST'        => 'localhost',
  'DB_NAME'        => 'branch1',
  'DB_USER'        => 'branch1',
  'DB_PASSWORD'    => '********',
];

$host = getenv('WORDPRESS_HOST') ?: $_SERVER['SERVER_NAME'];

if ($host && file_exists(__DIR__."/conf/{$host}.conf")) {
  require __DIR__."/conf/{$host}.conf";
}

array_walk($defaults_conf, function($value, $name) {
   defined($name) or define($name, $value);
});

unset($defaults_conf, $host);

Apa yang terjadi di atas adalah bahwa berdasarkan nama server Anda memuat file konfigurasi yang berbeda (jika ditemukan) dan jika file konfigurasi tidak menentukan konfigurasi default apa pun (atau jika file tidak ditemukan) konfigurasi ditetapkan per default.

Yang menyenangkan adalah bahwa untuk menambah cabang baru, Anda hanya perlu membuat folder cabang dan memberikan .confnama setelah domain cabang baru, dan Anda selesai, tidak ada yang berubah di sisi WP.

Garis:

 $host = getenv('WORDPRESS_HOST') ?: $_SERVER['SERVER_NAME'];

adalah tempat saya mendapatkan nama domain. Sebagai opsi pertama saya menggunakan variabel lingkungan, karena ada kemungkinan $_SERVER['SERVER_NAME']tidak akan berfungsi pada konteks baris perintah, seperti kita saat menggunakan WP CLI. Dalam situasi tersebut, Anda dapat mengatur variabel lingkungan untuk memaksa WP menggunakan pengaturan dari cabang tertentu.

Perhatikan bahwa di cabang-spesifik file konfigurasi saya mengubah WP_CONTENT_DIRdan yang secara otomatis akan mengatur plugin dan tema folder ke terkait /pluginsdan /themessubfolder cabang.

Masalah yang mungkin terjadi di sini adalah jika Anda ingin membagikan /uploadsfolder (tempat file diunggah).

Secara default folder itu adalah subfolder dari dir konten, jadi menggunakan alur kerja di atasnya akan menjadi /uploadssubfolder dari setiap folder root cabang.

Jika itu bukan masalah bagi Anda, daripada hanya pergi dengannya, jika tidak solusi termudah adalah membuat /uploadsdi setiap folder cabang symlink ke folder unggahan nyata yang ingin Anda bagikan.


Terima kasih! Saya sangat suka ide Anda meskipun $_SERVER['SERVER_NAME']tidak dapat diandalkan . /uploadsdir tidak masalah. Saya juga telah menguji dengan WP CLI, jika kita --urlmemasukkan parameter untuk setiap situs, ia bekerja secara normal :)
SarahCoding

1
@Dan saya katakan dalam jawaban: "Variabel server 'SERVER_NAME' harus bekerja untuk Anda, setidaknya jika server web Anda dikonfigurasi dengan benar." Itu berarti bahwa Anda perlu mengkonfigurasi server Anda dengan benar :) Sebenarnya, selama Anda men-setup server_namedi nginx atau ServerNamedi Apache atau apa pun yang cocok dengan server web Anda, $_SERVER['SERVER_NAME']hanya akan berfungsi. Bahkan jika WP CLI dapat bekerja menggunakan --urlparameter, alat baris perintah lainnya mungkin memiliki masalah jika Anda tidak menggunakan variabel lingkungan. WP CLI "mengolok-olok" URL permintaan dalam konteks CLI, perintah lain mungkin tidak akan melakukannya.
gmazzap

1
Tentu saja, saya akan memastikan bahwa SERVER_NAMEsudah dikonfigurasi dengan benar. Tentang env vars, saya telah menggunakan phpdotenv untuk memperbaikinya. Saat ini, semuanya tampak bekerja dengan baik :)
SarahCoding

0

Ini dimungkinkan dengan symlinking dan sedikit perencanaan. Saya melakukan penjelajahan di internet untuk hal yang sama. Akhirnya, kumpulkan semua barang dan mulai bekerja.

Saya telah menjalankan beberapa situs web, semuanya berbagi tema dan folder plugin yang sama. Folder yang sama berfungsi untuk situs multisite dan tunggal. Tetapi Anda harus berhati-hati tentang plugin tertentu yang dapat menjadi situs Multi / Tunggal saja dan unik.

Saya telah membuat direktori seperti master-tnp / themes dan master-tnp / plugins. Kemudian symlink ke direktori wordpress Anda menggunakan perintah ln -s.

Perangkap dalam konfigurasi server juga. Pastikan ikuti arahan symlink diatur untuk memungkinkan.

Jika Anda ingin menggunakan instalasi WordPress tunggal, saya telah mengumpulkan panduan terperinci tentang bagaimana saya melakukannya di https://vaish.co/multiple-sites-single-wordpress-directory

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.