我们可以将一个WordPress安装用于多个数据库,域和内容目录吗


10

我已经看到了一些看起来相似的问题,但是它们都以multisite结尾。为了可维护性,性能和安全性,我不想使用多站点。所以,请忍受我。

这就是我在考虑的问题:

.
|_____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的最大安装的是多站点安装,和它的所有相同的代码,在一个标准的单一站点运行
汤姆Ĵ诺埃尔

我管理多个WP多站点,包括一个拥有500多个子站点的站点。无论您使用一个多站点实例还是500个WP实例,性能都将相同,除非您在单独的VM和数据库上拥有500个实例。可维护性对多站点不利?尝试维护500个单一站点。
user42826

@TomJNowell我不确定最大的安装量是否仅使用一个数据库,但是我认为本视频可能会将我们带到同一页面。我们主要使用WordPress进行CRM,用户隐私非常重要。
SarahCoding

@ user42826当前,我的公司没有那么多站点。我也无法将当前站点转换为多站点并对其进行基准测试。硬件和其他事物可能与您有所不同。因此,我只想问一谈我的最佳安装体系结构。据我所知,多站点可用于子域,但不能用于不同的域。
SarahCoding

多站点可与不同的域一起使用。我们使用一个主域名* .domain.com,以及其他一些域名www.domain2.com和www.domain3.com。我们使用WP域映射插件来完成多域,但是据我所知,WP核心现在原生支持多域映射。
user42826

Answers:


10

正如@ tom-j-nowell在对OP的评论中所说,多站点可以使这一过程变得更加容易。

对于多站点,性能和安全性并不是真正的问题(至少不超过常规安装的问题),但是我同意多站点有时可能是一个问题,因为许多插件(自定义或第3方)可能不会可以在多站点上正常工作,或者可能是因为您想让不同网站的用户完全分开。

也就是说,您想要实现的目标并不难。

您需要在安装之间进行更改的是:

  • 插件文件夹
  • 主题文件夹
  • 数据库设置

可以使用常量wp-config.php来完成这些配置唯一的问题是如何根据URL切换常量

'SERVER_NAME'至少在您的Web服务器配置正确的情况下,服务器变量才对您有用。

例如,您可以创建一个以/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文件夹设置为相关/plugins/themes分支子文件夹。

这里可能的问题是,如果您要共享/uploads文件夹(文件上传到该文件夹)。

默认情况下,该文件夹是内容目录的子文件夹,因此使用上述工作流将成为/uploads每个分支根文件夹的子文件夹。

如果这对您来说不是问题,那么就解决它,否则最简单的解决方案是/uploads在每个分支文件夹中建立一个指向您要共享的实际上载文件夹的符号链接。


谢谢!即使您的想法$_SERVER['SERVER_NAME']不可靠,我也很喜欢您的想法。/uploads目录不是问题。我还使用WP CLI进行了测试,如果我们--url为每个站点传递参数,则它可以正常工作:)
SarahCoding

1
@丹,我在回答中说:“服务器变量'SERVER_NAME'应该对您有用,至少在您的Web服务器配置正确的情况下。” 这意味着您需要正确配置服务器:)实际上,只要您server_name在nginx或ServerNameApache或任何适合您的Web服务器中进行设置,$_SERVER['SERVER_NAME']就可以正常工作。即使WP CLI可以使用--url参数工作,但如果您不使用环境变量,其他命令行工具也可能会出现问题。WP CLI在CLI上下文中“删除”请求的U​​RL,其他命令可能不会这样做。
gmazzap

1
当然,我将确保SERVER_NAME配置正确。关于env vars,我已经使用phpdotenv对其进行了修复。目前,一切似乎都很好:)
SarahCoding '16

0

通过符号链接和一些计划,这是可能的。对于同一件事,我在网上做了一些搜索。最后,将所有内容放在一起并使其正常工作。

我一直在运行一些网站,它们都共享相同的主题和插件文件夹。相同的文件夹适用于多站点和单个站点。但是您必须注意某些插件,这些插件只能是Multi / Single站点,并且很古怪。

我已经建立了一个目录,如master-tnp / themes和master-tnp / plugins。然后使用ln -s命令符号链接到您的wordpress目录。

陷阱也存在于服务器配置中。确保将遵循symlinks指令设置为允许。

如果您想使用Single WordPress安装,请在https://vaish.co/multiple-sites-single-wordpress-directory上收集有关其操作方式的详细指南。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.