Czy możemy użyć jednej instalacji WordPress dla wielu baz danych, domen i katalogów treści

10

Widziałem kilka pytań, które wyglądają podobnie, ale wszystkie zakończyły się wieloma witrynami . Ze względu na łatwość konserwacji, wydajność i bezpieczeństwo nie chcę korzystać z wielu witryn. Więc proszę o wyrozumiałość.

Właśnie o tym myślę:

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

Jak widać, każda domena ma własną bazę danych i katalog treści, ale tylko jedną instancję WordPress. Teraz motywy, wtyczki i bazy danych stają się mniejsze i niezależne. Wówczas znacznie łatwiej byłoby utrzymać, skalować ...

Ale czy to możliwe? Jeśli miałeś wcześniej ten sam problem, podziel się swoimi przemyśleniami! Doceniam twoją pomoc.

SarahCoding
źródło
1
Dlaczego multisite zostało wyeliminowane jako możliwość? Będzie to wymagało stworzenia delikatnego systemu, który będzie mniej wymagalny w utrzymaniu niż wiele witryn, będzie miał niższą wydajność niż wiele witryn, a gorsze bezpieczeństwo niż wiele witryn. Niektóre z największych instalacji WordPressa to instalacje wielostanowiskowe, i to ten sam kod, który działa na standardowej pojedynczej stronie
Tom J Nowell
Zarządzam wieloma lokalizacjami WP, w tym jednym, który ma ponad 500 podstron. Wydajność będzie taka sama, bez względu na to, czy używasz jednej instancji wielozakładowej, czy 500 wystąpień WP, chyba że masz 500 wystąpień na osobnych maszynach wirtualnych i bazach danych. Utrzymanie jest do bani z wieloma witrynami? Spróbuj utrzymać 500 liczby pojedynczych witryn.
user42826,
@TomJNowell Nie jestem pewien, czy ta największa instalacja używa tylko jednej bazy danych, ale myślę, że ten i ten film wideo mogą doprowadzić nas do tej samej strony. Używamy głównie WordPress do CRM, a prywatność użytkowników jest bardzo ważna.
SarahCoding
@ user42826 Obecnie moja firma nie ma tak wielu witryn. Nie mogę również przekonwertować bieżącej witryny na wiele witryn i przeprowadzić testu porównawczego. A sprzęt i inne rzeczy mogą się od Ciebie różnić. Chcę tylko zapytać o optymalną architekturę instalacji w moim przypadku. O ile mi wiadomo, multisite działa z subdomenami, ale nie może działać dla różnych domen.
SarahCoding
Multisite działa z różnymi domenami. Korzystamy z domeny głównej * .domain.com oraz kilku innych domen, www.domain2.com i www.domain3.com. Używamy wtyczki WP Domain mapping do tworzenia wielu domen, ale z tego, co słyszę, rdzeń WP obsługuje mapowanie wielu domen teraz.
user42826,

Odpowiedzi:

10

Jak powiedział @ tom-j-nowell w komentarzu do OP, multisite może to ułatwić.

Wydajność i bezpieczeństwo nie są tak naprawdę problemem dla wielu witryn (przynajmniej nie więcej niż dla zwykłych instalacji), ale zgadzam się, że wiele witryn może czasami stanowić problem, ponieważ wiele wtyczek (niestandardowych lub zewnętrznych) może nie działa poprawnie na wielu witrynach, a może dlatego, że chcesz całkowicie oddzielić użytkowników różnych witryn.

To powiedziawszy, co chcesz osiągnąć, nie jest takie trudne.

To, co musisz zmienić między instalacjami, to:

  • folder wtyczek
  • folder motywów
  • ustawienia bazy danych

Tych konfiguracji można dokonać za pomocą stałych.wp-config.php Jedynym problemem jest przełączanie ich na podstawie adresu URL.

Zmienna serwera 'SERVER_NAME'powinna działać dla Ciebie, przynajmniej jeśli Twój serwer WWW jest poprawnie skonfigurowany.

Na przykład możesz utworzyć folder o nazwie /confna tym samym poziomie wp-config.phppliku i /WordPressfolderu.

W tym folderze możesz dodać niektóre pliki:

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

w każdym z nich możesz zrobić coś takiego

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

To zmieni się w każdym pliku konfiguracyjnym zgodnie z „oddziałem”.

Następnie w swoim unikatowym narzędziu wp-config.phpmożesz zrobić coś takiego:

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

To, co dzieje się powyżej, polega na tym, że na podstawie nazwy serwera ładujesz inny plik konfiguracyjny (jeśli został znaleziony) i jeśli plik konfiguracyjny nie definiuje żadnej z konfiguracji domyślnej (lub jeśli plik nie został znaleziony) konfiguracja jest ustawiana domyślnie.

Fajną rzeczą jest to, że aby dodać nową gałąź, wystarczy utworzyć folder gałęzi i podać .confnazwę po nowej domenie gałęzi, i gotowe - nie ma nic do zmiany po stronie WP.

Linia:

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

to gdzie dostaję nazwę domeny. Jako pierwszą opcję używam zmiennej środowiskowej, ponieważ są szanse, $_SERVER['SERVER_NAME']że nie będą działać w kontekście wiersza poleceń, np. Podczas korzystania z WP CLI. W takich sytuacjach można ustawić zmienną środowiskową, aby zmusić WP do korzystania z ustawień z określonej gałęzi.

Zauważ, że w plikach konfiguracyjnych specyficznych dla gałęzi zmieniam WP_CONTENT_DIRi, który automatycznie ustawi folder wtyczek i motywów na powiązane /pluginsi /themespodfoldery gałęzi.

Możliwym problemem jest tutaj, jeśli chcesz udostępnić /uploadsfolder (gdzie pliki są przesyłane).

Domyślnie ten folder jest podfolderem zawartości katalogu, więc przy użyciu powyższego przepływu pracy będzie on /uploadspodfolderem każdego folderu głównego oddziału.

Jeśli nie jest to dla ciebie problemem, po prostu idź z nim, w przeciwnym razie najłatwiejszym rozwiązaniem byłoby uczynienie /uploadsw każdym folderze oddziału dowiązania symbolicznego do prawdziwego folderu przesyłania, który chcesz udostępnić.

gmazzap
źródło
Dziękuję Ci! Naprawdę podoba mi się twój pomysł, chociaż $_SERVER['SERVER_NAME']nie jest wiarygodny . /uploadsreż nie jest problemem. Testowałem również z WP CLI, jeśli przekażemy --urlparametr dla każdej strony, działa normalnie :)
SarahCoding
1
@ Czy powiedziałem w odpowiedzi: „Zmienna serwera„ SERVER_NAME ”powinna działać dla ciebie, przynajmniej jeśli twój serwer jest poprawnie skonfigurowany”. Oznacza to, że musisz poprawnie skonfigurować serwer :) Tak naprawdę, dopóki skonfigurujesz server_namew Nginx, ServerNameApache lub cokolwiek, co pasuje do twojego serwera, $_SERVER['SERVER_NAME']po prostu będzie działać. Nawet jeśli WP CLI może --urldziałać przy użyciu parametru, inne narzędzia wiersza poleceń mogą mieć problemy, jeśli nie używasz zmiennej środowiskowej. WP CLI „wyśmiewa” adres URL żądania w kontekście CLI, inne polecenia prawdopodobnie tego nie zrobią.
gmazzap
1
Oczywiście upewnię się, że SERVER_NAMEjest poprawnie skonfigurowany. Jeśli chodzi o env vars, użyłem phpdotenv, aby to naprawić. Obecnie wszystko wydaje się działać świetnie :)
SarahCoding
0

Jest to możliwe dzięki symlinkowaniu i odrobinie planowania. Poszukałem w sieci tego samego. Na koniec zbierz wszystkie rzeczy i spraw, by działały.

Uruchomiłem kilka stron internetowych, wszystkie mają ten sam folder motywów i wtyczek. Te same foldery działają dla wielu witryn i pojedynczych witryn. Ale musisz uważać na niektóre wtyczki, które mogą być tylko witryną Multi / Single i być dziwaczne.

Stworzyłem katalog taki jak master-tnp / themes i master-tnp / plugins. Następnie dowiązanie symboliczne do katalogu wordpress za pomocą polecenia ln -s.

Pułapki występują również w konfiguracjach serwerów. Upewnij się, że ustawiono opcję Śledź dowiązania symboliczne.

Jeśli chcesz skorzystać z instalacji Single WordPress, przygotowałem szczegółowy przewodnik na temat tego, jak to zrobiłem, pod adresem https://vaish.co/multiple-sites-single-wordpress-directory

Cpyder
źródło