Multisiting mit DRUPAL - mache ich was falsch?
am 20.06.2007 - 12:17 Uhr in
Tag community,
folgendes: ein Kollege und ich versuchen eine Multisite-Installation der v5 hinzukriegen.
Ziel ist: 1 Installation von Drupal, "darunter" 3 Websites.
Jede Website hat eigenen Content/Nodes etc, aber die Authentifizierung/Userprofile läuft zentral ab.
Datenbanken:
AuthDB - Datenbank für die Authentifizierungsdaten/Sessions/UserProfiles etc.
MainDB - Datenbank für die Hauptdomain dinpellets.de
SubDB1 - Datenbank für die Domain sub1.dinpellets.de
SubDB2 - Datenbank für die Domain sub1.dinpellets.de
Insgesamt also 4 Datenbanken - 1 Zentrale(AuthDB), die nur die Tabellen
'users'
'sessions'
'role'
'authmap'
'sequences'
'profile_fields'
'profile_values'
'users_roles'
enthält, und die 3 anderen DBs, die umgekehrt alles ausser der o.g. Tabellen enthält.
Die Schritte waren wie folgt:
1. die entpackte Installation auf den Server hochgeladen.
2. im ordner "sites" -
- default nach dinpellets.de kopiert
- default nach sub1.dinpellets.de kopiert
- default nach sub2.dinpellets.de kopiert
- default umbenannt nach default_off, also "ausgeschaltet" sozusagen
3. settings.php in den Ordnern
sites/dinpellets.de
sites/sub1.dinpellets.de
sites/sub1.dinpellets.de
angepasst:
Für dinpellets.de(Hauptseite)
$db_url = 'mysql://multiuser:test@localhost/MainDB';
$db_prefix = array(
'default' => 'MainDB.',
'users' => 'AuthDB.',
'sessions' => 'AuthDB.',
'role' => 'AuthDB.',
'authmap' => 'AuthDB.',
'sequences' => 'AuthDB.',
'profile_fields' => 'AuthDB.',
'profile_values' => 'AuthDB.',
'users_roles' => 'AuthDB.',
);
Für sub1.dinpellets.de
$db_url = 'mysql://multiuser:test@localhost/SubDB1';
$db_prefix = array(
'default' => 'SubDB1.',
'users' => 'AuthDB.',
'sessions' => 'AuthDB.',
'role' => 'AuthDB.',
'authmap' => 'AuthDB.',
'sequences' => 'AuthDB.',
'profile_fields' => 'AuthDB.',
'profile_values' => 'AuthDB.',
'users_roles' => 'AuthDB.',
);
Für sub2.dinpellets.de
$db_url = 'mysql://multiuser:test@localhost/SubDB2';
$db_prefix = array(
'default' => 'SubDB2.',
'users' => 'AuthDB.',
'sessions' => 'AuthDB.',
'role' => 'AuthDB.',
'authmap' => 'AuthDB.',
'sequences' => 'AuthDB.',
'profile_fields' => 'AuthDB.',
'profile_values' => 'AuthDB.',
'users_roles' => 'AuthDB.',
);
3. Installationen durchführen:
jeweils
dinpellets.de/install.php
sub1.dinpellets.de/install.php
sub2.dinpellets.de/install.php
aufgerufen und die Installationen wurden automatisch gemacht.
Beim Installation der dinpellts.de habe ich den admin-User angelegt.
Soweit sogut.
Danach konnte ich mich separat auf jeder der Domains mit dem admin-User
anmelden.
Warum ich "separat" betone - weil der sinn und Ziel war es eigentlich
eine Multisite-Installation hinzukriegen, wo man sich auf der Website A
anmeldet, und dann auf den Webseiten B und C frei als angemeldeter User
rumspazieren kann.
Deswegen war habe ich nachgehakt und folgendes als "Fehlerquelle" herausgefunden:
jede der drei DOmains legt als zugehörige Domain im Cookie natrürlich
den eigenen Domainnamen.
Deswegen habe ich in den drei settings.php der Domains den Code
/**
* We try to set the correct cookie domain. If you are experiencing problems
* try commenting out the code below or specifying the cookie domain by hand.
*/
if (isset($_SERVER['HTTP_HOST'])) {
$domain = '.'. preg_replace('`^www.`', '', $_SERVER['HTTP_HOST']);
// Per RFC 2109, cookie domains must contain at least one dot other than the
// first. For hosts such as 'localhost', we don't set a cookie domain.
if (count(explode('.', $domain)) > 2) {
ini_set('session.cookie_domain', $domain);
}
}
umgewandelt in
/**
* We try to set the correct cookie domain. If you are experiencing problems
* try commenting out the code below or specifying the cookie domain by hand.
*/
if (isset($_SERVER['HTTP_HOST'])) {
$domain = "dinpellets.de";
#$domain = '.'. preg_replace('`^www.`', '', $_SERVER['HTTP_HOST']);
// Per RFC 2109, cookie domains must contain at least one dot other than the
// first. For hosts such as 'localhost', we don't set a cookie domain.
# if (count(explode('.', $domain)) > 2) {
ini_set('session.cookie_domain', $domain);
# }
}
Steht ja sogar im "comment" zu dieser Passage drin:
"[...] or specifying the cookie domain by hand."
Damit legte ab jetzt die Domain - egal wo man sich anmeldete - ein Cookie mit ".dinpellets.de" als Domain
an. Diese Cookie wurde von anderen entsprechend auch benutzt. Alles tip-top.
Damit konnte mich nun überall anmelden und quer über die Webseiten als angemeldeter User rumspazieren.
So.
Meine große Preisfrage nun: JA WARUM ZUM TEUFEL IST DENN SO EIN HACK ÜBERHAUPT NÖTIG?
Oder der Hack ist gar nicht nötig und war ich einfach zu blöd eine
korrekte Multisite-Installation hinzukriegen??
Für jede Meinung - herzlichen Dank...
Liebe Grüße
- Anmelden oder Registrieren um Kommentare zu schreiben
Hallo andron13! ich versuche
am 20.08.2008 - 19:57 Uhr
Hallo andron13!
ich versuche auch eine Multisite-Installation hinzubekommen bei der man sich nur ein mal als admin einloggen muss und alle seiten verwalten kann, das gleiche soll auch für die user gelten. Bis jetzt klappt es aber bei mir nicht so richtig.
Bei der Installation habe ich die gleichen B-namen und Passwort benutzt und $base_url eingetragen. Alle Sites benutzen diegleiche datenbank mit Prefix (Hauptseite ohne Prefix).
Was mache ich da falsch oder was fehlt noch?
Welche Einzelpunkte aus deiner Erklärung sind genau für login auf allen seiten verantwortlich?
Oder müssen sie alle berücksichtigt werden (wobei in meinem Fall nur eine DB benutzt wird)
Ich wäre dir sehr für einen Hinweis dankbar, versuche schon seit Tagen hier im Forum eine Antwort darauf?
Schau auch bitte hier:
http://www.drupalcenter.de/node/12213
Hi. also ich hab eigentlich
am 21.08.2008 - 00:29 Uhr
Hi. also ich hab eigentlich es hinbekommen.
hier settings.php
* Database URL format:
* $db_url = 'mysql://username:password@localhost/databasename';
* $db_url = 'mysqli://username:password@localhost/databasename';
* $db_url = 'pgsql://username:password@localhost/databasename';
*/
$db_url = 'mysql://multiuser:test@localhost/Datenbank-fur-die-seite-№1';
//$db_prefix = '';
$db_prefix = array(
'default' => 'Datenbank-fur-die-seite-№1.', //// für jede seite eigene
'users' => 'Datenbank-fur-alle-seiten-№0.',
'sessions' => 'Datenbank-fur-alle-seiten-№0.',
'role' => 'Datenbank-fur-alle-seiten-№0.',
'authmap' => 'Datenbank-fur-alle-seiten-№0.',
'sequences' => 'Datenbank-fur-alle-seiten-№0.',
'profile_fields' => 'Datenbank-fur-alle-seiten-№0.',
'profile_values' => 'Datenbank-fur-alle-seiten-№0.',
'users_roles' => 'Datenbank-fur-alle-seiten-№0.',
);
Das
/**
* We try to set the correct cookie domain. If you are experiencing problems
* try commenting out the code below or specifying the cookie domain by hand.
*/
if (isset($_SERVER['HTTP_HOST'])) {
$domain = '.'. preg_replace('`^www.`', '', $_SERVER['HTTP_HOST']);
// Per RFC 2109, cookie domains must contain at least one dot other than the
// first. For hosts such as 'localhost', we don't set a cookie domain.
if (count(explode('.', $domain)) > 2) {
ini_set('session.cookie_domain', $domain);
}
}
muss geändert werden auf:
/**
* We try to set the correct cookie domain. If you are experiencing problems
* try commenting out the code below or specifying the cookie domain by hand.
*/
if (isset($_SERVER['HTTP_HOST'])) {
$domain = "DEINESEITE.DE";
#$domain = '.'. preg_replace('`^www.`', '', $_SERVER['HTTP_HOST']);
// Per RFC 2109, cookie domains must contain at least one dot other than the
// first. For hosts such as 'localhost', we don't set a cookie domain.
# if (count(explode('.', $domain)) > 2) {
ini_set('session.cookie_domain', $domain);
# }
}
das sollte noch reingezogenwerden.
Danke dir, ich werde es
am 21.08.2008 - 11:24 Uhr
Danke dir, ich werde es ausprobieren wenn ich wieder Zeit dafür habe.
Hast du (oder jemand anders) Erfahrungen mit dem Modul "Domain Access", der soll ja ähnliche Funktionen beinhalten. Empfielt es den odendrauf zu installieren? (nachdem alles eingerichten ist, er wird sich ja bestimt mit den vorhandenen Einstellungen bedienen?) Wird bestimmt nicht schaden, oder?