Wiele witryn, jeden Drupal

Tytuł tego artykułu to nie propozycja nowego hasła reklamowego, a skrótowy opis funkcji multisite, o której wspomina się w dokumentacji dołączonej do Drupala, a dającej możliwość wykorzystania jednej instalacji Drupala do budowy wielu witryn.

Spis treści

  • Zalety
  • Wprowadzenie
    1. nazewnictwo katalogów
    2. tabele bazy danych
    3. współdzielenie tabel
  • Instalacja
    1. settings.php
    2. dowiązanie/alias
    3. konfiguracja nowej witryny
    4. konfiguracja współdzielenia tabel (opcjonalnie)

Zalety

  • oszczędność miejsca
    wszystkie strony korzystają z tych samych plików Drupala
  • prostsza aktualizacja
    jednokrotna aktualizacja plików
  • możliwość współdzielenia tabel bazy danych
    logowanie do wszystkich stron jednym loginem i hasłem, uproszczenie zarządzania wieloma witrynami

Wprowadzenie

Poniższy opis zakłada, że korzystasz z Drupala w wersji 5.0 lub wyższej!

Drupal przechowuje informacje o obsługiwanych witrynach w podkatalogu sites. Na początku znajduje się tam kolejny podkatalog, default, wraz z plikiem settings.php. W pliku tym instalator, bądź Ty sam, umieścił konfigurację witryny, między innymi informacje o bazie danych i adresie.

1. nazewnictwo katalogów

Każda dodatkowa drupalowa witryna powinna mieć własny podkatalog w sites, z własnym plikiem konfiguracyjnym settings.php. Nazwa podkatalogu powinna odpowiadać adresowi witryny. Rozważmy trzy możliwości:

witryna w podkatalogu
adres witryny: przykładowy-adres.pl/strona

nazwa katalogu: przykładowy-adres.pl.strona

witryna jako subdomena
adres witryny: strona.przykładowy-adres.pl

nazwa katalogu: strona.przykładowy-adres.pl

witryna z własną domeną
adres witrny: przykładowy-adres.pl

nazwa katalogu: przykładowy-adres.pl

2. tabele bazy danych

Musisz podjąć decyzję, czy chcesz umieścić tabele bazy danych nowej strony wewnątrz obecnej bazy, czy w nowej bazie:

wewnątrz obecnej bazy
tabele nowej bazy będą się różnić od starych prefiksem, np. prefiks_node zamiast node
w nowej bazie
konieczne utworzenie nowej bazy o tej samej nazwie użytkownika i haśle co stara!

3. współdzielenie tabel

Jeśli zamierzasz stworzyć zupełnie niezależną witrynę, pomiń ten punkt i wszystkie kolejne dotyczące współdzielenia tabel.

Jeśli natomiast chciałbyś zapewnić użytkownikom możliwość logowania się do kilku Twoich witryn za pomocą jednego loginu i hasła lub uchronić się od konieczności instalowania tłumaczenia osobno dla każdej witryny, powinieneś rozważyć współdzielenie niektórych tabel między witrynami.

Instalacja

1. settings.php

Załóżmy, że Twoja nowa strona będzie się znajdować pod adresem strona.pl. Wyślij więc na serwer, do utworzonego przez Ciebie podkatalogu sites/strona.pl, plik settings.php z paczki Drupala. Następnie nadaj innym, już na serwerze, uprawnienia do zapisu do niego (chmod 666).

2. dowiązanie/alias

Teraz musisz spowodować by podkatalog, subdomena lub nowa domena kierowały do plików starej strony.

Uwaga, w większości przypadków przy tworzeniu subdomeny tworzony jest także podkatalog o odpowiadającej jej nazwie. Należy go usunąć!

To bardzo istotny punkt. Do jego realizacji potrzebujesz dostępu do linii poleceń serwera lub demona cron lub tworzenia wskaźników domen z opcją "alias".

W pierwszym i drugim przypadku chodzi o wydanie polecenia:

ln -s /katalog/głównej/witryny /katalog/nowej/witryny

Katalog nowej strony tak naprawdę nie istnieje fizycznie na serwerze, a zamiast niego tworzymy tak zwane dowiązanie symboliczne. Ścieżki muszą być pełne, to znaczy, rozpoczynać się muszą od głównego katalogu serwera (np. /home/użytkownik/public_html/strona).

W trzecim przypadku wykorzystujemy dostępną w panelu zarządzania stroną opcję "wskaźników domen" i tworzymy nową domenę lub subdomenę wskazującą na starą.

Zanim alias zacznie działać, może upłynąć trochę czasu.

3. konfiguracja nowej witryny

Jeśli adres Twojej nowej witryny jest już dostępny, uruchom skrypt instalacyjny, przechodząc na stronę strona.pl/install.php (adres przykładowy). Wprowadź potrzebne dane, takie jak nazwa i hasło użytkownika bazy danych, nazwa samej bazy, itd.

Jeśli nowa witryna ma korzystać z tej samej bazy danych, co poprzednia, ustal prefiks dla tabel bazy, pod Advanced options, w polu Table prefix.

Instalator utworzy tabele w bazie danych i wstępnie skonfiguruje witrynę. Jeżeli nie masz zamiaru współdzielić żadnych z nich, jest to już dla Ciebie koniec instalacji. Gratulacje! W przeciwnym wypadku wykonaj jeszcze czynności opisane w kolejnym punkcie.

4. konfiguracja współdzielenia tabel (opcjonalnie)

Każda z tabel bazy danych Drupala odpowiada za inną funkcję. To, które tabele Drupal ma współdzielić pomiędzy witrynami, ustala się w pliku settings.php nowoutworzonej witryny. Pobierz go z odpowiedniego dla Twojej nowej witryny podkatalogu na serwerze i otwórz. Instalator zapisał tam dane, więc edycja innego pliku byłaby błędem.

Zwróć uwagę na zmienną $db_prefix. To jej wartość będziesz musiał zmienić, zależnie od tego, które z tabel chcesz współdzielić, oraz tego, czy będziesz korzystać z jednej bazy danych z różnymi prefiksami tabel, czy większej ilości baz.

jedna baza danych
'default' => 'prefiks_'
dwie lub więcej baz
'default' => 'baza.'

Przykładowa konfiguracja dla witryn korzystających z jednej bazy, umożliwiająca pojedynczą rejestrację użytkowników:

$db_prefix = array(
'default' => 'prefiks_',
'authmap' => '',
'permission' => '',
'profile_fields' => '',
'profile_values' => '',
'role' => '',
'sequences' => '',
'sessions' => '',
'users' => '',
'users_roles' => ''
);

Wyróżnione tabele będą współdzielone, natomiast w przypadku innych, wyszukiwane będą te poprzedzone prefiksem prefiks_.

Uwaga! Jeśli korzystasz z Drupala 5 lub starszego i zamierzasz współdzielić konta użytkowników (a więc tabele users i sequences), koniecznie przeczytaj o problemie związanym z nadpisywaniem danych kont użytkowników. Nie dotyczy on Drupala 6.

Możesz współdzielić także inne tabele, jednak wskazana jest tutaj daleko idąca ostrożność. Współdzielenie części z nich może powodować błędy w działaniu stron. Oto inne "bezpieczne" ustawienia:

'filter_formats' => '',
'filters' => '',
'locales_meta' => '',
'locales_source' => '',
'locales_target' => '',

Powodują one współdzielenie filtrów i tłumaczeń.

To już wszystko.

Sposób wyświetlania odpowiedzi

Wybierz preferowany sposób wyświetlania odpowiedzi i kliknij "Zachowaj ustawienia", by wprowadzić zmiany.
Portret użytkownika palik

oszkurna

moderator

właśnie z drżeniem serca i rąk zrobiłem swoją pierwszą instalację multisite z użyciem 5.1 – na razie bez dzielenia tabelek, ale i tak jest wesoło :)

tabele w bazie danych

Ma ktoś namiary na tekst w sieci dot. struktury tabel w bazie danych Drupala. Chodzi mi też o opisy tych tabel. Chciałbym wiedzieć jakie tabele za co odpowiadają, żeby odpowiednio poustawiać współdzieleni­e. Dzięki

Portret użytkownika palik

haczyk

moderator

ostatnio miałem taki dziwny temat, otóż niby wszystko zrobiłem poprawnie, ale po wejsćiu na subdomena.strona.pl pokazywał się komunikat że Drupal already installed.

Ostatecznie okazało się że były źle ustawione chmody (uprawnienia do katalogów na serwerze) i nie mogąc odczytać konfiguracji z sites/subdo­mena../settin­gs.php czytał ją z /sites/default/set­tings.php

ot mała wskazówka dla potomnych – zawsze sprawdzajcie czy serwer ma prawo do zapisu w pliku settings i w katalogach sites*

pozdr!

--
drupal w akcji?
http://palikowski.net
http://basoofka.net

frontpage

Jak rozwiązać problem z stroną startową?

Mam tablele wspołdzielne, część artykułów powtarza się na jednej i drugiej stronie. Przy publikacji artykułu zaznaczam opcje publikacji na głównej (tabela node), i artykul wyswietla sie na jednej jak i drugiej stronie, chcialbym żeby możnabyło to rozdzielić.

Ewentualne rozwiązanie które mi przychodzi do głowy (mało eleganckie):

  1. publikuj na głównej wyswietla na stronie1
  2. przypisuje kategorie do artykułów które mają sie wyświetlać jako frontpage na stronie2
  3. moduł spalsh – przekierowywuje frontpage strony2 na np.taxonomy/term/1

Macie jakieś inne pomysły?