Seite 1 von 1

Multi-Mandanten und Ihre Domains

Verfasst: Di 3. Dez 2019, 15:18
von shi
Hallo, bis jetzt hatte ich für jeden Kunden eine CMS-Installation. Wie funktioniert das eigentlich, wenn ich mehrere Mandanten mit jeweils unterschiedlichen Domain, mit nur einem CMS verwalten möchte?

Wie funktioniert das mit den Domain-Weiterleitungen, so das die Mandanten nur ihre eigene Domain sehen?
Gibt es eine Anleitung online?

Re: Multi-Mandanten und Ihre Domains

Verfasst: Di 3. Dez 2019, 15:52
von Faar
Bei Contenido ist ein Mandant auf dem Webserver sogar physikalisch vorhanden und vom anderen Mandanten parallel getrennt.
Daher ist es äußerst einfach, in der Hosterverwaltung eine Domain auf das Mandantenveerzeichnis zu legen.
Der erste Mandant heißt automatisch /cms, er kann aber auch anders genannt werden, z.B. /fipsi und der zweite dann /fopsi
In den Mandanteneinstellungen steht dann die Domain und der Serverpfad.
Und in der config.php im Mandantenverzeichnis weiß ich jetzt nicht auswendig, ob da auch nochmal die Domain auftaucht.

Tatsächlich braucht aber das Kern-System (/contenido, /data, /setup) irgendeine Domain oder Subdomain, worunter dieser Verzeichnisse erreichbar sind. Meistens nimmt man da die erste Domain, womit das System eingerichtet wird, aber ich hatte letztens auch einen Fall, wo die erste Domain weg gefallen ist und nur noch die zweite übrig blieb. Ging dann auch umzubauen.

Re: Multi-Mandanten und Ihre Domains

Verfasst: Di 3. Dez 2019, 17:03
von xmurrix
Hallo shi,

Faar hat beschrieben, wie man das in CONTENIDO einfach realisieren kann. Damit hast du eine CONTENIDO Installation mit vielen Mandanten und einer Datenbank.

Willst du aber für jeden Mandanten eine eigene Datenbank haben, gibt es auch die Möglichkeit mit Symlinks zu arbeiten.

Jede CONTENIDO Installation hat folgende Ordnerstruktur:
  • cms
  • contenido
  • data
  • docs
  • setup
  • test
Die Ordner "docs" und "test" sind nicht für dieses Beispiel relevant, die lassen wir mal aus. Übrig bleibt:
  • cms
  • contenido
  • data
  • setup
Ziel ist wie folgt:
  • cms
  • contenido (symlink)
  • data
  • setup (symlink)
Nehmen wir an, du hast einen Server mit folgendem Pfad zum Verzeichnis, in der die Dateien für den Webserver liegen:

Code: Alles auswählen

/var/htdocs/www

CONTENIDO:
Für das Backend und das Setup legst du einen Ordner "contenido_admin" an

Code: Alles auswählen

/var/htdocs/www/contenido_admin
Darin kopierst du die Ordner "contenido" und "setup" aus einem CONTENIDO Package. Inhalt von /var/htdocs/www/contenido_admin sieht dann so aus:
  • contenido
  • setup

Mandant 1:
Für Mandant 1 legst du einen Ordner "mandant1" an

Code: Alles auswählen

/var/htdocs/www/mandant1
Darin kopierst du die Ordner "cms" und "data" aus einem CONTENIDO Package. Inhalt von /var/htdocs/www/mandant1 sieht dann so aus:
  • cms
  • data
Mandant hat die Domain "mandant1.de". Die Domain des Mandanten zeigt auf /var/htdocs/www/mandant1. Das kann man beim Provider in der Administration des Webpaketes einstellen.

Im Document-Root des Mandanten 1 (/var/htdocs/www/mandant1) braucht man nun zwei Symlinks. Symlinks sind "Verknüpfungen", die auf eine andere Stelle verweisen. Jeweils einen Symlink zum "contenido" Ordner und zum "setup" Ordner erstellen.

Code: Alles auswählen

ln -s /var/htdocs/www/contenido_admin/contenido /var/htdocs/www/mandant1/contenido
ln -s /var/htdocs/www/contenido_admin/setup /var/htdocs/www/mandant1/setup
Symlinks kann man auch mit relativen Pfadangaben setzen, ich habe hier der Einfachheit halber vollständige Pfade verwendet.
Wichtig: Symlinks kann man nicht mit einem FTP-Programm setzen, man braucht eine SSH-Verbindung zum Server.

Nun sollte der Inhalt des Document-Root des Mandanten 1 so aussehen:
  • cms
  • contenido (symlink)
  • data
  • setup (symlink)

Mandant 2:
Ist die gleiche Vorgehensweise wie bei Mandant 1, nur dass hier die Domain (mandant2.de) und der Document-Root des Mandanten 2 (/var/htdocs/www/mandant1) unterscheidet.


Vorteile
  • CONTENIDO Backend und Setup sind an einer Stelle
  • Jeder Mandant verwendet das CONTENIDO Backend und Setup
  • Jeder Mandant hat dadurch eine eigene Datenbank
  • Keine weiteren Änderungen/Anpassungen nötig, da es sich wie eine normale CONTENIDO Installation verhält

Nachteile
  • Bei einem Update muss man das Setup für jeden Mandanten einzeln ausführen
  • Im Backend installierte und aktivierte Plugins können sich vermutlich auf alle Mandanten auswirken?
  • Ändert man ein Modul, dann ist dies nur für den jeweiligen Mandanten gültig, da Mandanten sich nicht die Module teilen
  • Für das Backend ist jeweils immer nur ein Mandant bekannt

Andere Lösungen
Es gibt auch andere Lösungen mit Sub-Domains und Mandanten, die sich eine Datenbank teilen. Ich würde die Trennung der Datenbank für jeden Mandanten bevorzugen, da die Datenbank im Laufe der Zeit größer wird und man sehr schwer daraus einen Mandanten extrahieren kann, sollte man z. B. den einen Mandanten aus einem Multimandanten-System herauslösen wollen.


Tipp: Ein Modul-Verzeichnis für alle Mandanten
Will man sich ein Modulverzeichnis erstellen, aus der alle Mandanten sich bedienen können, kann man wie folgt vorgehen:

Für das Modulverzeichnis legst du einen Ordner "client_modules" unter /var/htdocs/www/contenido_admin an

Code: Alles auswählen

/var/htdocs/www/contenido_admin/client_modules
Darin kopierst du alle Module, die du haben möchtest.

Für die Mandanten müssen nun Symlinks erstellt werden, die auf das zentrale Modulverzeichnis zeigen

Bei Mandant 1:

Code: Alles auswählen

ln -s /var/htdocs/www/contenido_admin/client_modules /var/htdocs/www/mandant1/cms/data/modules
Bei Mandant 2:

Code: Alles auswählen

ln -s /var/htdocs/www/contenido_admin/client_modules /var/htdocs/www/mandant2/cms/data/modules
Nachteile gibt es auch:
Da sich alle Mandanten ein Modulverzeichnis teilen, muss man aufpassen, wenn man Module ändert oder löscht. CONTENIDO erkennt dann nicht, bei welchem Mandanten man ein Modul verwendet.

Gruß
xmurrix

Re: Multi-Mandanten und Ihre Domains

Verfasst: Di 3. Dez 2019, 22:31
von Oldperl
Servus,

warum kompliziert wenn es einfach geht? :wink:
Für Multi-Datenbanksysteme mit Contenido 4.10 bietet sich die ENVIROMENT-Umschaltung der Konfiguration an. Indem ich für jede Domain eine eigene Umgebung definiere, kann ich sehr einfach unterschiedliche Datenbanken, ja sogar unterschiedliche Datenbank-Server für jeden Mandanten nutzen.

Gruß aus Franken

Ortwin

Re: Multi-Mandanten und Ihre Domains

Verfasst: Di 3. Dez 2019, 22:45
von xmurrix
Oldperl hat geschrieben:
Di 3. Dez 2019, 22:31
...Für Multi-Datenbanksysteme mit Contenido 4.10 bietet sich die ENVIROMENT-Umschaltung der Konfiguration an. Indem ich für jede Domain eine eigene Umgebung definiere...
Verwendest du dafür Conditional Settings in der .htaccess?

Code: Alles auswählen

SetEnvIf Host ^(www\.)?mandant1\.de$ CON_ENVIRONMENT=mandant1
SetEnvIf Host ^(www\.)?mandant2\.de$ CON_ENVIRONMENT=mandant2
So geht das natürlich auch, eine gute Idee!

Re: Multi-Mandanten und Ihre Domains

Verfasst: Mi 4. Dez 2019, 10:02
von Faar
:shock:

Re: Multi-Mandanten und Ihre Domains

Verfasst: Mo 16. Dez 2019, 11:43
von Oldperl
Servus,
xmurrix hat geschrieben:
Di 3. Dez 2019, 22:45
Verwendest du dafür Conditional Settings in der .htaccess?

Code: Alles auswählen

SetEnvIf Host ^(www\.)?mandant1\.de$ CON_ENVIRONMENT=mandant1
SetEnvIf Host ^(www\.)?mandant2\.de$ CON_ENVIRONMENT=mandant2
Kann man, einfacher geht es gleich in der vhost-Datei der Domain, insofern man da ran kommt.
Faar hat geschrieben:
Mi 4. Dez 2019, 10:02
:shock:
Gell, da schaust... :P

Gruß aus Franken

Ortwin

Re: Multi-Mandanten und Ihre Domains

Verfasst: Mo 16. Dez 2019, 12:07
von Faar
Oldperl hat geschrieben:
Mo 16. Dez 2019, 11:43
Servus,
Faar hat geschrieben:
Mi 4. Dez 2019, 10:02
:shock:
Gell, da schaust... :P

Gruß aus Franken
Ortwin
:P