Die Architektur von OpenGroupware ermöglicht es, mehrere vollständig voneinander getrennt arbeitende OGo Instanzen auf einem System zu installieren. Die Konfiguration der Systeme ist nicht ganz einfach. Es müssen Anpassungen auf mehreren Ebenen vorgenommen werden. Alle Eingriffe sind jedoch von den Möglichkeiten des Systems abgedeckt, so das das System auch weiterhin einfach zu pflegen ist.
Alle Instanzen können völlig getrennt voneinander betrieben werden, so daß keine Gefahr besteht, daß die Benuzter einer Instanz aufgrund unglücklicher Rechtevergabe im OGo System auf die Daten einer anderen Instanz zugreifen können.
Jedes Sytem greift auf einen eigenen Datenbank-Tablespace mit einem eigenen Benutzer zu. Die hochgeladenen Dateien liegen an völlig unterschiedlichen Orten im Filesytem des Hosts.
Im Beispiel wird OGo aus Binärpaketen installiert. Hier werden zuerst die rpm bzw. deb Pakete installiert. Für die einzelnen OGo Instanzen werden die relevanten Verzeichnisbäume in die jeweiligen Zielverzeichnisse kopiert. Das Beispiel basiert auf einer Debian Installation.
Das neue System wird nach $PREFIX/ogo-<instanz>
installiert. Im Beispiel wird $PREFIX auf /opt
gesetzt.
Die Dateien und Verzeichnisse unterhalb des Verzeichnisses
/usr/lib/opengroupware.org
werden nach
/opt/ogo-mw
kopiert.
cp -a /usr/lib/opengroupware.org /opt/ogo-mw
Im Script /opt/ogo-mw/OpenGroupware.org.sh wird die Variable
FORCED_USER_ROOT
auf den neuen Pfad gesetzt (hier
/opt/ogo-mw
). Zusätzlich werden in diesem
Script die Umgebungsvariablen $HOME
und
$PATH
an das neue Verzeichnis angepaßt.
Bei der Initialisierung der Datenbank ist nur zu beachten, daß zur Trennung auf Datenbankebene für diese Instanz ein eigener Tablespace (Datenbank) vorgesehen wird.
root@bauhaus# createdb -U postgres -W ogo-mw root@bauhaus# createuser -U postgres -W -A -D -P ogo-mw
Jetzt ist das Datenbanksystem einschließliche eines
Datenbankusers mit Schreibzugriff vorbereitet. Als nächsts wird
das Datenbankschema eingespielt. Dieses liegt als SQL-Dump in der
Datei
$PREFIX/ogo/Database/PostgreSQL/pg-build-schema.psql
vor
und muß in PostgreSQL importiert werden. Dazu meldet sich der
eben erstellte Datenbankuser am System an und importiert die
Datei.
root@bauhaus# psql -U ogo-mw -W ogo-mw ogo=# \i /opt/ogo-mw/ogo/Database/PostgreSQL/pg-build-schema.psql ogo=# \q
Die Datenbankeinstellungen werden in speziellen
Konfigurationsdateien gespeichert (siehe auch Defaults
). Die Konfiguration wird mit
Hilfe des Befehls Defaults
gesetzt. Der Befehl befindet
nach Aufruf des Scriptes
/opt/ogo-mw/ogo/OpenGroupware.org.sh
im Pfad des
jeweiligen Benutzers.
root@bauhaus# su - ogo-mw ogo-mw@bauhaus$ Defaults write NSGlobalDomain \ LSConnectionDictionary '{ \ databaseName = ogo-mw; \ hostName = localhost; \ password = YOUR_PASSWORD; \ port = 5432; \ userName = ogo-mw; \ }'Der gesamte Befehl muß in einer Zeile abgesetzt werden. Beim Aufruf von
Defaults
kann der "\" nicht zum Escapen von
"\n" angegeben werden.
Mit Defaults read
können die Einstellungen noch
einmal geprüft werden.
ogo-mw@bauhaus$ Defaults Read \ NSGlobalDomain LSConnectionDictionary { databaseName = "ogo-mw"; hostName = localhost; password = "YOUR_PASSWORD"; port = 5432; userName = "ogo-mw"; }
Mit Defaults read
werden alle Einstellungen
angezeigt. Dieses sollte auf jeden Fall durchgeführt werden, um
sicherzustellen, daß alle Einstellungen (z.B. Pfade) auf das
korrekte Verzeichnis der Instanz zeigen.
Die einzelnen Instanzen sollen automatisch per init-Script gestartet werden. Jede einzelne Instanz bekommt ein eigenes Script um diese getrennt starten und stoppen zu können.
Die Daemons OpenGroupware, xmlrpcd und zidestore werden jetzt beim Systemstart so ausgeführt, daß sich sich für jede Instanz jeweils an einen eigenen Port binden. Aus Sicherheitsgründen binden sie sich ausschließlich an das Loopback Device. Eine alternative Lösung könnte die Daemons an unterschiedliche IP-Adressen binden.
Das Script wird jetzt nach
/etc/init.d
kopiert. Das Startscript für die Instanz
wird an die lokalen Gegebenheiten mittels der Variablen
INSTANCE_ROOT, INSTANCE_NAME
und BASEPORT
angepaßt.
INSTANCE_ROOT
Rootverzeichnis der Instanz-Installationen (/opt
).
INSTANCE_NAME
Unterverzeichnis dieser Instanz (ogo-mw
).
BASEPORT
Ports, an die Daemons dieser Instanz gebunden
werden.(21000)
. Der XML-RPC Daemon wird an
$BASEPORT + 1
, der Zidestore Daemon an
$BASEPORT + 2
gebunden.
Der zugriff auf die einzelnen OpenGroupware.org Instanzen erfolgt über unterschiedliche Hostnames. Die Konfiguration des VirtualHosts für die Instanz ist relativ einfach. Hier müssen nur die Alias-Direktive für das Mapping auf "WebServerResources" und die Port-Direktive fü die jeweilige Instanz angepaßt werden.
<LocationMatch "^/OpenGroupware/*"> SetHandler ngobjweb-adaptor SetAppPort 21000 </LocationMatch> Alias /OpenGroupware.woa/WebServerResources/ \ /opt/ogo-mw/WebServerResources/