Deutsche Zope User Group
Gast 2 Benutzer online
DZUG-News

Mehrere Zope Instances auf einer Maschine hinter Apache

Es gibt zwar einige Artikel zu diesem Thema, aber (noch) nichts, was im Detail beschreibt, wie man die Instances installiert und hinter Apache setzt, bis zum Aufsetzen der Start/Stop-Scripts. Einiges stammt aus anderen (englischen) Artikeln, ein Teil aus der Mailinglist, ein Teil von mir (der ist mir Vorsicht zu geniessen ;-) ).

Also wir m�chten also folgende Tasks ausf�hren:

  1. Ein Zope mit mehreren Instance aufsetzen

  2. Apache mit Zope so einrichten, dass mit dem Aufruf http://projekt1.firma die entsprechende Zope-Instance aufgerufen wird.

  3. Alle Start & Stop-Scripts f�r Linux so stellen, dass alles aut. gestartet wird.

Also, als erster setzen wir ein normales Zope auf, was ich hier aber nicht beschreiben m�chte. Der Artikel geht davon aus, dass Zope im Directory /usr/local/Zope (=ZOPE_HOME) installiert ist.

In ZOPE_HOME erstellen wir ein Verzeichnis "zope-sites" und darin pro Instance ein Directory, also:

  • ZOPE_HOME/zope-sites/projekt1

  • ZOPE_HOME/zope-sites/projekt2

Man kann auch ein Template-Directory erstellen, von dem man dann immer eine Minimal-Installation kopieren kann.

In projekt1 erstellen wir also nun folgende Verzeichnisse:

  • Extensions (f�r Python-Scripts)

  • import (f�r Imports von zexp-Files)

  • Products (wir installiern immer nur die Produkte, welche das Projekt auch braucht)

  • var (f�r Daten-Files, Log-Files ...)

Das Directory var muss nun noch die richtigen Berechtigungen bekommen, sonst gibt's Fehler:

chown root.zope var chmod g+w var chmod o+t var

Vom ZOPE_HOME kopieren wir uns noch die Files "start" und "stop" in das projekt1-Verzeichnis. Diese passen wir an (alle �nderungen mit ### markiert)

start:

 ----------------------------------------------------------------------
#!/bin/sh
umask 077
reldir=`dirname $0`
INSTANCE_HOME=`cd $reldir; pwd`; export INSTANCE_HOME ### neu
ZOPEHOME=/usr/local/Zope; export ZOPEHOME             ### neu
cwd=`cd $reldir; pwd`
# Zope's event logger is controlled by the "EVENT_LOG_FILE" environment
# variable.  If you don't have a "EVENT_LOG_FILE" environment variable
# (or its older alias "STUPID_LOG_FILE") set, Zope will log to the standard
# output.  For more information on EVENT_LOG_FILE, see doc/ENVIRONMENT.txt.
ZLOGFILE=$EVENT_LOG_FILE
if [ -z "$ZLOGFILE" ]; then
        ZLOGFILE=$STUPID_LOG_FILE
fi
if [ -z "$ZLOGFILE" ]; then
        EVENT_LOG_FILE=""
        export EVENT_LOG_FILE
fi
# exec /usr/local/ActivePython-2.1/bin/python $cwd/z2.py -D "$@" ### makieren
### folgende Zeile neu
exec /usr/local/ActivePython-2.1/bin/python \
        $ZOPEHOME/z2.py \
        -w 8080 \
        -L '' \
        -f - \
        -m - \
        -u zope \
        -a 192.168.0.1
        "$@"
 ----------------------------------------------------------------------

evtl. noch das Python Directory anpassen und nat�rlich die anderen Switches nach Gusto. Achtung: das start File in "projekt2" muss dann einen anderen Port haben, z.B. -w 9080

nun stop:

 ----------------------------------------------------------------------
#! /bin/sh
# kill `cat /usr/local/Zope-2.6.1b2-src/var/Z2.pid` ### kommentieren
# 01.02.2003/df Grid
reldir=`dirname $0`                  ### neu
pidhome=`cd $reldir/var; pwd`        ### neu
kill `cat $pidhome/Z2.pid`           ### neu
 ----------------------------------------------------------------------

So, nun m�chten wir diesen Script auch beim booten aut. starten lassen. Dazu erstelllen wir in /etc/inti.d:

Zope-projekt1:

 ----------------------------------------------------------------------
#! /bin/sh
### BEGIN INIT INFO
# Provides: zope 
# Required-Start: oracle apache
# Required-Stop:
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Description: Zope-Daemon/E-FIMS
### END INIT INFO
export ORACLE_HOME=/opt/oracle/product/o9i
export ORACLE_SID=GRID
ORA_NLS33=/opt/oracle/product/oracle/ocommon/nls/admin/data
export NLS_NUMERIC_CHARACTERS=".,";
export NLS_LANG=GERMAN_SWITZERLAND.WE8ISO8859P1
export PATH=/usr/local/ActivePython-2.1/bin:$PATH
zopedir=/usr/local/Zope/zope-sites/EFIMS
PATH=.:$PATH
case "$1" in
  start)
    echo -n "Starting zope daemon: zope"
    cd $zopedir
    $zopedir/start -u zope>var/error.log 2>&1 &
    echo "."
    ;;

  stop)
    echo -n "Stopping zope daemon: zope"
    cd $zopedir
    ./stop
    rm -f var/*.pid var/pcgi.soc
    echo "."
    ;;

  restart)
    $0 stop
    sleep 3
    $0 start
    ;;

  reload)
    $0 restart
    ;;

  force-reload)
    $0 restart
    ;;

  *)
    echo "Usage: /etc/init.d/zope {start|stop|restart|reload|force-reload}"
    exit 1
    ;;
esac
exit 0
 ----------------------------------------------------------------------

Nun noch in /etc/init.d/rc5.d ein link auf diese File::

  • cd /etc/init.d/rc5.d

  • ln -s /etc/init.d/rc5.d/Zope-projekt1 S99Zope-projekt1

(Ich mache das allerdings alles mit Webmin)

Die Zeile # Required-Start: oracle apache solltest du noch �ndern, wenn du kein Oracle hast. Sie sorgt daf�r, dass vor Zope Oracle und Apache gestartet werden. Dies ist der Name des Start-Scripts, welcher in /etc/init.d ist. Kl�re ab, ob dein Apache-Startscript auch "apache" heisst, sonst gibt's Fehler.

Nun noch alles nochmals f�r projekt2.

So, wenn nun die Maschine gebootet wird, sollte unser Zope gestartet werden. Allerdings k�nnen wir nur via http://ip:8080 darauf zugreifen. Wir m�chten allerdings http://projekt1.firma eingeben.

Also nehmen wir uns nun Apache vor. Wir suchen das File httpd.conf (sollte in /etc/httpd sein), und passen es an. Im File hat es eine Stelle, wo ein Beispiel f�r einen VirtualHost ist (suche nach VirtualHost). Dort f�gen wir etwas �hnliches wie folgt ein:

 ----------------------------------------------------------------------
NameVirtualHost 192.168.0.1:80
# Virtual Host 192.168.0.1 auf Zope Port 8080

   RewriteEngine On
   RewriteCond %{HTTP_HOST} ^.*:80$
   RewriteRule ^/(.*) http://127.0.0.1:8080/VirtualHostBase/http/%{HTTP_HOST}/$1 [L,P]
   RewriteRule ^/(.*) http://127.0.0.1:8080/VirtualHostBase/http/%{HTTP_HOST}:80/$1 [L,P]

# Virtual Host 192.168.0.1 auf Zope Port 9080

   RewriteEngine On
   RewriteCond %{HTTP_HOST} ^.*:80$
   RewriteRule ^/(.*) http://127.0.0.1:9080/VirtualHostBase/http/%{HTTP_HOST}/$1 [L,P]
   RewriteRule ^/(.*) http://127.0.0.1:9080/VirtualHostBase/http/%{HTTP_HOST}:80/$1 [L,P]

 ----------------------------------------------------------------------

So, nun noch Apache neu starten, und der Zugriff im Browser sollte via http://projekt2.firma funktionieren. Wenn du dort auf das Control_Panel klickst siehst du auch je nachdem ob du als "projekt1" oder "projekt2" eingeloggt bist, ein INSTANCE_HOME und CLIENT_HOME, welche auf dein Projekt zeigen.

Viel Spass

Dieter

Geschrieben von Dieter . Letzte �nderung 01.04.2003 22:10.