Multisite beállítás - lépésről lépésre

pakati képe

Jó ideje próbáltam már multisite-ot létrehozni Drupal használatával, de minden lépésnél hiányzott egy pici plusz infó, hogy akkor most "pontosan hogyan és mit és hová írok, stb...". De ma, hála PP-nek, sikerült összehozni a dolgot, s gondoltam megoszton veletek eme nagyszerű dolgot!

A multisite lényege ugyebár, hogy van egy feltelepített Drupal rendszered, és te szeretnél még egy (vagy több) drupal rendszert, de úgy, hogy azok külön kezelhetők, testre szabhatóak legyenek. Na erre jó a multisite. Ő ugyanis ezeket nyújta, ráadásul úgy, hogy nem kell újra bemásolnod az összes php és config fájlt, mert azok közösek (1-2 kivételtől eltekintve). Erre mondják, hogy azonos kódbázissal hozunk létre több külön kezelhető drupal site-ot. A kód közös, de az adatbázis már nem! Csapjunk a lovak közé...

Ami kell

  • PHPMyAdmin-os adatbázis hozzáférés, ahol az adatbázisok vannak/lesznek
  • FTP hozzáférés a szerverhez, ahol az elsődleges drupal van
  • Nem szükséges, de egyszerűbb ha van ssh-s hozzáférés is (putty/mc), ez majd az úgy nevezett szimbólikus linkekhez (symlink) kell

Első lépés

Van egy adatbázisod, amire az alap Drupal (az az egy, ami kezdetben van) hivatkozik, mondjuk legyen ennek a neve: "drupaldb". A második drupalunkat (azaz a multisite-osat) tegyük egy külön adatbázisba, ami praktikusabb lehet az azonos adatbázis de más táblanév előtag használatánál több szempontból:

  • Nem kell egy darab nagy adatbázist kezelni
  • Elkülöníthetőek az adatok
  • Egyszerűbben rendelhetőek külön felhasználók az adatbázisokhoz és így a drupalok adatbázis szintű karbantartásához is

Tehát belépünk a phpmyadmin-ba és létrehozunk egy teljesen üres adatbázist. A neve legyen pl. "multisitedb". Ezzel meg is vagyunk, ki is léphetünk a phpmyadminból.

Második lépés

Most jöhet az ftp-s hozzáférés a Drupal fájljainkhoz (pl. totalcmd/ftp-s része). Legyen mondjuk a drupalunk a "www.valami.hu" szerveren a "drupal" alkönyvtárban. Ha meglessük az eddigi egyetlen drupal-unk könyvtárszerkezetét, akkor ezt láthatjuk:

  • www.valami.hu
    • /...
    • /drupal
      • /includes
      • /misc
      • /modules
      • /profiles
      • /scripts
      • /sites
      • /themes
      • és még pár php és egyéb fájl
    • /...

A sites könyvtár nem véletlenül van félkövérrel kiemelve. Ott kell ugyanis elvégeznünk a második lépést. Ha belépünk a sites könyvtárba, akkor ott az alábbi kép fogad:

  • /all
  • /default

A feladatunk az, hogy a default könyvtárban lévő settings.php-t átmásoljuk egy másik könyvtárba, mégpedig abba a könyvtárba amit most hozunk létre az új Drupal (multisite-os) számára. Tehát ide a sites könyvtáron belülre csináljunk egy új könyvtárat, a szabály a következő: a könyvtár neve az új drupal teljes elérési útja legyen (URL, http:// nélkül) pontokkal elválasztva. Példák: Az eredeti drupal a "www.valami.hu/drupal" címen érhető el. A második legyen mondjuk a "www.valami.hu/multisite" címen elérhető. Ekkor a könyvtár neve: "www.valami.hu.multisite" lesz. A könyvtár szerkezet a sites könyvtárban így néz ki tehát:

Ezután a "default" könyvtárban lévő settings.php fájlt bemásoljuk a "www.valami.hu.multisite" könyvtárba!

Harmadik lépés

A "www.valami.hu.multisite" könyvtárba frissen bemásolt settings.php fájlban még az első Drupal site-ra való hivatkozásások vannak. Amit ebben a fájlban állítani lehet, az az adátbázis hozzáférés és a base url! Nekünk elég csak az adatbázissal törődni, a "base url" állítás különböző domain nevek esetében érdekes csak. "www.valami.hu/drupal" esetében ezek az adatok így néznek ki:

$db_url = 'mysql://username:password@localhost/databasename';
azaz
$db_url=mysql://adatbázisfelhasználónév:adatbázisfelhasználójelszó@localhost/drupaldb';

Ezt kell a sites/www.valami.hu.multisite/setting.php fájlban átírni úgy, hogy a multisite-os Drupal adatbázisára mutasson. Azaz:

$db_url=mysql://adatbázisfelhasználónév:adatbázisfelhasználójelszó@localhost/multisitedb';

Negyedik lépés

Most jön az a lépés, amikor symlinket kell létrehozni, melynek az a lényege, hogy amikor beírjuk majd a böngészőbe a "www.valami.hu/multisite" címet akkor a symlink irányítson át minket a "www.valami.hu/drupal" könyvtárba, s így valósuljon meg az, hogy a két site 1 darab kódbázist használ. A drupal pedig majd elrendezi, hogy akkor miket is kell megjeleníti a "multisite"-on és az eredeti "drupal"-on. Ehhez pedig egy multisite nevű symlinket kell létrehozni a "www.valami.hu" könyvtárba, azaz teljesen a gyökérbe, ami a "www.valami.hu/drupal" könyvtárra mutat. Ezt kétféleképpen is megtehetjük, attól függően, hogy van-e ssh-s hozzáférésünk a szerverhez, avagy sem.

  • Ha igen, akkor mondjuk a putty progival belépünk a szerverre. Ha beléptünk, akkor már csak a link létrehozás parancsát kell tudnunk. Tehát ezt kell beírnunk és érvényesítenünk egy enterrel: ln -s /var/www/drupal multisite

    De ha például a Drupal könyvtár a "gyökérútvonal/public_html"-ben van, s nem a "var/www" könyvtárban akkor: ln -s /gyökérútvonal/public_html/drupal multisite

    Az "ln" paranccsal hozunk létre linket, "-s" azért kell, hogy ne kemény, hanem symlinket hozzunk létre. A következő rész (var/www/drupal) mondja meg a célt, az utolsó (multisite) pedig a symlink nevét. Hogy jól csináltad-e (vagy rosszul), könnyen kiderül. Ha mondjuk ftp-n, vagy itt mc-ben megnyitod a symlinket, akkor rögtön a "/drupal" könyvtárban kell magad találnod. Ha ez így van, akkor sikerült a negyedik lépés! "Ön továbbléphet az ötödik mezőre!" :-)

  • Ha nincs, akkor egy rövidke PHP fájlt kell létrehoznod, majd futtatnod a böngészőből. Hozd létre mondjuk a "symlink.php" fájlt, aminek ez legyen a tartalma:

    $path_linkname = "/var/www/multisite";
    $path_drupal = "/var/www/drupal";
    symlink($path_drupal, $path_linkname);
    ?>

    Bemásolod a gyökérkönyvtárba, s futtatod. Ez létrehozza a multisite nevű symlinket (ami a /drupal könyvtárra mutat) mégpedig a /var/www (vagy /var/public_html) könytárba, azaz pont a "www.valami.hu"-hoz. Ez viszont csak akkor működik ha a PHP-nek van futási joga.

Ötödik lépés

Most, hogy már van symlinkünk, a böngésző is megérti majd a "www.valami.hu/multisite" címet, s tudni fogja, hogy igazából a kódot a "www.valami.hu/drupal" könyvtárból kell venni. DE! Mivel még üres az adatbázis, nem sok mindent láthatunk ha beírjuk a böngészőbe (esetleg az eredeti Drupálunkat látnánk viszont, hiszen csak abban vannak adatok). Tehát installálni kell a multisite-os drupált, amit úgy tudunk mint ahogy elsőt is csináltuk, azaz a /drupal könyvtárban lévő install.php futattásával. A csel viszont annyi (merthogy mért is ne lenne csel :-) ... ), hogy ezt az install.php-t már nem így futtatjuk (azaz írjuk be a böngészőbe): www.valami.hu/drupal/install.php hanem www.valami.hu/multisite/install.php A symlink ugyanis biztosítja, hogy így is a drupal könyvtárba fog menni a hivatkozás, és úgy fut le az install. Mivel a "sites/www.valami.hu.multisite" könyvtárban lévő settings.php-ben beállítottuk az adatbázist (ami üres), az installálás abba az adatbázisba fog lefutni!

Hatodik lépés

Ezután már látni fogod, mit kell tenned. Létrehozni az új drupalod (új site, méghozzá egy a multik közül) első/admin felhasználóját. S innen már tudod :-) Remélem eléggé részletes voltam, és sikerült átadnom minden olyat, ami bukatatót jelentett számomra és talán mások számára is. Eddig!

Hozzászólások

nevergone képe

Esetleg érdemes lenne ezt a leírást átmozgatni a Drupal kézikönyvbe, szerintem hasznos és jól használható.

Már csak egy kérdésem van: A multisite megvalósítás mennyire okozhat problémát olyan alkönyvtár (jellemzően pl. files) használatakor, ahova több Drupal modul is helyez el állományokat? Például az egyik oldalon belépve az image modul használatával feltöltök egy képek, akkor az általában valahova a files alkönyvtárba kerül. Ha ezek után a multisite megoldásnál a másik weboldalon (amely azonos kódbázison alapul az előzővel) belépek, és feltöltöm ugyanazt a képet, nem fog -e problémát okozni, hogy az előzőleg már feltöltött kép valószínűleg ugyanolyan néven szerepel a files alkönyvtáron belül?

bubu képe

Ez a kérdés engem is érdekel. Én azt tapasztaltam, hogy a csatolt állományok törlése ilyen használat mellett nem történik meg: a cikkben törlődik, de a fájl fönn marad - hibaüzenet nincs. Bár lehet hogy ez mástól van?
Gyuris Gellért

Gyuris Gellért

CHi képe

Szia!

Ezt irja, ki amint beszeretném tölteni a multi site-al beállított oldalt.

Access forbidden!

You don't have permission to access the requested directory. There is either no index document or the directory is read-protected.

If you think this is a server error, please contact the webmaster.
Error 403

Már találkoztam ezzel a problémával, s a .htaccess-t kellett átállítani valahogy.
Tud valaki ebben segiteni?

kalmarr képe

Sziasztok!

Nagyon jónak találom az ismertetőt, de érdekelne az is, ha csak egy részét szeretném megosztani a Drupal-ok között. Pl: Milyen változtatásokat kell elvégeznem ahhoz, ha csak a felhasználókat szeretném közössé tenni. (Gondolom, ha erről infókat kapok, akkor már könnyedén szét lehet szedni az adatbázist pl: tartalmak megosztására).

Üdv.

KALMI

Pasqualle képe

http://drupal.org/node/22267

1. kozos adatbazisba kulonbozo db_prefix-el installalni a ket weboldalt
2. settings.php-ban megadni a kozos tablakat

kalmarr képe

Ez jó az 5.X-nél is, vagy ott másra is kellene figyelni még?

pp képe

Az 5-nél figyelj, hogy ott még van sequences tábla amit mindenképpen meg kell osztanod, mert az egyedi azonosítókat innen szedi. A schema API-nak hála a hatosban ki lehet használni a mysal autoincrement lehetőségét. (tehát ott nincs schema)

pp

CHi képe

Szia!

Kérlek segitsetek abban, hogy melyik táblákat kell megosztanom ahhoz, hogy
a 2 site ugyanazt a felhasználói adatbázist használja.

Tehát a fő drupalban regisztrált felhasználókat használja. Mert a másik oldal szimplán egy közösségi oldal lesz, de ugyanazok a felhasználók látogathatják, s irhatnak benne.

köszönöm:
Laci

eMeLA képe

A symlink-es megoldás helyett én subdomain-okat hoztam létre az egyes oldalaknak, ami mind a drupal kód tárhelyére mutatnak.
Ez esetben elég a /sites könyvtárban a subdomain nevű könyvtárakat létrehozni és belerakni a settings.php-t, modulokat, és theme-ket.

Nekem szebbnek is tűnően néz ki a hivatkozás:
A http://domainem.hu/aloldalam helyett http://aloldalam.domainem.hu (persze a szakemberek lehet, hogy cáfolni fognak :)

...mit tudok: http://web.termuves.hu

aboros képe

amúgy meg szebb az utóbbi. :)
én úgy tudom, hogy az aldomaint azt teljesen külön domainként értelmezi a robot. tehát arra külön linkbuildinget kell nyomatnod. a /valami megoldásnál /valami ugyanúgy domainem.hu -hoz tartozó aloldal, tehát ha mondjuk domaint.hu -nak magas a prje, akkor azt ez az aloldal is élvezni fogja.

-
clear: both;

CHi képe

Szia!

Köszönöm. Hogyan tudom beállítani, hogy az egyes oldalak a drupal kód tárhelyére mutatnak?
Nem igazán értem, hogy milyen lépés után mit tegyek. S erre a kérdésre magyarul nem találtam leírást. De úgy látom, hogy te nagyon értesz hozzá, s biztosan eltudod magyarázni, vagy leírni.
Előre is köszönöm:
Laci

ttsz képe

Hogyan tudom külön domainre tenni, a multi site egyes oldalait.
Sajnos te csak a /valami megoldást taglaltad. A base_url -t kell confolni gondolom.

Tudja valaki hogyan?

Köszönöm

sgabe képe

A sites mappában domainenként helyezed el az oldalak saját moduljait, sminkjeit (már ha vannak neki) és a megfelelő settings.php fájlt, amiben a base_url a megfelelő domain.

ttsz képe

Akkor itt nem kell simlink?
És a fő drupalra mutasson a szerveren a domain? Mert ezt nem tudom :S

Köszi

ttsz képe

nem kell simlink, csak a gyökérre irányítani a hostot és a base url teszi a dolgát. Szuper

lizard képe

Sziasztok!

Van egy drupalos működő oldal. Szeretnénk azt, hogy egy alsite (mindegy, hogy aldomainnel, vagy alkönyvtárral oldjuk meg) is legyen ugyanazon a drupalon. Ugye az adatbázis már tartalmaz táblákat, tartalmakat. Amikor létre lett hozva, nem használtunk prefixet a táblanevekhez. Ha újra létrehozok egy teljesen új drupalt, akkor ki tudom alakítani az adatbázis szerkezetet prefixes táblanevekkel, de ugye akkor a már működő tartalom hogyan kerül bele? Létezik valami megoldás arra, hogy a már meglevő tartalom mellé tegyek multisite megoldással különálló tartalmat, eltérő smink, eltérő tartalom lenne, de ne kelljen külön regisztrálni a különböző oldalakhoz?
Köszönöm!

Balu Ertl képe

Köszi a klassz leírást, így lépésről-lépésre jóval egyszerűbb követni. Én azonban (saját tudatlanságomból) belefutottam 1-2 kérdésbe, bocs, ha triviálisak a hozzáértőknek, de talán a kezdőknek jól jöhetnek:

1. A alkönyvtár-elnevezési konvenció doménnév helyett IP-címmel is működik: sites/123.0.0.1.multisite -ba kerülhet a settings.php, a végeredmény ugyanúgy http://123.0.0.1/multisite lesz

2. Symlink csak alkönyvtár esetén kell (a hivatalos doksi is jól leírja: http://drupal.org/getting-started/6/install/multi-site), doménnév esetében nem! (Akkor egyszerűen csak ugyanúgy az IP-re irányítod az A-rekordot, és a kódbázis telepítési gyökerében figyelő index.php érzékelni fogja, hogy milyen domén-ről hívták meg, és ha talál annak megfelelő settings.php-t a sites-ban, akkor azt a DB-t használja.) De alkönyvtár esetén "ÖNMAGÁRA MUTATÓ" SYMLINK-et kell létrehozni, azaz a kódbázis telepítési gyökerében egy fiktív, "mintha-alkönyvtár-lenne" (a cikkben multisite-nak hívja) symlinket hozunk létre, ami azonban ugyanoda, azaz az index.php-t tartalmazó telepítési gyökérre mutat. Ez nekem sokáig nem volt tiszta...

3. Szintén elég láma hiba a részemről: ha már egyszer előre konfiguráltam a settings.php-ban a mySQL-elérés paramétereit (ezzel átugorva a telepítés ezeket bekérő lépését), akkor ugyan, gondoskodjam már róla, hogy az a DB ne legyen szűz üres :) Ekkor ugyanis csak egy színtiszta, hófehér képernyőt kapok a Drupal-tól. Lehet, egy hibaüzenet jól jönne ide: "Hozzáférek jól a DB-hez, de üres, most mi legyen?"

Sok sikert! Multisite-ra fel!

JurgN képe

Köszi, ez a kiegészítés kellett! A leírásból nem jön át egyértelműen, de a lényeg az, hogy a gyökérkönyvtárba egy, a gyökérkönyvtárra mutató symlink kell, amit átnevezünk "multisite"-ra.
Javasolnám, hogy ezt így vegyük bele a leírásba, megelőzendő a felesleges köröket (amikbe én is belefutottam).

Szergio képe

Az első lépéssel kapcsolatosan kérdés:
- "praktikusabb" a külön adatbázis, de attól működik úgy is, hogy ha egy adatbázison belül több előtaggal ellátott tábla-rendszer van? (nálam már így vannak létrehozva a táblák, illetve így működnek a site-k, amelyek most szeretnék multisite-vé alakítani ... a könnyebb karbantartás végett)

- pontosan mit is jelent, hogy külön adatbázis esetében "elkülöníthetőek az adatok"? - attól, hogy egy adatbázist (más előtagos táblákkal) használnak keverednek a site-ok adatai?

- az előtagos megoldásnál esetleg van, amire nagyon oda kell figyelni?

Előre is kösz' szépen a meglátásaitokat! (no meg a részletes leírást, amely alapján kezdtem bátorságot gyűjteni ;-))

DruTa képe

Sziasztok!

Ezt a megoldást a 7-es drupálnál próbálgatom épp.

Az a kérdésem, hogy csak másik domain esetén működik, vagy mappa esetén is?

Pl. van egy normál telepítésem a valami.hu domainon, ennek a gyökerében van a drupal telepítés, tehát nem külön mappában.

Ha azt szeretném, hogy egy valami.hu/multi1 mappában legyen egy másik "al"drupal, (és akár egy harmadik multi2 néven) akkor a sites mappába csinálhatok egy valami.hu.multi1 mappát és ez ugyan úgy fog működni, mintha egy másik domain lenne?

Ha lehetséges és az adatbázisban ezt csak előtaggal akarom megoldani, akkor elég, ha a settings.php-ban az adatbázisnévhez előtagot írok?

És mi lesz az eredeti drupalra épített oldallal? Nem kéne azt kivennem onnan és egy multi mappába tenni, azaz, hogy a gyökér drupal teljesen szűz legyen?

kisspepe képe

Szeretnék létrehozni egy multisite-ot drupal 7-el. Követem az itteni leírást, de a symlink készítése nem egészen világos.

Az alap drupal rendszer a /homes/kisspepe/public_html mappában van.
A másik drupal site: /homes/kisspepe/public_html/sites/www.kisspepe.info.kiskunfelegyhaza elérési útvonalon van.

Ehhez nekem a következő symlinket kell létrehoznom?
/homes/kisspepe/public_html/kiskunfelegyhaza, mely a /homes/kisspepe/public_html/sites/www.kisspepe.info.kiskunfelegyhaza-ra mutat?