Nejprve několik slov k tomu, jak multisite instalace Drupalu funguje. V zásadě se rozlišuje několik typů multisite instalací. Můžete sdílet kódovou základnu (jádro, moduly, témata), databázi, doménu a subdomény, provozovat to na několika doménách a podobně.
V následujícím textu budeme řešit situaci, kdy máme jednu instalaci Drupalu na nějaké doméně a k ní chceme vytvořit subdomény. Může jít o nějaký web, který bude mít na svou podporu zřízeny menší weby na subdoménách, například web firmy s produktovými weby coby subdoménami. Využijeme k tomu jedinou souborovou základnu Drupalu, abychom neplýtvali počtem souborů na serveru. Navíc pak bude jednodušší aktualizace - pro několik webů využívajících stejné moduly bude stačit aktualizaci nakopírovat jen jednou. Hlavní web i web na subdoméně budou mít každý svou vlastní databázi. Abychom zajistili společné přihlašování, bude však potřeba nasdílet některé tabulky v databázi pro oba weby.
Řada webhostingů nabízí subdomény, ne vždy je však možné složku subdomény směřovat do stejné, kde je umístěn hlavní web. Následující postup krok za krokem tedy popíšu na webhostingu HostGator, který za poměrně malý poplatek nabízí kvalitní webhosting vybavený SSH (viz výhody), administračním cPanelem a možností hostovat více domén v rámci jednoho účtu.
Příprava a instalace prvního webu na doméně
Začněte tím, že si zaregistrujete doménu u někoho, kdo nabízí pohodlnou administraci DNS záznamů. Já doporučuji Web4U, které má pohodlnou administraci a zabezpečení domén pomocí DNSSEC. Pohodlná správa domén je také u Czechie. Poté jděte na www.hostgator.com a objednejte si zde webhosting. Doporučuji program Baby Plan nebo Business Plan. Zaplatit můžete platební kartou nebo přes PayPal.
HostGator nabízí jak registraci domény, tak zřízení hostingu pro již existující doménu. Já doporučuji druhou možnost a registraci domény v Česku.
Po zaplacení vám bude zřízen přístup k vašemu novému účtu u HostGatoru. Přihlaste se do administračního rozhraní, ve kterém v boxíku Account Information najdete IP adresu svého hostingu.
Informace o IP adrese vašeho hostingu
Přihlaste se do administrace domén, v našem případě tedy do klientské sekce Web4U, kde se přepněte na správu domén a u své domény klepněte na tlačítko DNS. U jednotlivých záznamů klepněte na tlačítko Upravit a do políčka adresa zadejte IP adresu zjištěnou u HostGatoru.
Nastavení DNS u Web4U
Promítnutí změn v DNS záznamech chvíli trvá. Většinou by mělo být hotovo dříve, jak za 24 hodin. Poznáte to tak, že se vám v prohlížeči po zadání adresy vaší domény již neotevře výchozí stránka Web4U, ale výchozí stránka z HostGatoru. Poté se můžete pustit do instalace Drupalu.
V ovládacím panelu HostGatoru klepněte na tlačítko MySQL Database Wizard a v průvodci zadejte název a přístupové údaje pro novou databázi. V dalším kroku pak zatrhněte pro vytvářeného uživatele všechna privilegia k nové databázi a její vytvoření dokončete.
Založení databáze v administraci HostGatoru
Pomocí FTP nebo WinSCP nakopírujte na web do složky public_html soubory Drupalu, do prohlížeče zadejte adresu své domény a proveďte běžnou instalaci Drupalu. Web si upravte, jak potřebujete, nainstalujte si další moduly, témata, přidejte uživatele, vložte obsah.
V ovládacím panelu HostGatoru najdete položku Cron jobs. Přidejte sem záznam pro spouštění drupalovského cronu po hodinových intervalech. Příkaz by měl mít následující podobu:
curl --silent --compressed http://www.nejakadomena.tld/cron.php
Vytvoření subdomény
V administračním rozhraní HostGatoru nyní přidejte subdoménu, a to pomocí ikonky Subdomain. Zadejte její název do formulářového políčka a automaticky vytvořenou cestu v Document Root přepište tak, aby zde zůstalo uvedeno pouze public_html. Tím zajistíte, že při zadání adresy subdomény do prohlížeče, bude HostGator servírovat data z hlavní složky - stejná, jako u hlavní domény.
Vytvoření subdomény u HostGatoru
Nastavení databází
V administraci HostGatoru nyní vytvořte další databázi a uživatele pro nový web na subdoméně, zase klasicky pomocí ikonky MySQL Database Wizard. Po dokončení se přepněte na ikonku MySQL Databases. Stránku narolujte dolů na formulář Add User to Database. V nabídce User zde vyberte uživatele databáze pro subdoménu a v nabídce Database naopak databázi hlavní domény. Klepněte na tlačítko Add. Tímto jste docílili toho, že k databázi hlavní domény bude mít přístup i uživatel databáze určené pro subdoménu, což bude potřeba v dalších krocích.
Přidání dalšího uživatele s přístupem k databázi
Informace o subdoméně pro Drupal
Když v tuto chvíli zadáte adresu subdomény do prohlížeče, tak by se měl načíst hlavní web. Pokud tomu tak není, zkontrolujte svůj postup oproti odstavci Vytvoření subdomény. Drupal v tuto chvíli zatím neví, že má na adresu subdomény nějak reagovat. To vzápětí napravíte.
Přejděte do složky sites a vytvořte v ní složku ve tvaru subdomena.domena.cz. Ze složky sites/default do nově vytvořené složky pro subdoménu překopírujte soubor default.settings.php a následně jej přejmenujte na settings.php. Pomocí FTP klienta mu nastavte právo pro zápis. Například v Total Commanderu tento soubor označte, zavolejte funkci Soubor > Změna atributů a nastavte je na 777.
Nyní v prohlížeči znovu načtěte adresu subdomény. Měl by se spustit klasický instalátor Drupalu, takže proveďte instalaci tak, jak jste zvyklí. Nezapomeňte, že při nastavení databáze musíte zadat název a přístupové údaje pro databázi určenou pro subdoménu!
Po dokončení instalace máte plně funkční Drupal na subdoméně, aniž byste museli někam znovu kopírovat jeho soubory nebo soubory modulů. Můžete se přesvědčit, když půjdete do Prvky webu > Moduly. Jsou zde stejné moduly, jako u hlavní domény. Zapnout můžete samozřejmě jen některé. Díky samostatným databázím je toto nastavení zvlášť.
Společné přihlašování v doméně a subdoméně Drupalu
V tuto chvíli máte jednu souborovou strukturu Drupalu, dvě databáze a dva plně funkční weby. Zbývá je propojit tak, aby oba weby měly stejný seznam uživatelů, a abyste se po přihlášení do jednoho webu automaticky přihlásili i do toho druhého. V nějakém editoru si otevřete soubor sites/default/settings.php, odkomentujte řádek s $cookie_domain a upravte jej následovně:
$cookie_domain = 'domena.cz';
Soubor po úpravě uložte. Pozor, instalátor Drupalu zřejmě zakázal práva k jeho zápisu, musíte je nejprve přes FTP klienta povolit. Zkušení mohou editovat přes příkazový řádek s editorem vi, který si s tímto problémem poradí.
Nyní si v editoru otevřete soubor sites/subdomena.domena.cz/settings.php a rovněž v něm upravte záznam o doméně pro cookies na doménu:
$cookie_domain = 'domena.cz';
V tomto směru bude tedy nastavení webů na doméně i na subdoméně shodné. Zůstaňte u editace souboru sites/subdomena.domena.cz/settings.php, najděte část s $db_prefix a nahraďte ji tímto:
$db_prefix = array(
'default' => '',
'authmap' => 'databaze_domeny.',
'openid_associations' => 'databaze_domeny.',
'profile_fields' => 'databaze_domeny.',
'profile_values' => 'databaze_domeny.',
'role' => 'databaze_domeny.',
'sessions' => 'databaze_domeny.',
'users' => 'databaze_domeny.',
);
Soubor pak uložte. Touto úpravou jste webu na subdoméně sdělili, že pro tabulky přihlašování, profilů, uživatelských rolí, sessions a seznamu uživatelů si má sáhnout do databáze hlavního webu na doméně. Do apostrofů tedy zadáváte název první vytvořené databáze a musíte jej ukončit tečkou.
Nyní se z hlavního webu i ze subdomény odhlaste, vyprázdněte cache prohlížeče a vymažte cookies. Jestliže jste postupovali správně, pak se po přihlášení do jednoho z webů automaticky přihlásíte i do toho druhého.
Tipy, možné změny a náměty k zamyšlení
Uvedený postup je možné s úspěchem aplikovat i v případě, že vám web na doméně již delší dobu běží a má své uživatele. Když pak vytvoříte subdoménu a nastavíte sdílení tabulek uživatelů a sessions, tak se již dříve vytvoření uživatelé samozřejmě budou moci přihlásit do všech webů, aniž by se znovu registrovali.
HostGator není jediný webhosting, na kterém lze toto vytvořit, přijde mi však velmi jednoduchý na nastavení, proto jej doporučuji.
Administrační rozhraní v HostGatoru
Pokud váš webhosting umožňuje nastavit, kam bude subdoména směřována, ale zároveň máte jen jednu databázi, pak při instalaci webu na subdoméně použijte stejné přístupové údaje k databázi, ale nastavte nějaké prefixy názvů tabulek, například subdomena_. Při úpravě souboru settings.php pro subdoménu pak uvedete v nastavení $db_prefix jako názvy tabulek místo 'databaze_domeny.' pouze 'subdomena_'. Všimněte si, že v tomto případě na konci tečka není, zůstáváme totiž ve stejné databázi.
Uvedené řešení společného přihlašování a sdílení uživatelů je funkční jen v případě domény a její subdomény. Jednu instalaci Drupalu můžete využít také k provozu více různých domén. Pak by ale nešla nastavit jediná doména pro cookies. Chcete-li mít společné přihlašování pro více různých domén v multisite instalaci, použijte modul Single Sign On. V tuto chvíli ovšem hledá někoho, kdo se o něj bude dále starat. Proto před jeho nasazením tuto informaci zvažte.
V uvedeném nastavení jsou sdíleny také uživatelské profily. Můžete je samozřejmě vynechat, ale chcete-li toho využít, pak před úpravou settings.php zapněte na obou webech modul Profile.
Při aktualizaci multisite instalace nakopírujete nové moduly nebo Drupal do jednoho místa, update.php však musíte provést na obou webech. Nezapomeňte na to.
Pro pokročilejší multisite instalace můžete zkusit modul Domain, který umožní publikaci jednoho článku na vybrané domény z jednoho administračního rozhraní. Ovšem tím se už dostáváme mimo rámec tohoto článku.
Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.
Podobné články
Komentáře k článku
Dobrý den, skvělý článek, zrovna řeším multisite na svém webu (poslední krok před finálním plněním informacemi) a rád bych vyzvěděl, jestli máte zkušenosti s praktickým využitím popsaného třeba na web4u (můj webhosting - doufám, že to není skrytá reklama).
Teoreticky by tam mělo stačit v administraci hostingu (v nastavení domén III. řádu) zažádat o automatické zřizování subdomén ve složce sites/default, čímž se zabijí 2 mouchy jednou ranou (zároveň by měl subdomény registrovat i drupal, tedy alespoň podle výše uvedených informací, jestli jsem to dobře pochopil), a pak už jen postupovat podle Vašeho článku od části "Informace o subdoméně pro Drupal". Vytvoření nové databáze by též neměl být problém, i to je zde řešeno intuitivně v nastavení webhostingu, v části MySQL či PostgreSQL, jak je komu milo :-)
Na drupal.org jsem také narazil na několik zajímavých modulů, a zejména se mi zalíbil modul subdomain, který řeší automatické vytváření domén III. řádu na základě jedné ze 4 možných variant (autor, typ obsahu, kategorie nebo Organic group). Za případné zkušenosti, zejména negativní, bych byl povděčen :-)
Zdeněk
Zdravím. Na Web4U už mám dlouho jenom domény, takže přesně neřeknu, ale určitě byste měl nechat zřizovat subdomény ve stejné složce, jako je root hlavního webu, nikoli v sites/default. Tam sice vytváříme složku s názvem subdomény, ale jen proto, aby si z ní Drupal převzal settings.php.
Co se týče subdomain, na běžném hostingu jsem jej nezkoušel. Za hlavní problém považuji fakt, že vytváří subdomény třeba pro všechny termíny kategorií, zatímco mně by vyhovovalo, kdyby to dělal jenom pro vybrané.
Moc děkuji za bleskovou reakci, pořád si říkám, jak to stíháte :-)
Myslel jsem, že v nastavení subdomain bude nějaká podrobnější volba systému vytváření domén a ono to asi nebude až tak sofistikované, jak to vypadalo - dám na Vaše doporučení z článku a využiju spíše modul Domain Access, který mi asi poslouží lépe.
V souvislosti s vytvářením složek pro subdomény jsem byl rychlejší než smrt, protože už jsem stačil požádat o vytváření složek v root/html/sites/default místo původního root/html. Jak hodně by vadilo (krom zřejmých věcí, jako je nepraktičnost při aktualizaci webu), kdybych to tak nechal? S tímhle jsem se ještě nesetkal, takže nevím...
Moc děkuji.
Zdeněk
Vadilo by to hodně - nefungovalo by to. Jinými slovy, subdoména musí vést do stejné složky, jako doména.
Tak jsem to vrátil zpět, protože jste měl samozřejmě pravdu - nefungovalo to. Asi to půjde nějak nastavit (jinak by to zřejmě neumožňovali), ale stejně bych nevěděl jak.
Jinak potvrzuji, že na web4u funguje uvedený návod také naprosto bez problémů. Nastavení v administraci je snad ještě jednodušší než u HostGator, zejména co se týče vytváření složek subdomén. Dokonce lze automaticky vytvářet i domény IV. - ??. řádu, nastavení DNS je tomu už přizpůsobené. Web4u má navíc poměrně sofistikovanou online aplikaci na správu ftp účtu, kde se dá spousta věcí naklikat (např. práva/CHMOD) a vyřešit bez nutnosti cokoli stahovat a znova kopírovat na ftp.
Moc děkuji za rady.
Dobrý den,
narazil jsem na zajímavý problém s multisite instalací (subdomény, 1 databáze) a modulem Color, který nechce pracovat. Používám téma vzhledu Pixture_reloaded a radoval jsem se, že s vytvořením subdomén zároveň pořeším i barevné odlišení webu (pro každou subdoménu bychsi zvolil jinou barvu tématu), jenže OUHA, ono to nejde :-( Když nastavím na subdoméně jako téma vzhledu jakékoli téma umožňující využití modulu Color (požívám Garland a zmíněné Pixture_reloaded), rozhodí se css a zmizí všechny grafické prvky. Základní barva témat funguje normálně, protože se načítá z jiné složky. Na hlavní doméně vše funguje, jak má.
Možná je to tím, že se při změně barvy (color picker) složka s alternativním css a obrázky uloží do cesty sites/jmeno_subdomeny/files/jmeno_slozky_generovane_modulem_color.
Nemáte prosím s tímto zkušenost?
Za jakékoli podněty předem děkuji.
Hm, zřejmě by to chtělo rozkopírovat to téma vzhledu do složek jednotlivých subdomén. Ale nevím, modul Color nepoužívám.
Děkuji za tip, ale problém byl v jiné věci. Modul color si totiž bere informace o změnách pouze ze složky sites/default/files/color a primární cesta k souborům na subdoménách je nastavena na sites/jmeno_subdomeny/files/color. Aby tedy vše fungovalo, je třeba změnit nastavení cesty k souborovému systému v administrace/nastavení webu/systém souborů. Cesta by měla vést do sites/default/files. Pak už vše šlape, jak má. Nevím ale, jestli to nebude způsobovat problémy jinde.
Dobrý den,
neboť jsem narazil na obdobný problém (modul color) při použití tématu pixture_reloaded na multisite webu, tentokrát vytvořeného pomocí Domain Access, rád bych zde prezentoval postup, jakým jsem ho rozlouskl. Třeba se bude někomu hodit.
Modul Domain theme (součást balíku Domain Access, která se stará o spolupráci subdomén s tématy vzhledu) vytváří subdomény trochu jinak, než když se to dělá ručně – využívá pouze jeden settings.php a pouze „vyrábí“ pro každé podtéma složku v sites/default/files, do které si ukládá data.
Po vytvoření několika prvních subdomén (opravdu brnkačka) jsem se zaradoval, jak parádně si ulehčím práci (tímto ještě jednou moc díky Maxiorlovi za doporučení na konci článku). Vše bylo OK do doby, než mne napadlo využít modul color, abych si na subdoménách nastavil různé barvičky oblíbeného tématu pixture_reloaded. Modul Domain Theme pracuje s tímto na principu zvláštní cesty do nastavení modulu color picker (součást modulu color) skrze administraci modulu Domain Access. Jenže v souvislosti s modulem color to funguje pouze u tématu Garland a od něj odvozených...
U pixture_reloaded to, bohužel, nefunguje....
Existuje ale (trošku krkolomné) řešení. Strávil jsem nad tím skoro celý týden....
Předpokládám, že již máte nainstalovaný a zprovozněný balík Domain Access:
- Vytvořte si podtéma pixture_reloaded"
a) Vytvořte si kopii složky s tématem pixture reloaded.
b) Přejmenujte soubor pixture_reloaded.info - např. na test_pixture_reloaded.info a upravte v něm název tématu vzhledu (řádek s "name =") třeba na TEST
c) Upravte soubor template.php - otevřete ho třeba ve wordpadu a skrze volbu „nahradit“ nahraďte všechny řetězce „pixture_reloaded“ – bez uvozovek – něčím jiným – např. „test_pixture_reloaded“ – taky bez uvozovek!!!
d) Vhodně přejmenujte složku s tématem a nahrajte ji na ftp do složky sites/all/themes - Na hlavní doméně Vašeho webu přejděte do seznamu témat vzhledu, povolte nově vytvořené téma (nenastavujte ho jako výchozí!!!) a vstupte do jeho nastavení. Tam změňte dle libosti barevné schéma, nastavte si ostatní vlastnosti a uložte.
- Nyní přejděte do Administrace/Prvky webu/Domain/Domain list a zde v nastavení zvoleného podtéma zvolte odkaz „theme“. Tím přejdete do nastavení témat vzhledu pro subdoménu (takto je to zařízené modulem Domain Theme, neptejte se mě proč). Zde pouze vyberte jako výchozí to nové podtéma, které jste si vytvořili. Nevstupujte do nastavení!!!
- Pokud přeci jen vstoupíte do nastavení a něco změníte, rozhodí se Vám pravděpodobně zase nastavení CSS u subdomény. Nemusíte ale zoufat, stačí znovu jít do nastavení témat klasickou cestou (Administrace/Prvky webu/Témata vzhledu/Nastavení) a tam v nastavení znovu uložit Vaše podtéma.
Omlouvám se, že popisuji něco, čím se článek přímo nezabývá...
Jde na tu subdoménu nějak nasadit samostatnou doménu?
Že bych měl pro oba weby dvě domény a všechno by bylo na jednom hostingu jako multisite ?
A nebo jde aspoň ta doména přesměrovat na tu subdoménu?
Mělo by to jít, nezkoušel jsem. Ale jak zmiňuju v článku, nebude kvůli rozdílné doméně pro cookies fungovat společné přihlašování do doby, než se nainstaluje modul SSO.
Přesměrování domény na subdoménu je v pohodě, stačí to nastavit na hostingu.
A bez toho SSO by také lidé měli pouze jednu registraci a jedno přihlašovací jméno a heslo. Akorát by při přechodu na druhý web se museli znova příhlasit?
Když si přesměruji doménu na subdoménu. Tak když zadá do vyhledávače tu doménu tak se mu zobrazí subdoména že? A adresu uvidí té subdomény?
Odpověď 1 - přesně tak.
Odpověď 2 - také jste to trefil :-)
Rád bych se také podělil o zkušenosti s instalací multisite Drupalu.
Všechny své doménu provozuji na HOSTGATOR.COM. Zatím není u českých webhostingů lepší alternativa.
Na multisite instalaci Drupalu jsem přešel hlavně kvůli aktualizaci modulů. Rozkopírovávat nové verze modulů bylo zdlouhavé. Až později jsem začal používat hlavně fotky ze společného adresáře na více webů.
Při provozu jsem zjistil následující nedostatky:
1. Pokud je chyba v novém modulu, přestanou chodit všechny multisite weby. Zkoušel jsem to řešit tak, že mám jeden pokusný web. Na něm jsem nejdříve nahrál novou verzi modulu. Pokud bylo vše bez chyb, pustil jsem modul do ostrého provozu. Po čase jsem zjistil, že různé kombinace modulů se chovají různě. To znamená, že zkušební web by musel být zrcadlem ostrého webu. V součastné době to neřeším, aktualizuji jednou za čas a nebo pokud je bezpečnostní díra.
2. Pokud nová aktualizace modulu mění strukturu tabulek v databázi a já zapomenu na všech webech provést update.php, na těchto webech to hlásí tím pádem chyby. Zatím neřeším.
3. Chybí (nebo jsem nenašel) modul, který by mě dovolil smazat pouze moduly, které jsou neaktivní na všech webech. Teď mažu neaktivní moduly přes FTP a musím porovnávat weby mezi sebou opticky, kdo má jaký modul povolený.
Zatím provozuje s režimu multisite dva weby -Penzion Dukla a Krhory.cz
Dobrý den, potřeboval bych poradit. Mám doménu cz u Pipni a hosting u HostGatoru. Teď jsem chtěl změnit DNS záznamy na HostGator, ale u Pipni to není možné. Tak jsem kontaktoval hotline u Pipni a bylo mi sděleno, že mám poslat doménový klíč HostGatoru. Ptám se proč, nic takového v článku o převodu cz domény není? Děkuji.
Dobrý den. Měla by jim stači IP adresa, kterou najdete v administraci HostGatoru vlevo dole.
Jinak jen tak na okraj, je hloupost registrovat doménu u firmy, která neumožňuje editovat DNS záznamy.
Děkuji za odpověď. Zkusím převést doménu k WEB4U.
Zdravím,
díky za skvělý článek. zkouším na lokálním serveru multisite instalaci na Drupalu 7 a uvedený postup bohužel nefunguje úplně stejně pro společné přihlašování uživatelů. To jsem ale nakonec zdárně vyřešil (co jsem pochopil, tak se už nepoužívá zvláštní proměnná db_prefix, ale proměnná prefix přímo v databases). Rád bych se ale zeptal, jestli je možné (stejně jako tabulky "users", "sesions", ...) sloučit i tabulky "locales_*"... užetřilo by se tím dost místa a i importování řetězců by bylo jednodušší než to dělat pro každý web v instalaci zvlášť.
Díky.
Ano, sloučit můžete prakticky kteroukoli tabulku, když víte proč to děláte.
Pokud si budete registrovat webhosting na HostGatoru, zde je slevový kupón, díky kterému vám z ceny za webhosting odečtou $9,94. Stačí zadat maxiorelcz do příslušné kolonky.