Domain Access: jeden modul, jeden Drupal, jedna databáze, několik webů

Možností, jak s jednou instalací Drupalu obhospodařovat více webů, je celá řada. Pro řadu případů může být zajímavé řešení postavené na modulu Domain Access. Ten vám umožní mít jedinou instalaci Drupalu, a to včetně jediné databáze, bez složitého nastavení sdílených tabulek. Nové weby si prostě naklikáte.

Reklama

Proč se vůbec zabývat tím, jestli by bylo možné s jedinou instalací Drupalu provozovat více webů? Odpovědí je možnost snadnější údržby takových webů. Pokud budete Drupal nebo použité moduly aktualizovat, nemusíte je kopírovat do X umístění, ve kterých provozujete své weby.

Na Maxiorlovi jsem už popisoval řešení spočívající v jediné kódové základně Drupalu, využitím složky sites/název-domény/modules, samostatnými databázemi pro každý web a sdílením tabulek uživatelů tak, aby weby umožňovaly přihlášení se na všechny z jednoho místa, podobně společnou registraci atd. Připomínám tedy článek Drupal, multisite instalace a HostGator krok za krokem.

Co vám nabídne modul Domain Access

V tomto článku se podíváme na modul Domain Access. Pokud budete chtít postavit více webů s jedinou instalací Drupalu, pak za použití Domain Access vám bude stačit jediná databáze - tedy veškerá data budou v závislosti na nastavení společná všem webům. V případě, že je budete chtít sdílet, nemusíte řešit nějaké propojování databází a sdílení tabulek v konfiguračním souboru. Budete se pohybovat jen v administračním prostředí Drupalu.

Domain Access je možné použít pro hlavní doménu a subdomény, ale stejně tak pro několik různých webů běžících na různých doménách. Vše, co pro takové řešení musíte udělat, je na svém serveru nebo na lepším hostingu, nasměrovat všechny uvažované domény a subdomény do stejného adresáře.

Úplně běžným způsobem pak nainstalujte Drupal na některou z domén, nastavte si potřebné moduly, témata a vše další, co s webem zamýšlíte. Následně doplňte modul Domain Access. Nelekejte se dlouhého návodu v INSTALL.TXT. Do detailu je tam popsáno nastavení serveru a DNS zajišťující směřování více domén do jednoho adresáře. Lepší hosting vám toto nastavení umožní naklikat, na serveru určitě využijete nějaký administrační nástroj s podobnými možnostmi.

Po zapnutí modulu Domain Access přejděte do nastavení oprávnění a přidělte administrátorům práva administer domains a set domain access. V sekci Prvky webu > Domény (Domains) nastavte základní informace o primární doméně. Tou je web, na kterém se v tuto chvíli pohybujete, v podstatě zde není třeba nic měnit.

Nyní musíte přejít k úpravě souboru settings.php. Pokud zde máte povolenu a nastavenu hodnotu $base_url, tak ji zakomentujte. Jestliže chcete, aby došlo k automatickému přihlášení uživatelů v rámci domény a všech jejích subdomén postavených s tímto řešením, nastavte $cookie_domain na .adresavasehowebu.cz - tedy s tečkou na začátku a bez www. Uživatelské účty budou sdíleny tak či tak. Pokud chcete sdílet přihlášení mezi různými doménami, použijte modul Single SignOn, nastavení cookies by v tomto případě nepomohlo.

Na konec souboru settings.php doplňte následující řádek, cestu k souboru settings.inc si případně upravte.

include ‘./sites/all/modules/domain/settings.inc’;

Pokud je vše v pořádku, pak byste po návštěvě administrační části Prvky webu > Domény neměli vidět žádné chybové hlášení. Nyní se můžete pustit do „naklikání” dalších webů, které budou provozovány ze stávající instalace Drupalu.

Jak přidat další doménu

Přidáním další domény nebo subdomény do nastavení Drupalu si v podstatě zprovozníte další web na jiné adrese. Postup by měl být následující:

1.     Přejděte do administrační části Prvky webu > Domény.

2.     Přepněte se na kartu Create domain record.

3.     Zadejte adresu nové domény ve tvaru například www.adresawebu.cz nebo subdoména.adresawebu.cz.

4.     Vyplňte název webu na této doméně, zobrazí se uživatelům.

5.     Pokud webu bude běžet na zabezpečeném https://, vyberte příslušnou volbu.

6.     Pokud má být nový web na vytvářené doméně ihned aktivní, ponechejte výchozí volbu v části Domain Status.

7.     Tlačítkem Save domain record novou doménu vytvoříte.

8.     Přepněte se na kartu Domain list a klepněte na Nastavení u nové domény.

9.     Upravte zde e-mailovou adresu webu na této domén, jeho slogan, cíle, patičku, adresu titulní stránky, časovou zónu, výchozí jazyk, cacheování, primární odkazy atd.

10.  Pomocí Domain list > Aliases můžete přidat další adresy, na kterých bude nový web rovněž dostupný.

11.  Pomocí Domain list > Theme nastavte výchozí téma vzhledu pro vybranou doménu.

Nastavení modulu Domain Access

Nastavení modulu Domain Access

Tolik tedy základní nastavení související se zprovozněním další domény pomocí modulu Domain Access. Dále je vhodné upravit nastavení pro publikaci obsahu:

Přejděte do administrační části Prvky webu > Domény > Node settings.

V sekci Domain node types zaškrtněte ty typy obsahu, které budou dostupné na všech doménách, vespod si vyberte, že toto nastavení ukládáte pro všechny weby a uložte jej. Touto úpravou zajistíte, že obsah publikovaný na webu A bude dostupný i po zobrazení webu B, například pomocí Views. Domain Access samozřejmě zajistí, že uzly budou mít v obou případech stejné URL své domény, na které byly vytvořeny. Obsah tedy bude dostupný na všech webech, ale odkazy na něj budou jedinečné, vzniku duplicitních stránek se nemusíte bát.

Vytváření obsahu na doméně

Když budete nyní vytvářet nový obsahový uzel, všimněte si nastavení Domain access options. Volbou Send to all affiliates zajistíte, že daný uzel bude přístupný ze všech domén (výchozí zaškrtnutí souvisí s nastavením popsaným v předchozím odstavci). Pokud tuto volbu nezapnete, tak se bude vycházet ze zaškrtnutí domén níže - ty, které vyberete, budou moci daný uzel zobrazovat například ve výpisu nebo pomocí Views.

Důležitým nastavením je volba Source domain. Zde určíte, která doména je matkou daného uzlu. Podle toho se upraví i jeho adresa, která bude jedinečná v rámci všech domén.

Nové nastavení v editaci uzlů

Nové nastavení v editaci uzlů

Řešení z praxe - maxiorel.cz a hostingy.maxiorel.cz

V loňském roce jsem rozběhal subdoménu hostingy.maxiorel.cz s využitím multisite instalace Drupalu, viz odkaz nahoře v článku. Protože plánuji těsnější propojení domén, rozhodl jsem se oba weby spojit do jediného a hostingy.maxiorel.cz provozovat s využitím modulu Domain Access. Na HostGatoru, kde web běží, není problém nastavit domény a subdomény do stejného adresáře přímo z administračního cPanelu.

Původní řešení mělo sdílenou tabulku uživatelů, nikoli však uzly. Pokud bych na subdoméně chtěl zobrazit nejoblíbenější články z primárního webu a na primárním webu zase třeba nejzajímavější hostingy, dost dobře by to nešlo (ale i takové řešení jsem dělal, viz www.cnews.cz a všechny jeho subdomény zobrazující vespod boxíky s články napříč weby).

S využitím Domain Access je to hračka. Nejprve tedy bylo nutné zkopírovat stávající obsah ze subdomény na primární doménu. Využil jsem k tomu modul Node Export. Ten si poradí dokonce i s obrázky v políčku CCK. Vybrané uzly exportuje do textového souboru, který jen importujete na druhém webu. Uživatele nebylo třeba řešit, účty již byly od počátku sdíleny.

Následně jsem na Maxiorlovi vytvořil pomocí Domain Access subdoménu, provedl potřebná nastavení a změnil propojení typů obsahu na příslušné domény. Provedl jsem export a import některých Views a ručně překopíroval bloky z původní subdomény.

Narazil jsem jen na dva problémy. Prvním byla skutečnost, že nepřihlášení uživatelé neviděli na nově fungující subdoméně hostingy.maxiorel.cz žádný obsah, přestože patřičné uzly sem byly publikovány. Důvodem byl doplňkový modul Domain Strict - nechtěl jsem si hrát s jeho nastavením, takže jsem jej vypnul a problém vyřešil.

Druhý, trošku větší problém, bylo nastavení primárních odkazů, tedy horní modré lišty s odkazy. Když se načetla subdoména, všechny relativní odkazy směřovaly na ni, přestože měly cílit na primární doménu. Bylo tedy potřeba aktivovat modul Domain Navigation, pro doménu i subdoménu vytvořit samostatná menu a přiřadit je jako primární odkazy pro příslušný záznam v Prvky webu > Domény > Domains list, viz výše.

Menu jsem nezobrazoval jako blok, ale přímo funkcí volající v tématu vzhledu menu generované pomocí modulu Nice menus. To nemohlo jít s modulem Domain Access dohromady, takže řešení bylo následující. Vytvořil jsem nový region a do něj umístil blok Domain primary links. Ten se od standardního bloku Primary links liší tím, že jako primární odkazy zobrazí vždy ty, které jsou přiřazeny právě prohlížené doméně.

Následně jsem musel upravit stylování primárních odkazů, protože styly platné pro původní řešení s Nice Menus nebylo možné aplikovat. Využil jsem přitom postup z článku Drupal: jak na rozbalovací menu jen s CSS a bez doplňkových modulů.

Dále jsem na web doplnil užitečné moduly Domain Blocks umožňující nastavovat viditelnost bloků podle domény a modul XML Sitemap domain.

Nevýhody modulu Domain Access

Až si budete s výše popsaným řešením hrát, dejte tedy pozor na modul Domain Strict. Jestliže jej aktivujete, nepřihlášení uživatelé a ti bez oprávnění prohlížet obsah ze všech webů, neuvidí například články na webech, které neběží na primární doméně. Jednoduše: tento modul vypněte, případně koukněte do dokumentace v textových souborech ve složce modulu, potřebujete-li výrazně omezovat práva prohlížet obsah na jednotlivých doménách.

Poznámka: Výše uvedený text je poplatný Drupalu 6. Modul Domain Access je k dispozici pro Drupal 7, cesty k administračním částem jsou zde trochu odlišné.

Poznámka II: informace o hostingy.maxiorel.cz už nejsou ke dni 8. ledna 2017 platné, v minulosti jsem subdomény na webu zrušil.

Tagy: 

Reklama

Komentáře

Díky moc za článek... obzvlášť ty infomace o menu a blocích zvlášť pro každou doménu. To mi hodně pomohlo :).

Vždy je třeba zvážit všechna pro a proti. Velká výhoda je jednoduchá aktualizace, největší riziko je znefunkčnění většího počtu webů při špatně provedené aktualizaci. To je poslední dobou moje noční můra. I když si vše odzkouším na lokálu, v produkčním prostředí je stav zcela jiný. Stačí nepovedená aktualizace jednoho modulu a máte o práci postaráno. A to nepoužívám vývojové verze modulů. Jediná schůdná cesta je rozdělit weby podle důležitosti a sdružit je do několika instalací Drupalu.

Zdravím, chtěl bych se zeptat jestli je možné pří tomto způsobu instalace použít pro všechny domény/subdomény stejnou šablonu pro vzhled (css, obrázky apd.) Díky

Ano je, viz samotný tento web jak důkaz.

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

Díky za odpověď, ještě bych se chtěl zeptat co by jste použil v tomto případě: mám web ve třech jazykových verzích cz, sk, de. Časem ještě přibude polština a angličtina. Pro každou jazykovou verzi je zaregistrovaná samostatná doména a všechny dohromady mají stejný vzhled. Teď řeším požadavek jak rozdělit německou jazykovou verzi na verzi pro rakousko a německo. Rozdíl bude zatím jen v různých adresách ale v budoucnu se můžou lišit i obsahem. Je na to vhodný modul Domain Access a nebo by jste to řešil nějak jinak? Díky

Rakousko vs. Německo jsem zatím neřešil, takže nedovedu říci.

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

Pekný deň.

Ďakujem za skvelí článok. Pomohol moc. Teraz mám ale vážny problém, ktorý s DA súvisí, a neviem si s ním rady. Rozbehal som drupal s Domain Access podľa Vášho návodu a návodu k pluinu. Mám dve domény. priklad1.sk a priklad2.sk Všetko funguje tak ako má. Potrebujem ale, aby užívateľ prihlásený na priklade1.sk sa nemusel znovu hlasiť, ak chce prejsť na priklad2.sk. Pretože ide o domenu a nie subdomenu, nepoužil som cookies, ale odporúčaný modul Single sign on. Podla mňa som postupoval podľa jeho návodu, i keď ten nie je moc stavaný na multisites s Domain Access, ale skôr dve inštancie zdieľajúce tabuľky, no po zadaní kľúča z controllera do klienta my prestal funkovať priklad2.sk. Proste sa po odkliknutí adresi priklad2.sk zobrazi hláška stránky príklad1.sk a informácia o tom, že stránka nebola nájdená. Ak z Single sign on clienta odstránim kľúč, priklad2.sk pobeží normálne (teda okrem toho prihlasovania).

Ešte pre poriadok. Mám všetky tabuľky z prefixom cms_ teda sa my nelíšia pre jednotlivé domény. Používam ten DA a samozrejme som upravil i setings.php podľa pokynov. Teda, pridal som doň:

$conf[‚session_inc‘] = ‚sites/all/modules/sso/session.singlesignon.inc‘; include ‚./sites/all/modules/domain/settings.inc‘; $db_prefix = array(‚default‘ ⇒ ‚cms_‘, ‚authmap‘ ⇒ ‚cms_‘, ‚sessions‘ ⇒ ‚cms_‘, ‚users‘ ⇒ ‚cms_‘);

a zakomentoval pôvodný db_prefix.

Už si fakt neviem rady. Poradte prosím ak môžete.

Dobrý den, obávám se, že nepomůžu. Zatím jsem vždy využíval jen kombinace doména + subdomény a tedy si vystačil s cookies. Single SignOn znám jen trošku, moc jsem ho nepoužíval, takže netuším, jaké jsou s tím svázané problémy.

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

Dobrý den,

nevíte, čím by mohlo být, že se mi nové subdomény nechtějí rozběhnout? Hlásí mi to 500 Internal server error (mám účet na Endora.cz). Nastavil jsem vše dle návodu, modul běhá (nehlásí chyby), ale po vytvoření nové domény ji nelze zprovoznit - objeví se výše uvedená chyba.

Samozřejmě se zkusím obrátit na administrátora Endora.cz, ale není to Drupalista, takže bych mu to chtěl vysvětlit, když už od něj budu chtít pomoct... Za případnou radu velice děkuji.

Dobrý den, máte ty subdomény nasměrovány do stejné složky, jako je instalace Drupalu pro hlavní doménu?

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

Dobrý den, to nevím... Jak bych to mohl zjistit, resp. nastavit?

No to se musíte zeptat na Endora, zda to vůbec umožňuje. Tak daleko ji neznám. Například na HostGatoru to jde nastavit v administračním cPanelu.

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

Dobrý den, mně už to právě jednou fungovalo bez problémů (na Endoře), nicméně pak jsem modul na nějakou dobu vypnul a teď, když to zkouším znovu, tak to hází ten error. DNS mám nastaveno na wildcard (*.mojedomena.cz). Možná bude třeba symlink, nějak to zkusím vykomunikovat.

Děkuji za odezvu a přeji veselé Vánoce :-)

 

Tak mně napadá, nemohlo by to být právy u settings.php?

Je třeba v settings.php (sites/default/settings.php) odkomentovat a nastavit base_url:

$base_url = 'http://www.mujweb.cz';

Jinak Endora má na domény 3. řádu nastavení v administraci - Webadmin / nastavení / domény 3. řádu - kde je potřeba zaškrtnout prostřední možnost a počkat alespoň 20 minut, až se to nastaví na serveru.

V návodu má pan Polzer pokyn k zakomentování, na Endoře to ale funguje s odkomentovaným... Tak nevím...

Je pravda, že to může záležet na hostingu. Pokud specifikace base_url pomůže, používejte ji. Já ji používám ve výjimečných případech, kdy mám web v podadresáři.

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

Pekný deň. Chcem sa opýtať, či mi náhodou neviete poradiť, ako v DA nastavím ktoré tipi obsahov sa majú zobrazovvať v ktorej doméne, ale v D7. Tam totiž karta Node settings nie je. Ďakujem

Pokud vím, tak to nejde. Můžete filtrovat obsah vydaný na aktuální doménu třeba pomocí Views, ale přímo u typu obsahu nejde nastavit, že ten konkrétně typ obsahu lze umístit jen na některou doménu. To jde až na úrovni uzlů.

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

Pekný deň. Prosím o radu. V D7 nie je Single SignOn a tak mám problém ako riešiť s Domain Access prihlasovanie mediz viacerími doménami (príklad1.sk, príklad2.sk). Neviete my prosím poradiť, ako na to?

Dobrý den. Zkuste modul Bakery Single Sign-On System.

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

Zdravim,diky za clanek. Nicmene mam maly problem, ze i kdyz zaskrtnu, ze chci konkretni stranku zobrazit jen na jedne domene, tak stejne se mi to zobrazi i na tom druhem. Nevim v cem delam chybu.Poradite mi prosim?Dekuji

No to jo. Článek se zobrazí na libovolně zadané doméně v rámci webu. Ta volba zajišťuje, že při vytváření odkazů na ten článek bude použita vždy jedna vybraná doména. Případně zkuste zapnout ještě modul Domain Strict.

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

Dobry den, Dakujem za clanok. Mam podobny problem, mam domena1.sk a domena2.sk, a chcel by som aby sa mi napr. Basic page zobrazovala len na konkretnej domene, cize ked poznam url node a zadam ju na domene2 , pricom som pri vytvarani v DOMAIN ACCESS OPTIONS zvolil domenu1 aby nebola pristupna na domene2. Momentalne sa viem k stranke dostat aj z jednej aj z doena1 aj z domena2. Neviete mi poradit ako to riesit?

Dobrý den. Ten Domain Strict jste zapnul?

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

Dobry den, ano zapol, napriek tomu sa vedel ANONYMOUS USER dostat k akemukolvek obsahu. Mi to nedalo tak som modul odinstaloval a znovu nainstaloval. Teraz mam problem ze sa ANONYMOUS USER nedostane k ziadnemu obsahu :-), Ma nastavene opravnenie: View published content.

Dobrý den,
hostím na hostgatoru i se starou doménou ale další doménu mám koupenou u web4u. A potřeboval bych poradit to naklikání přes ten cpanel. Moc děkuji
děkuji

Dobrý den, já momentálně u HostGatoru už nic nemám, takže přesně z hlavy neřeknu. Každopádně z Web4U nastavíte DNS záznamy pro doménu, aby směřovaly na IP adresu hostingu HostGatoru. Tam je pak možnost přidat alias domény, takže řeknete, že stará doména má mít alias v podobě té nové a tím to bude hotové.

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

Na web4u jsem ve správě domén vybral doménu a klikl na DNS a klikl na upravy a zadal jsem ip adresu hostgatoru v kolonkách 2,3,4 a zbytek jsem ponechal jak bylo.
DNS administrace web4u
DNS administrace-web4u
Na hostgatoru jsem chtěl přidat alias ale nevím kterou ikonu vybrat.
zde menu s doménami
domeny-menu
zde podmenu s domény
Subdomains

Addon Domains
Addon Domains

Parked Domains
Parked Domains

Redirects
Redirects

Simple DNS Zone Editor
Simple DNS Zone Editor

Advanced DNS Zone Editor
Advanced DNS Zone Editor

Děkuji za případné echo
Pavel V.

Zdravím, přidejte Parked domain, která je v podstatě aliasem k hlavní nebo jiné přidané doméně na HostGatoru.

Tvořím weby. Nabízím poradenství pro Drupal. Jsem na Twitteru.

Přidat komentář