Sebastian Mogilowskis Blog

Just another blog about administration, linux and other stuff

Install Coldfusion 8 Multiserver on Debian 5.0 Lenny with Apache 2

Dieser Artikel beschreibt, wie man Adobe Coldfusion 8 in der Multiserverkonfiguration installiert. Man kann diese Konfiguration für ein ISP ähnliches Setup verwenden. Jede Instanz/Virtualhost hat seinen eigenen Coldfusion Administrator mit eigenen Einstellungen.

1. Vorbedingungen:

* Apache 2 ist installiert und arbeitet korrekt.

* libstdc++5 ist installiert.

aptitude install libstdc++5

* Eine eigene Domain für den virtuellen Host steht bereit. (www.testsrv.local)

* Der neuste Coldfusion Installer wurde von www.adobe.com heruntergeladen. (z.B. coldfusion-801-lin64.bin)

2. Coldfusion Installation:

chmod +x coldfusion-801-lin64.bin
./coldfusion-801-lin64.bin

Bemerkung: Dies ist der 64-Bit Installer. Wenn kein 64-Bit Betriebssystem vorhanden ist, wird die 32-Bit Version benötigt (coldfusion-801-lin.bin).

Konfigurationseinstellungen:

CHOOSE LOCALE BY NUMBER: 1
PRESS <ENTER> TO CONTINUE: <ENTER>
PRESS <ENTER> TO CONTINUE: <ENTER>
...
DO YOU ACCEPT THE TERMS OF THIS LICENSE AGREEMENT? (Y/N): Y
Installation Choice: 1 (Install new version of Adobe ColdFusion 8 with a serial number)
Serial Number: XXXX-XXXX-XXXX-XXXX-XXXX-XXXX
Choose one of the following options:: 2 (Multiserver configuration)
Is there already a multiserver configuration of Adobe ColdFusion 8, or Macromedia JRun 4, installed?: 2 (No)
Select an option: 5 (Continue with installation)
Default Install Folder: /opt/jrun4 <ENTER>
PRESS <ENTER> TO CONTINUE: <ENTER>
PRESS <ENTER> TO CONTINUE: <ENTER>
...
DO YOU ACCEPT THE TERMS OF THIS LICENSE AGREEMENT? (Y/N): Y
Serial Number:: <ENTER>
Earlier Versions of Adobe ColdFusion installed?
ENTER THE NUMBER FOR YOUR CHOICE, OR PRESS <ENTER> TO ACCEPT THE DEFAULT: 2 (No)
Configure Webserver: 1 (Add Web Server Configuration)
Select "Apache" 1
Directory: /etc/apache2
File: /usr/sbin/apache2
File: /etc/init.d/apache2
Choice: 4 (Continue with installation)
Directory: (DEFAULT: /etc/htdocs): /var/www
User Name: (DEFAULT: nobody): <ENTER>
Password: <Default Development Password>
Enable RDS  (Y/N): Y
Password: <Your Password>
PRESS <ENTER> TO CONTINUE: <ENTER>

Time for a cup of coffee ...

Press Enter to exit the installer: <ENTER>

3. Init-Skript anlegen:

Unter Suse oder Redhat kann man <pre>/opt/jrun4/bin/cf-init.sh install<pre> verwenden, um ein init-Skript anzulegen. Unter Ubuntu oder Debian muss man jedoch sein eigenes Skript anlegen:

vim /etc/init.d/coldfusion8multi
#!/bin/sh
# MultiServer cfusion instance Init-Script

CF_DIR="/opt/jrun4"

cfstart() {
echo "The ColdFusion 8 server is starting up and will be available shortly."
nohup $CF_DIR/bin/jrun -start cfusion > $CF_DIR/logs/cfusion-event.log &
echo "======================================================================"
echo "ColdFusion 8 has been started."
echo "ColdFusion 8 will write logs to $CF_DIR/logs/cfusion-event.log"
echo "======================================================================"
}

cfstop() {
echo "Stopping ColdFusion 8, please wait"
nohup $CF_DIR/bin/jrun -stop cfusion
echo "ColdFusion 8 has been stopped"
}

case $1 in
    start)
        cfstart
    ;;
    stop)
        cfstop
    ;;
    restart)
        cfstop

    cfstart
    ;;
esac

exit 0

Init-Skript installieren:

update-rc.d coldfusion8multi defaults

Coldfusion Server starten:

/etc/init.d/coldfusion8multi start

Den Apache Connector einrichten:

/opt/jrun4/bin/cf-connectors.sh

Dies wird das “mod_jrun22” für den Apache installieren und konfigurieren. (/etc/apache2/httpd.conf)

# JRun Settings
LoadModule jrun_module /opt/jrun4/lib/wsconfig/1/mod_jrun22.so
<IfModule mod_jrun22.c>
    JRunConfig Verbose false
    JRunConfig Apialloc false
    JRunConfig Ignoresuffixmap false
    JRunConfig Serverstore /opt/jrun4/lib/wsconfig/1/jrunserver.store
    JRunConfig Bootstrap 127.0.0.1:51020
    #JRunConfig Errorurl url <optionally redirect to this URL on errors>
    #JRunConfig ProxyRetryInterval 600 <number of seconds to wait before trying to reconnect to unreachable clustered server>
    #JRunConfig ConnectTimeout 15 <number of seconds to wait on a socket connect to a jrun server>
    #JRunConfig RecvTimeout 300 <number of seconds to wait on a socket receive to a jrun server>
    #JRunConfig SendTimeout 15 <number of seconds to wait on a socket send to a jrun server>
    AddHandler jrun-handler .jsp .jws .cfm .cfml .cfc .cfr .cfswf
</IfModule>

Den Apache neu starten:

/etc/init.d/apache2 restart

Nun kann man den Coldfusion Administrator öffnen:

http://<SERVER>/CFIDE/administrator/index.cfm

Nun kann man die Installation mit dem Coldfusion Administrator abschließen.

4. Eine neue Coldfusion Instanz und virtuellen Host anlegen:

Zuerst muss man die neue Instanz mit dem “Instance Manager” anlegen. Dazu den Coldfusion Administrator öffnen und unter “Enterprise Manager” den “Instance Manager” auswählen. Der nächste Schritt ist dort mit “Add New Instance” eine weitere Instanz anzulegen. Einfach einen neuen “Server Name” eingeben “webapp1” in diesem Beispiel und das ganze mit “Submit” bestätigen.

Jrun erzeugt nun ein neues Serververzeichnis “/opt/jrun4/servers/webapp1” und startet die neue Instanz. Im “Instance Manager” kann man diese sehen. Außerdem sieht man dort den zugewiesenen HTTP-Port. Zum Beispiel “8301”. Damit kann man nun den Coldfusion Administrator für diese neue Instanz öffnen “http://<SERVER>:8301/CFIDE/administrator/index.cfm”.

Das “Document root” befindet sich unter “/opt/jrun4/servers/webapp1/cfusion.ear/cfusion.war/”.

Man kann ein einfaches Test-Skript erzeugen:

vim /opt/jrun4/servers/webapp1/cfusion.ear/cfusion.war/test.cfm
<h2>Test</h2>
<cfset test="Hello World">
<cfoutput>#test#</cfoutput>

Man kann diese Skript mit “http://<SERVER>:8301/test.cfm” aufrufen.

Nun muss man einen virtuellen Host für “webapp1” im Apache anlegen:

vim /etc/apache2/sites-available/webapp1
<VirtualHost *>
    ServerName www.testsrv.local

    <IfModule mod_jrun22.c>
        JRunConfig Verbose false
        JRunConfig Apialloc false
        JRunConfig Ignoresuffixmap false
        JRunConfig Serverstore /opt/jrun4/lib/wsconfig/1/jrunserver.store
        JRunConfig Bootstrap 127.0.0.1:51000
        #JRunConfig Errorurl url <optionally redirect to this URL on errors>
        #JRunConfig ProxyRetryInterval 600 <number of seconds to wait before trying to reconnect to unreachable clustered server>
        #JRunConfig ConnectTimeout 15 <number of seconds to wait on a socket connect to a jrun server>
        #JRunConfig RecvTimeout 300 <number of seconds to wait on a socket receive to a jrun server>
        #JRunConfig SendTimeout 15 <number of seconds to wait on a socket send to a jrun server>
        AddHandler jrun-handler .jsp .jws .cfm .cfml .cfc .cfr .cfswf
    </IfModule>

    DocumentRoot /opt/jrun4/servers/webapp1/cfusion.ear/cfusion.war/
    <Directory /opt/jrun4/servers/webapp1/cfusion.ear/cfusion.war/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log
    CustomLog /var/log/apache2/access.log combined
</VirtualHost>

Bemerkung: Sehr wichtig ist die Zeile “JRunConfig Bootstrap 127.0.0.1:51000”. Für jede Multiserver-Instanz erzeugt Coldfusion einen eigenen Port für den “JRunProxyService”. Dieser Port ist in der “jrun.xml” für jede Instanz definiert.

vim /opt/jrun4/servers/webapp1/SERVER-INF/jrun.xml
...
<service class="jrun.servlet.jrpp.JRunProxyService" name="ProxyService">
...
<attribute name="port">51000</attribute>
<attribute name="deactivated">false</attribute>
...
</service>
...

Nun kann man den neuen virtuellen Host installieren:

a2ensite webapp1

und den Apache Server neu laden:

/etc/init.d/apache2 reload

Nun kann man mit “http://www.testsrv.local/test.cfm” auf das Test-Skript zugreifen.

Auch auf den Coldfusion Administrator kann über “http://www.testsrv.local/CFIDE/administrator/index.cfm” zugegriffen werden

Man sollte natürlich noch weitere Konfigurationen an dem virtuellen Host vornehmen. Zum Beispiel den Zugriff auf “CFIDE” mit einer zusätzlichen “.htaccess” Datei einschränken, das Verzeichnisauflisten deaktivieren und weitere Apache Sicherheitseinstellungen vornehmen.

5. Init-Skript anpassen:

Der Coldfusion Server startet die Instanzen nicht automatisch beim starten. Deshalb müssen die Instanzen zum Init-Skript hinzugefügt werden. Hier ist eine angepasste Version für “webapp1”:

#!/bin/sh
# MultiServer cfusion instance Init-Script

CF_DIR="/opt/jrun4"

cfstart() {
echo "The ColdFusion 8 server is starting up and will be available shortly."
nohup $CF_DIR/bin/jrun -start cfusion > $CF_DIR/logs/cfusion-event.log &
nohup $CF_DIR/bin/jrun -start -childVM webapp1 > $CF_DIR/servers/webapp1/cfusion.ear/cfusion.war/WEB-INF/cfusion/logs/cfusion-event.log &
echo "======================================================================"
echo "ColdFusion 8 has been started."
echo "ColdFusion 8 will write logs to $CF_DIR/logs/cfusion-event.log"
echo "======================================================================"
}

cfstop() {
    echo "Stopping ColdFusion 8, please wait"
    nohup $CF_DIR/bin/jrun -stop cfusion
    nohup $CF_DIR/bin/jrun -stop -childVM webapp1
    echo "ColdFusion 8 has been stopped"
}

case $1 in
    start)
        cfstart
    ;;
    stop)
        cfstop
    ;;
    restart)
        cfstop
        sleep 20
        cfstart
    ;;
esac

exit 0

Bemerkung: Man könnte auch eigene Init-Skripte für jede Instanz anlegen. Die Haupt Coldfusion Applikation wird übrigens nicht benötigt um die Instanzen laufen zu lassen.

, , , , , ,

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.