Можем ли мы использовать одну установку WordPress для нескольких баз данных, доменов и каталогов контента

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

Это то, о чем я думаю:

. |_____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. Теперь темы, плагины и базы данных становятся меньше и независимы. Тогда было бы намного легче поддерживать, масштабировать …

Но возможно ли это? Если вы столкнулись с такой же проблемой раньше, пожалуйста, поделитесь своими мыслями! Я действительно ценю твою помощь.

Как сказал @ tom-j-nowell в комментарии к OP, multisite может сделать это проще.

Производительность и безопасность на самом деле не являются проблемой для нескольких пользователей (по крайней мере, не более, чем для обычных установок), но я согласен с тем, что многопользовательский интерфейс иногда может быть проблемой, поскольку многие плагины (как пользовательские, так и сторонние) могут не работать на многоузловом уровне или, возможно, потому, что вы хотите, чтобы пользователи разных сайтов полностью разделялись.

Это говорит о том, чего вы хотите достичь, это не так сложно.

Что нужно изменить между установкой:

  • папка плагинов
  • папка тем
  • настройки базы данных

Такая конфигурация может быть выполнена с использованием констант в 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 в каждой папке филиала символическую ссылку на настоящую папку выгрузки, которую вы хотите разделить.

Это возможно с символической привязкой и небольшим планированием. Я делал некоторые чистящие средства в сети за одно и то же. Наконец, собрать все вещи и заставить их работать.

Я запускаю несколько веб-сайтов, все они имеют одну и ту же тему и папку с плагинами. Такие же папки работают для нескольких и отдельных сайтов. Но вы должны быть осторожны в отношении некоторых плагинов, которые могут быть только Multi / Single site и быть изворотливыми.

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

Ловушки также находятся в конфигурациях сервера. Убедитесь, что в соответствии с директивой symlinks установлено разрешение.

Если вы хотите использовать установку Single WordPress, я собрал подробное руководство относительно того, как я это сделал, на странице https://vaish.co/multiple-sites-single-wordpress-directory