1つの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つしかありません。現在、テーマ、プラグイン、およびデータベースは、より小さく独立しています。そうすれば、保守、スケーリングがはるかに簡単になります...

しかし、それは可能でしょうか?以前に同じ問題を経験したことがある場合は、ご意見をお聞かせください。本当にありがとうございました。


1
なぜマルチサイトが排除されたのですか?これを行うには、マルチサイトよりも保守性が低く、マルチサイトよりもパフォーマンスが遅く、マルチサイトよりもセキュリティが悪い脆弱なシステムを作成する必要があります。WordPressの最大のインストールのいくつかはマルチサイトインストールであり、標準の単一サイトで実行されるコードはすべて同じです
Tom J Nowell

500を超えるサブサイトを含む複数のWPマルチサイトを管理しています。別個のVMとデータベースに500のインスタンスがない限り、1つのマルチサイトを使用しても500のWPインスタンスを使用しても、パフォーマンスは同じです。保守性はマルチサイトで困りますか?500個の単一サイトを維持してみてください。
user42826

@TomJNowellその最大のインストールが1つのデータベースだけを使用しているかどうかはわかりませんが、これこのビデオが同じページに移動する可能性があると思います。私たちは主にCRMにWordPressを使用しており、ユーザーのプライバシーは非常に重要です。
SarahCoding 2016年

@ user42826現在、私の会社にはそれほど多くのサイトがありません。また、現在のサイトをマルチサイトに変換してベンチマークすることもできません。そして、ハードウェアや他のものはあなたとは異なる場合があります。ですから、私の場合の最適なインストールアーキテクチャについてお聞きしたいと思います。私の知る限り、マルチサイトはサブドメインで機能しますが、異なるドメインでは機能しません。
SarahCoding 2016年

マルチサイトは異なるドメインで動作します。メインドメイン* .domain.comと、他のいくつかのドメインwww.domain2.comとwww.domain3.comを使用します。WPドメインマッピングプラグインを使用してマルチドメインを実現していますが、聞いたところによると、WPコアはマルチドメインマッピングをネイティブでサポートしています。
user42826

回答:


10

@トム・J-nowell OPにコメントで言った、マルチサイトは、これを簡単に行うことができます。

パフォーマンスとセキュリティはマルチサイトの問題ではありません(少なくとも、通常のインストールの場合と同じです)が、多くのプラグイン(カスタムまたはサードパーティのいずれか)がマルチサイトで適切に動作するか、または異なるWebサイトのユーザーを完全に分離したい場合。

それはあなたが達成したいことはそれほど難しくありませんでした。

インストール間で変更する必要があるのは次のとおりです。

  • プラグインフォルダー
  • テーマフォルダ
  • データベース設定

これらの構成は、URLに基​​づいて定数wp-config.phpを切り替える方法だけが問題である定数を使用て行うことができます。

サーバー変数'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フォルダを共有する場合(ファイルがアップロードされる場所)です。

デフォルトでは、そのフォルダーはコンテンツディレクトリのサブフォルダーであるため、上記のワークフローを使用すると、/uploads各ブランチルートフォルダーのサブフォルダーになります。

それがあなたにとって問題ではない場合は、それだけで済むのであれば、それ以外の場合の最も簡単な解決策は、共有/uploadsする実際のアップロードフォルダへのシンボリックリンクを各ブランチフォルダで作成することです。


ありがとうございました!$_SERVER['SERVER_NAME']信頼できませんが、私は本当にあなたの考えが好きです。/uploadsdirは問題ではありません。私はWP CLIでもテストし--urlました。各サイトのパラメーターを渡した場合、正常に動作します:)
SarahCoding

1
@Dan私は答えで言った:"サーバー変数 'SERVER_NAME'は、少なくともあなたのウェブサーバーが適切に設定されているなら、あなたのために機能するはずです。" それはあなたがサーバーを適切に設定する必要があることを意味します:)実際、server_namenginxまたはServerNameApacheまたはあなたのウェブサーバーに適合するものでセットアップする限り、うまく$_SERVER['SERVER_NAME']いくでしょう。WP CLIが--urlパラメーターを使用して機能する場合でも、環境変数を使用しないと、他のコマンドラインツールで問題が発生する可能性があります。WP CLIは、CLIコンテキストで要求のURLを「模倣」します。他のコマンドはおそらくそれを行いません。
gmazzap

1
もちろん、SERVER_NAME適切に構成されていることを確認します。環境変数については、phpdotenvを使用して修正しました。現在、すべてがうまく機能しているようです:)
SarahCoding

0

これはシンボリックリンクと少しの計画で可能です。同じことをネットで調べた。最後に、すべてのものをまとめて動作させます。

私はいくつかのWebサイトを実行していますが、すべて同じテーマとプラグインフォルダーを共有しています。同じフォルダーがマルチサイトと単一サイトで機能します。ただし、マルチ/シングルサイトのみであり、風変わりなプラグインには注意する必要があります。

master-tnp / themesやmaster-tnp / pluginsのようなディレクトリを作成しました。次に、ln -sコマンドを使用して、ワードプレスディレクトリにシンボリックリンクします。

落とし穴はサーバー構成にもあります。follow symlinksディレクティブが許可に設定されていることを確認します。

単一のWordPressインストールを使用したい場合は、https://vaish.co/multiple-sites-single-wordpress-directoryで詳細なガイドをまとめました

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.