WebGen is a groovy little tool that makes building HTML sites a lot simpler, and makes maintenance a lot more efficient via clever templating. I wont labour the pro’s and con’s of the project here, I’ll just get on with explaining how to deploy version webgen sites using our good friend Capistrano.

First off, install Capistrano:

$ sudo gem install capistrano -y

Next, we need to prepar our webgen dir with all the relevant deployment information. All these commands presume you have ‘cd’ to the webgen project directory Capistrano provides a simple way to do this

$ mkdir config
$ capify .

Next we need to setup our new deploy.rb file, mine looks a little something like this:

  

set :application, "yourapplication.com" 
set :repository,  "svn://yourhost/path/to/webgen/site/output" 

# If you aren't deploying to /u/apps/#{application} on the
# target servers (which is the default), you can specify 
# the actual location via the :deploy_to variable:
set :deploy_to, "/var/www/sites/#{application}" 

# If you aren't using Subversion to manage your 
# source code, specify your SCM below:
# set :scm, :subversion
set :user, "deploy" 
set :svn_user, "badger" 

role :app, "yourapplication.com" 
role :web, "yourapplication.com" 
role :db,  "yourapplication.com", :primary => true

# Overrides the default task supplied by cap, as this 
# is a static site there are no mongrel's et al 
# that need restarting
desc "Deploy webgen site" 
deploy.task :restart do
  puts "Using webgen, so nothing to restart" 
end

# also, because we have configured logging via our HTTP 
# server (e.g. nginx, apache etc) we have no need for this 
# part of the deployment phase to we again, just override it
# with an arbitrary message
desc "Override default cap behavior for finalize_update" 
deploy.task :finalize_update do
  puts "We dont need no stinking logs..." 
end

Now, all being well, we need to setup the server to respond to cap:

$ cap deploy:setup

Then we should be able to deploy our project with no problems!

$ cap deploy

I hope this was of use to someone, somewhere, sometime :)

Following on from setting up Django on your local system for dev purposes, I thought id just do an article about how to set up apache to use mod_python for when you want to roll your Django app out to the big bad world.

Before you start, you will NEED to have completed the other post about installing Django, as you need to have the mac python installer in and configured properly for this to work.

Step 1

First of all we’ve got to get Apache 2.2 working, as Apple only ship 1.3 with OSX (I wonder if this will change in Lepord? Lets hope so!). You can download the source here.

Extract the archive and cd into the new directory. We need to configure it with some options so that we have proxying (which you might want for rails etc) and just some other candy you might find usefull at a later date.

Set the CFLAGS:

export CFLAGS=”-arch i386″

Run this configure command:

./configure \
  --prefix=/Library/Apache-2.2.6 \
  -–enable-so \
  --enable-mods-shared=all \
  --with-mpm=prefork \
  --enable-dav \
  --enable-cache \
  --enable-proxy \
  --enable-shared \
  --disable-static \
  --disable-unique-id \
  --disableipv6 \
  --enable-logio \
  --enable-deflate \
  --with-ldap \
  --with-ldap-include=/usr/include \
  --with-ldap-lib=/usr/lib 
  --with-included-apr 
  --enable-ldap \
  --enable-auth-ldap \
  --enable-cgi 
  --enable-cgid \
  --enable-suexec

Let it do its business then run the usual:

make

then

make install (NB: we dont use sudo here as that way apache is compiled with permisions that let you edit the conf files and so on without needing to be an admin which is just ‘nicer’ for local dev)

Step 2

Configure your httpd.conf file as you see fit. I only really felt the need to change the following:

Change user and group to your user name (or any other one you want) Change ServerAdmin email to an appropriate one Uncomment “Include conf/extra/httpd-mpm.conf” Uncomment “Include conf/extra/httpd-default.conf” Add “NameVirtualHost *” for virtual hosting

My personal preference is then to have an “applications” folder in the apache conf dir, for which I then add a directive to httpd.conf to load in per-application virtual hosting configurations. It just keeps it nice and clean that way.

mkdir /Library/Apache-2.2.6/conf/applications

Include conf/applications in httpd.conf (in your httpd.conf)

Step 3

If you havent already, grab mod_python from here. Extract, it and cd into the directory.

You’ll then need to configure it with the following command:

./configure -–with-apxs=/Library/Apache-2.2.6/bin/apxs \
  -–with-python=/Library/Frameworks/Python.framework/Versions/Current/bin/python

Then do make and sudo make install

Provided you got no errors upon compilation, all should be well. You just need to add another line to your httpd conf:

LoadModule python_module modules/mod_python.so

Step 4

Poor yourself a nice cuppa!

Now, being a unix man through and through, I do see the irony that my first blog post is about winows; such is life!

Anyway…

Typically IIS and Apache do not work well together at all, as IIS hogs all IPs (both physical and ARP) on any given win 2003 machine which is why when trying to run anything else on port 80 on any IP can be a total nightmare.

I recently had to do an install on a win 2003 box where the client wanted to support some of their legacy ASP applications, PHP, but then allowing scope in the future to run Rails, Seam and Django applications. This means running:

  • Apache with mod_python (for Django)
  • Apache proxying to mongrel (for Rails)
  • JBoss for Seam (EJB configuration)
  • IIS for ASP/ASP.NET

IIS has no real ability to proxy to other backends (which in this instance we need due to the rails requirment) in the way Apache 2.2 does, so I chose to run Apache out front binding to one of my avalible 5 on this machine. Apache then uses proxy pass (or proxy balencer for rails) to pass PHP and ASP requests to IIS. No doubt there are people out there who would have chosen to run PHP on Apache, but due to the way the legacy applications were written, PHP and IIS were already installed so it made sense to leave it “as is” - no need to make more work for myself, especially as i only had one night to do the install!

Step 1

IIS however requires a bit of wrangling before we can get on with the install of Apache…Make sure you have your win 2003 install discs with you; as you’ll need to install the support tools (found in support > tools on the cd). It is however possible to do this without the support tools, but it involves hacking around in the registry. Once you have the support tools installed, were going to be making some changes to let IIS know what exact IP address it can bind too. If you have the support tools installed you can the use the httpcfg tool like so (note: if using RDP you might need to logout then login to get support tools on your PATH)

httpcfg set iplisten -i 555.555.555.555 (where this is your IP address)

If you do not have the support tools (or your just too lazy to dig out that disc from the depths of the server room) you can edit the following registry key:

HKEYLOCALMACHINE/SYSTEM/CurrentControlSet/Services/HTTP/Paramaters in there is a paramater called ListenOnlyList from which you can edit with the list of IP’s IIS should listen to.

Once youve done that, restart IIS as usual from the MMC.

Then you can do a netstat -ano to see that IIS only binds to the IP you set. Simple.

Step 2

Next up you need to download apache. I went with apache 2.2.4 without SSL, which i grabbed from here

Run the installer, and make sure you choose on port 80 as a server for all users when installing.

Once apache is installed, you’ll need to set up port listening and IP address binding. This is a well discussed topic in the apache manuals so I wont labour the point here. See the apache docs.

I then set up some virtual hosting to hand my requests off to IIS. Granted, I could have done this with rewrite rules for .asp extensions, but I chose to proxy it on domains, due to my particular circumstances. Heres what my virtual host looks like:

<VirtualHost *:80>
  ServerName www.domain.co.uk
  ServerAlias domain.co.uk
  ProxyPreserveHost On
  ProxyPass / http://172.16.1.11:3000/
</VirtualHost>

(Where my site definition within IIS was running on port 3000)

Step 3

I then downloaded Python and installed it. And then I followed the very good instructions on setting up mod_python on google groups

Step 4

Do the usual rails install bits and bobs - this is so well document I wont pollute the blogsphere any more :)

Step 5

Java time…. Download and run the JEMS installer. At this point we only want to install JBoss on the box with an EJB configuration; it will take a couple more posts to go into the configuration required to get JBoss Seam up and running so we shant discuss that here.

Summary

Thats pretty much it. Its not too difficult, you can proxy off to any service you want to (within reason) and you can have all the latest and greatest web serving technologys happily co-exsisting!