On our plate today, we'll be installing Apache. I'm using the 2.2.x branch.
- Go and grab your .msi, I'd recommend the one with OpenSSL included. http://httpd.apache.org/download.cgi#apache22
- Install Apache to c:\cf_dev\apache. You'll need to choose "custom install" to change the directory. The other values can be left at default.
- Get CF9 hooked up to Apache, Start-> All Programs-> Adobe-> CF9 xxxx-> Web Server Configuration Tool
- Click Add... to create a new connector
- Choose the CFusion instance and select Apache as your web server. You'll need to pick out the configuration directory (c:\cf_dev\apache\conf) and the binary object (c:\cf_dev\apache\bin\httpd.exe) and check "install CF9 services".
- Edit c:\cf_dev\apache\conf\httpd.conf and add at the bottom (the include pulls in any files we add to dev folder):
#Turn on virtualhosts
NameVirtualHost *:80
NameVirtualHost *:443
Include c:/cf_dev/apache/conf/dev/*.conf
<Files ~ ".hbmxml$">
Order allow,deny
Deny from all
</Files>
- Find DirectoryIndex in the httpd.conf file, and add index.cfm to it.
- Create a new site vhost file, we'll start with site1 (from back on day 1). Create it as c:\cf_dev\apache\conf\dev\site1.conf
- Fill it like so:
#site1
<VirtualHost *:80>
<Directory "C:\cf_dev\projects\site1">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
alias /CFIDE C:\JRun4\servers\cfusion\cfusion-ear\cfusion-war\CFIDE
alias /cfide C:\JRun4\servers\cfusion\cfusion-ear\cfusion-war\CFIDE
# JRun Settings
<IfModule mod_jrun22.c>
JRunConfig Verbose false
JRunConfig Apialloc false
JRunConfig Ignoresuffixmap false
JRunConfig Serverstore "C:/JRun4/lib/wsconfig/1/jrunserver.store"
JRunConfig Bootstrap 127.0.0.1:51020
AddHandler jrun-handler .jsp .jws .cfm .cfml .cfc .cfr .cfswf
</IfModule>
DocumentRoot "C:\cf_dev\projects\site1"
ServerName site1.local
ServerAdmin contact@localhost
</VirtualHost>
- Note, you should now remove all but LoadModule jrun_module "C:/JRun4/lib/wsconfig/1/mod_jrun22.so" from c:\cf_dev\apache\conf\httpd.conf. This will allow us to use multiple J2EE engines under the same apache config.
- Edit http.conf, and uncomment:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
- Create a Railo based site for Site2 (follow the steps found on day one to first create the site2 project), fill the c:\cf_dev\apache\conf\dev\site2.conf with (we use proxypass to hand of CFM requests):
#site2
<VirtualHost *:80>
<Directory "C:/cf_dev/projects/site2">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
<Proxy *>
Allow from 127.0.0.1
</Proxy>
ProxyPreserveHost On
ProxyPassMatch ^/(.+\.cf[cm])(/.*)?$ ajp://localhost:8009/$1$2
DocumentRoot "C:/cf_dev/projects/site"
ServerName site2.local
ServerAdmin contact@localhost
</VirtualHost>
- To make Tomcat aware of server, we need to add this just before the </engine> tag at the end of c:\cf_dev\tomcat6\conf\server.xml. It seems like duplication, but it just MUST be done:
<Host name="site2.local" appBase="webapps" unpackWARs="false" autoDeploy="false" xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="C:/cf_dev/projects/site2" />
</Host>
- Edit your hosts file (mine is at C:\Windows\System32\drivers\etc\hosts) to locally route our requests to the correct place.
127.0.0.1 site1.local
127.0.0.1 site2.local
This is brilliant! There are too few articles about Tomcat, Railo and ColdFusion so thanks for posting.
Could I add a few things for discussion?
1. I am more specific with which conf files I load. I separate out the connectors (eg what's between the <IfModule mod_jrun22.c> tags) into their own .conf files. SO I have a CF9.conf file, a railo.conf file and a cf6.conf file. That way I can fine tune each one and only load what is needed.
My local set up allows for patterns like
http://{project}.local/
http://{project}.railo/
http://{project}.cf6/ etc..
2. Even though this is a dev environment I still restrict my CF admin access (more to separate & partition access + habit):
# allow general access to CFIDE
<Directory "C:/JRun4/servers/cfusion/cfusion-ear/cfusion-war/CFIDE">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
# Restrict access to the administrator
<Directory "C:/JRun4/servers/cfusion/cfusion-ear/cfusion-war/CFIDE/administrator">
AllowOverride None
Options None
Order allow,deny
Deny from all
</Directory>
3. Would be to add wildcard hosting in my local Apache (more out of sheer laziness) eg:
<VirtualHost *:80>
Include conf/extra/cf9.conf
RewriteEngine on
ServerAlias *.local
VirtualDocumentRoot C:/www/%1/htdocs
</VirtualHost>
That way all I need to do for each project is add a new entry in my hosts file:
eg
127.0.0.1 localhost local site1.local site2.railo
Thanks again for a great article.
Marty