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:
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:
CONTENIDO:
Für das Backend und das Setup legst du einen Ordner "contenido_admin" an
Darin kopierst du die Ordner "contenido" und "setup" aus einem CONTENIDO Package. Inhalt von /var/htdocs/www/contenido_admin sieht dann so aus:
Mandant 1:
Für Mandant 1 legst du einen Ordner "mandant1" an
Darin kopierst du die Ordner "cms" und "data" aus einem CONTENIDO Package. Inhalt von /var/htdocs/www/mandant1 sieht dann so aus:
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
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