Apache Installation: CF & Railo auf einem Server

Christian Hojas, Senior Webapplication-Entwickler

Hier die Konfiguration, die es ermöglicht, zwei Domains mit dem selben Webroot auf einem Server anzulegen, um die Applikation sowohl mit Railo als auch mit Adobe ColdFusion testen zu können. Auf dem Rechner muss die Grundinstallation von Apache, Railo und Adobe ColdFusion eingerichtet sein.

Wer unter ColdFusion programmiert, hat sich zumeist für einen Server von Adobe oder Railo entschieden. So klein die Unterschiede in der Programmiersprache CFML auch sind, kann man sich sicher sein, dass sie gross genug sind, um das neue Programm nur auf einem der beiden Server zum Laufen zu bringen.

Das naheliegendste wäre nun, auf dem Entwicklungsserver sowohl Railo als auch Adobe ColdFusion zu installieren. Und am Besten wäre es, wenn man den Code nicht in unterschiedliche Verzeichnisse hin- und herkopieren muss, sondern ein- und denselben Entwicklungsstand rasch auf beiden Servern testen kann.

Das geht, wir benötigen dazu lediglich zwei unterschiedliche Domains (z. B. http://entwicklung-railo.localhost sowie http://entwicklung-adobe.localhost), die beide auf dasselbe webroot zugreifen.

Ich gehe in diesem Beispiel davon aus, dass die Entwicklungsserver auf dem eigenen PC – localhost – installiert sind und dass die Grundinstallation vom Apache Webserver, von Railo und von Adobe ColdFusion eingerichtet sind.

Konfiguration von /etc/hosts:

Falls es sich bei den Domains um "Pseudo-Domains", wie man sie gerne auf lokalen Testerechnern handelt, muss das IP-Mapping in der Hosts-Datei eingerichtet sein. Wir machen zwei Domains, eine für Railo, eine für Adobe ColdFusion:

1127.0.0.1 entwicklung-railo
2127.0.0.1 entwicklung-adobe

Konfiguration von /Applications/railo/conf/resin.conf:

Hier muss nur die Railo-Domain eingetragen werden:

1<host id=&quot;verwaltung&quot;>
2<root-directory>./verwaltung</root-directory>
3<web-app id=&quot;/&quot; document-directory=&quot;/www/webs/entwicklung&quot; />
4</host>

Konfiguration von /etc/apache2/httpd.conf:

Standardmässig ist der komplette Zugriff auf den Apache blockiert. Hier die richtige Anpassung:

1<Directory />
2Options FollowSymLinks
3AllowOverride None
4Order allow,deny
5Allow from all
6</Directory&gt;

Hier dürfen nur die zentralen Module, die von Railo und Adobe ColdFusion installiert werden, geladen werden. Die Handler müssen den virtuellen Hosts zugewiesen werden (die entsprechenden Zeilen herauslöschen oder auskommentieren):

1# JRun Settings
2LoadModule jrun_module /Applications/JRun4/lib/wsconfig/1/mod_jrun22.so
3
4#
5# mod_caucho Resin Configuration
6#
7LoadModule caucho_module /usr/libexec/apache2/mod_caucho.so
8
9#ResinConfigServer localhost 6800
10#CauchoConfigCacheDirectory /tmp
11#CauchoStatus yes
12
13# Virtual hosts
14Include /private/etc/apache2/extra/httpd-vhosts.conf

Die Module müssen vor den Virtual Hosts geladen werden.

Konfiguration von /etc/apache2/extras/httpd-vhosts.conf:

Die virtuellen Hosts können natürlich auch direkt in die httpd.conf geschrieben werden. Standardmässig ist beim Apache aber ein extra File dabei. Es könnten auch zwei VirtualHosts-Konfigurationsdateien angelegt werden, z. B. eines für die Railo und eines für die Adobe Hosts. Das macht Sinn, je nach Anzahl der Hosts:

Die erste Domain ruft die CFML-Dateien über den Adobe ColdFusion Server auf. Um die Administration aufrufen zu können, muss noch ein Alias auf den CFIDE-Pfad eingerichtet werden.
Die Handler müssen im Untertag Directory aufgerufen werden, ansonsten werden sie zentral für den ganzen Server verwendet.

1<VirtualHost entwicklung-adobe>
2 ServerName entwicklung-adobe
3 ServerAdmin #hier ihre emailadresse eintragen#
4 DocumentRoot "/www/webs/entwicklung"
5 ErrorLog "/www/webs/entwicklung/log/loc-error.log"
6 CustomLog "/www/webs/entwicklung/log/loc-access.log" common
7 Alias /coldspring "/www/entwicklung/frameworks/coldspring/"
8 Alias /modelglue "/www/entwicklung/frameworks/ModelGlue/"
9 Alias /CFIDE "/Library/WebServer/Documents/CFIDE"
10 <Directory "/www/webs/entwicklung">
11<IfModule mod_jrun22.c>
12JRunConfig Verbose false
13JRunConfig Apialloc false
14JRunConfig Ignoresuffixmap false
15JRunConfig Serverstore /Applications/JRun4/lib/wsconfig/1/jrunserver.store
16JRunConfig Bootstrap 127.0.0.1:51020
17#JRunConfig Errorurl url <optionally redirect to this URL on errors>
18#JRunConfig ProxyRetryInterval 600 <number of seconds to wait before trying to reconnect to unreachable clustered server>
19#JRunConfig ConnectTimeout 15 <number of seconds to wait on a socket connect to a jrun server>
20#JRunConfig RecvTimeout 300 <number of seconds to wait on a socket receive to a jrun server>
21#JRunConfig SendTimeout 15 <number of seconds to wait on a socket send to a jrun server>
22AddHandler jrun-handler .jsp .jws .cfm .cfml .cfc .cfr .cfswf
23</IfModule>
24</Directory>
25</VirtualHost>

Der Railo-Server greift auf das selbe DocumentRoot wie der Adobe-ColdFusion Server. Ebenfalls müssen die Aufrufe der Resin-Handler wieder im Directory-Subtag eingetragen werden.

1<VirtualHost entwicklung-railo>
2 ServerName entwicklung-railo
3 ServerAdmin #hier ihre emailadresse eintragen#
4 DocumentRoot "/www/webs/entwicklung"
5 ErrorLog "/www/webs/entwicklung/log/loc-error.log"
6 CustomLog "/www/webs/entwicklung/log/loc-access.log" common
7 Alias /coldspring "/www/entwicklung/frameworks/coldspring/"
8 Alias /modelglue "/www/entwicklung/frameworks/ModelGlue/"
9 <Directory "/www/webs/entwicklung">
10 ResinConfigServer localhost 6800
11 CauchoConfigCacheDirectory /tmp
12 CauchoStatus yes
13 </Directory>
14</VirtualHost>

Zuguter letzt sollte das Apache DocumentRoot (z. B. /www) über die notwendigen Berechtigungen verfügen. Auf dem lokalen Rechner habe ich ihm der Einfachheit halber Vollzugriff gegeben, dies sollte auf einem produktiven Server natürlich restriktiver gehandhabt werden:

1cd /
2chmod -R 777 www

Der Owner des Apache-Webroot sollte der eigene Benutzer und die Gruppe sollte "staff" sein.

Es wäre durchaus möglich, auch noch den Open Blue Dragon als dritten Testserver einzurichten. Auf diese Option gehe ich an dieser Stelle nicht näher ein.