Чи можемо ми використовувати одну установку WordPress для декількох баз даних, доменів та каталогів вмісту


10

Я бачив кілька запитань, схожих, але всі вони закінчилися багатостороннім . Для ремонтопридатності, продуктивності та безпеки я не хочу використовувати багатосайт. Тож будь ласка, нехай зі мною.

Про це я думаю:

.
|_____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

Як бачите, кожен домен має власну базу даних та каталог вмісту, але лише один екземпляр WordPress. Тепер теми, плагіни та бази даних стають меншими та незалежними. Тоді, було б набагато простіше в обслуговуванні, масштабуванні ...

Але чи можливо це? Якщо ви вже відчували таку ж проблему, будь ласка, поділіться своїми думками! Я дуже ціную вашу допомогу.


1
Чому багатосторонність була виключена як можливість? Для цього буде створено тендітну систему, яка буде менш ремонтованою, ніж багатомісний, матиме більш низьку продуктивність, ніж багатосайтовий, та гіршу безпеку, ніж багатомісний. Деякі з найбільших встановлень WordPress - це багатосторонні інсталяції, і це все той же код, який працює на стандартному одиночному сайті
Tom J Nowell

Я керую декількома WP-мультисайтами, включаючи той, який має понад 500 під-сайтів. Продуктивність буде однаковою, якщо ви використовуєте один екземпляр багатомісного або 500 WP, якщо у вас немає 500 екземплярів на окремих ВМ та базах даних. Обслуговування відсмоктує багатомісний сайт? Спробуйте зберегти 500 кількості одиночних сайтів.
user42826

@TomJNowell Я не впевнений, що цей найбільший встановлений, використовуючи лише одну базу даних, як є, але я думаю, що це і це відео може привести нас до однієї сторінки. Ми в основному використовуємо WordPress для CRM, а конфіденційність користувачів дуже важлива.
SarahCoding

@ user42826 В даний час у моєї компанії не так багато сайтів. Я також не можу перетворити поточний сайт у багатосайтовий та порівняти його. А обладнання та інші речі можуть відрізнятися від вас. Тому я просто хочу запитати про оптимальну архітектуру установки в моєму випадку. Наскільки мені відомо, багатомісний сайт працює з субдоменами, але він не може працювати для різних доменів.
SarahCoding

Мультисайт працює з різними доменами. Ми використовуємо основний домен * .domain.com та кілька інших доменів, www.domain2.com та www.domain3.com. Ми використовуємо плагін для відображення домену WP для здійснення багатодоменів, але, наскільки я чую, ядро ​​WP підтримує багатодоменне відображення зараз.
user42826

Відповіді:


10

Як заявив @ tom-j-nowell у коментарі до ОП, багатомісний сайт може полегшити це.

Продуктивність та безпека насправді не є проблемою для багатосайтових сайтів (принаймні, не більше, ніж вони призначені для звичайних установок), але я погоджуюся, що багатомісний сайт іноді може бути проблемою, тому що багато плагінів (або замовних, або сторонніх) можуть не мати працювати належним чином на багатосайтових веб-сайтах, або, можливо, тому, що ви хочете, щоб користувачі різних веб-сайтів були повністю розділені.

Та сказати, що ти хочеш досягти, не так вже й важко.

Що потрібно змінити між установкою:

  • папка плагінів
  • папки тем
  • налаштування бази даних

Цю конфігурацію можна зробити за допомогою констант уwp-config.php вашій єдиній проблемі - як перемикати їх на основі URL.

Серверна змінна 'SERVER_NAME'повинна працювати для вас, принаймні, якщо ваш веб-сервер налаштований належним чином.

Наприклад, ви можете створити папку, названу /confна одному рівні wp-config.phpфайлу та /WordPressпапки.

У цю папку ви можете додати деякі файли:

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

всередині кожного з них можна зробити щось на кшталт

$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 );

Це зміниться у кожному файлі конфігурації відповідно до "гілки".

Після цього, у своєму унікальному, wp-config.phpви можете щось подібне:

$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);

Що відбувається вище, це те, що на основі імені сервера ви завантажуєте інший файл конфігурації (якщо такий знайдений) і якщо файл конфігурації не визначає жодної конфігурації за замовчуванням (або якщо файл не знайдено), конфігурація встановлюється за замовчуванням.

Приємно те, що для додання нової гілки вам просто потрібно створити папку гілки та вказати .confім'я нового домену філії, і ви зробили, що на WP стороні нічого не можна змінити.

Лінія:

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

там я отримую доменне ім’я. В якості першого варіанту я використовую змінну середовища, оскільки є ймовірність, що $_SERVER['SERVER_NAME']вона не працюватиме в контексті командного рядка, як, наприклад, при використанні WP CLI. У таких ситуаціях ви можете встановити змінну середовища, щоб змусити WP використовувати налаштування з певної гілки.

Зауважте, що в конфігураційних файлах для галузей я WP_CONTENT_DIRзмінюю папку та теми, що автоматично встановлюватимуть додатки та папки тем у відповідні /pluginsта /themesпапки папки.

Тут можлива проблема, якщо ви хочете поділитися /uploadsпапкою (куди завантажуються файли).

За замовчуванням ця папка є підпапком вмісту dir, тому використання робочого процесу над нею буде /uploadsпідпапкою кожної гілки кореневої папки.

Якщо це не є проблемою для вас, ніж просто піти з нею, інакше найпростішим рішенням буде зробити /uploadsв кожній папці гілки символьне посилання на реальну папку завантажень, якою ви хочете поділитися.


Дякую! Мені дуже подобається ваша ідея, хоча $_SERVER['SERVER_NAME']вона не є надійною . /uploadsреж - це не проблема. Я також протестував WP CLI, якщо ми передаємо --urlпараметр для кожного сайту, він працює нормально :)
SarahCoding

1
@Я сказав у відповідь: "Змінна сервер" SERVER_NAME "повинна працювати для вас, принаймні, якщо ваш веб-сервер налаштований належним чином." Це означає, що вам потрібно правильно налаштувати ваш сервер :) Насправді, доки ви налаштовуєтеся server_nameв nginx або ServerNameApache або що завгодно підходить для вашого веб-сервера, $_SERVER['SERVER_NAME']це просто працюватиме. Навіть якщо WP CLI може працювати за допомогою --urlпараметра, інші інструменти командного рядка можуть мати проблеми, якщо ви не використовуєте змінну середовища. WP CLI "знущається" над URL-адресою запиту в контексті CLI, інші команди, ймовірно, не роблять цього.
gmazzap

1
Звичайно, я переконаюся, що SERVER_NAMEправильно налаштовано. Про env vars, я використав phpdotenv, щоб виправити це. Наразі все, здається, працює чудово :)
SarahCoding

0

Це можливо за допомогою мислення та трохи планування. Я чимало бив у мережі за те саме. Нарешті, зібрав усі речі і налагодив це.

Я працював на кількох веб-сайтах, усі вони мають одну тему та папку з плагінами. Однакові папки працюють для багатосайтових та одиночних сайтів. Але вам слід бути обережними щодо певних плагінів, які можуть бути лише Multi / Single сайтом і бути химерними.

Я створив такий каталог, як master-tnp / themes та master-tnp / plugins. Потім перейдіть на посилання на ваш wordpress за допомогою команди ln -s.

Підводні камені також є в налаштуваннях сервера. Переконайтеся, що дозволено виконувати директиву щодо посилань.

Якщо ви хочете використовувати єдину установку WordPress, я склав докладний посібник щодо того, як я це зробив за адресою https://vaish.co/multiple-sites-single-wordpress-directory

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.