Multi-Mandanten und Ihre Domains

Fragen zur Installation von CONTENIDO 4.10? Probleme bei der Konfiguration? Hinweise oder Fragen zur Entwicklung des Systemes oder zur Sicherheit?
Antworten
shi
Beiträge: 251
Registriert: Fr 5. Nov 2004, 14:12
Kontaktdaten:

Multi-Mandanten und Ihre Domains

Beitrag von shi » Di 3. Dez 2019, 15:18

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?

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Multi-Mandanten und Ihre Domains

Beitrag von Faar » Di 3. Dez 2019, 15:52

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.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Multi-Mandanten und Ihre Domains

Beitrag von xmurrix » Di 3. Dez 2019, 17:03

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
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Multi-Mandanten und Ihre Domains

Beitrag von Oldperl » Di 3. Dez 2019, 22:31

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
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

xmurrix
Beiträge: 3143
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: Multi-Mandanten und Ihre Domains

Beitrag von xmurrix » Di 3. Dez 2019, 22:45

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!
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Multi-Mandanten und Ihre Domains

Beitrag von Faar » Mi 4. Dez 2019, 10:02

:shock:
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Multi-Mandanten und Ihre Domains

Beitrag von Oldperl » Mo 16. Dez 2019, 11:43

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
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Faar
Beiträge: 1915
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Multi-Mandanten und Ihre Domains

Beitrag von Faar » Mo 16. Dez 2019, 12:07

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
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Antworten