Here is an over-simplified recipe for setting up mod_wsgi with web2py on CentOS 5. See the Web2py manual for the authoritative specification of how to configure mod_wsgi in general.
Install Apache and the development package (to get the apxs program needed by mod_wsgi);
sudo yum install httpd httpd-devel
Get the mod_wsgi source and build it:
cd /usr/local/src wget http://modwsgi.googlecode.com/files/mod_wsgi-2.5.tar.gz tar xzvf mod_wsgi-2.5.tar.gz cd mod_wsgi-2.5 configure --with-python=/usr/local/bin/python2.5 make sudo make install
Edit /etc/httpd/conf/httpd.conf to load modules/mod_wsgi.so and to point to the right python instance:
LoadModule wsgi_module modules/mod_wsgi.so
Create /etc/httpd/conf.d/web2py.conf with this (which assumes web2py is installed in /var/local/web2py/, and web2py is the root of the Apache site):
WSGIScriptAlias / /var/local/web2py/wsgihandler.py
Note that the web2py folders need to be writable by the apache process.
The above sets up mod_wsgi in "embedded" mode. To run as a mod_wsgi daemon, add this to web2py.conf:
and put this right below the WSGIScriptAlias line:
I also had to make a /var/www/.python-eggs directory that is writable by the apache process; otherwise the MySQLdb module would not import into web2py.
Finally, I had to disable mod_mem_cache in apache to get around errors like this: "SystemError: NULL result without error in PyObject_Call". But when I enable that again later I no longer see the errors. Confusing.
(Edits: No longer recommending WSGIPythonHome. Use --with-python when configuring mod_wsgi.)