여러 데이터베이스, 도메인 및 컨텐츠 디렉토리에 하나의 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

하위 사이트가 500 개가 넘는 사이트를 포함하여 여러 WP 멀티 사이트를 관리합니다. 별도의 VM과 데이터베이스에 500 개의 인스턴스가없는 경우 하나의 다중 사이트 또는 500 개의 WP 인스턴스를 사용하더라도 성능은 동일합니다. 다중 사이트로 유지 관리가 어려움? 500 개의 단일 사이트를 유지하십시오.
user42826

그대로 그 최대 설치 수는 하나의 데이터베이스를 사용하는 경우 @TomJNowell 난 안 확신하지만 난 생각 이 비디오는 동일한 페이지에 우리를 가져올 수 있습니다. 우리는 주로 CRM에 WordPress를 사용하고 있으며 사용자 개인 정보는 매우 중요합니다.
SarahCoding 2016 년

@ user42826 현재 회사에는 사이트가 많지 않습니다. 또한 현재 사이트를 다중 사이트로 변환하여 벤치마킹 할 수 없습니다. 그리고 하드웨어와 다른 것들이 당신과 다를 수 있습니다. 따라서 필자의 경우 최적의 설치 아키텍처에 대해 묻고 싶습니다. 내가 아는 한 다중 사이트는 하위 도메인과 작동하지만 다른 도메인에서는 작동하지 않습니다.
SarahCoding 2016 년

멀티 사이트는 다른 도메인에서 작동합니다. 우리는 기본 도메인 * .domain.com과 다른 도메인 인 www.domain2.com 및 www.domain3.com을 사용합니다. 우리는 WP 도메인 매핑 플러그인을 사용하여 멀티 도메인을 달성했지만 WP 코어는 이제 기본적으로 멀티 도메인 매핑을 지원한다고 들었습니다.
user42826

답변:


10

따라 @ 탐-J-노웰 OP에 코멘트 말했다, 다중이 쉽게 할 수 있습니다.

성능 및 보안은 실제로 다중 사이트에 대한 문제는 아니지만 (최소한 일반 설치에 대한 것 이상) 다중 플러그인 (사용자 정의 또는 타사)이 그렇지 않을 수 있기 때문에 다중 사이트가 문제가 될 수 있음에 동의합니다. 여러 사이트에서 제대로 작동하거나 다른 웹 사이트의 사용자를 완전히 분리하고 싶을 수도 있습니다.

그것은 당신이 달성하고자하는 것이 그렇게 어렵지는 않다고 말했습니다.

설치간에 변경해야 할 사항은 다음과 같습니다.

  • 플러그인 폴더
  • 테마 폴더
  • 데이터베이스 설정

이러한 구성은 유일한 문제로 상수를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파일을 업로드 하는 폴더 를 공유하려는 경우 입니다.

기본적으로 해당 폴더는 content dir의 하위 폴더이므로 위의 워크 플로를 사용하면 /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올바르게 구성되었는지 확인하겠습니다 . env vars에 대해서는 phpdotenv 를 사용 하여 수정했습니다. 현재 모든 것이 잘 작동하는 것 같습니다 :)
SarahCoding

0

이것은 심볼릭 링크와 약간의 계획으로 가능합니다. 나는 같은 일을 위해 그물을 닦았습니다. 마지막으로 모든 것을 정리하고 작동시킵니다.

나는 몇 개의 웹 사이트를 운영하고 있으며, 모두 동일한 테마와 플러그인 폴더를 공유합니다. 다중 사이트 및 단일 사이트에 대해 동일한 폴더가 작동합니다. 그러나 다중 / 단일 사이트 일 수 있고 기발한 특정 플러그인에주의해야합니다.

master-tnp / themes 및 master-tnp / plugins와 같은 디렉토리를 만들었습니다. 그런 다음 ln -s 명령을 사용하여 워드 프레스 디렉토리로 심볼릭 링크하십시오.

함정은 서버 구성에도 있습니다. 따르기 symlinks 지시문이 허용되도록 설정되어 있는지 확인하십시오.

단일 WordPress 설치를 사용하려면 https://vaish.co/multiple-sites-single-wordpress-directory 에서 어떻게 수행했는지에 대한 자세한 가이드를 작성했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.