Size: 3761
Comment:
|
Size: 4258
Comment: it is not new any more and runs very nice
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
## page was renamed from mod wsgi #pragma section-numbers 2 |
|
Line 5: | Line 7: |
[http://code.google.com/p/modwsgi/ mod_wsgi] is a simple to use Apache module which can host any Python application which supports the Python WSGI interface (such as slightly modified hgwebdir.cgi). It can be run as "in server" process (just like mod_python), or in "daemon mode" (equivalent to FastCGI). | [http://code.google.com/p/modwsgi/ mod_wsgi] is a simple to use Apache module which can host any Python application which supports the Python WSGI interface (such as slightly modified hgwebdir.cgi). It can be run as "in server" process (just like mod_python), or in "daemon mode" (equivalent to FastCGI). Daemon mode is strongly recommended for better security and separation. |
Line 16: | Line 18: |
* mod_wsgi is relatively new and untested. * You might need to compile it yourself (i.e. no packages for your OS). |
* If your favourite OS does not have pre-built mod_wsgi packages, you might need to compile it yourself (if you have a compiler and some apache dev packages installed, it is quite easy to compile). * (!) For Debian etch, there are current mod_wsgi packages on http://backports.org/. |
Line 21: | Line 23: |
* Apache (2.2.6) * mod_wsgi (1.1) * Python (2.5.1) * Mercurial (0.9.4) |
* Apache (2.2.6, 2.2.3) * mod_wsgi (1.1, 2.0) * Python (2.5.1, 2.4.4) * Mercurial (0.9.4, 0.9.5) |
Line 58: | Line 60: |
# some more interesting options (tested on mod_wsgi 2.0): # processes=2 umask=0007 display-name=wsgi-hg.example.net inactivity-timeout=300 |
|
Line 109: | Line 113: |
---- CategoryWeb |
Serving Mercurial repositories with Apache and mod_wsgi
1. Introduction
[http://code.google.com/p/modwsgi/ mod_wsgi] is a simple to use Apache module which can host any Python application which supports the Python WSGI interface (such as slightly modified hgwebdir.cgi). It can be run as "in server" process (just like mod_python), or in "daemon mode" (equivalent to FastCGI). Daemon mode is strongly recommended for better security and separation.
Please don't blindly follow this document. At least read official [http://code.google.com/p/modwsgi/w/list mod_wsgi documentation] (it's pretty good), and PublishingRepositories. It is expected that you know how to properly configure Apache :-D
1.1. Advantages
- Like mod_python or fastcgi, it is much faster than old fashioned CGI.
- It is simpler than mod_python, faster too.
- It is easier to configure than FastCGI (e.g. for serving mercurial repositories on apache 2.2 you also need suexec, mod_fcgid, flup and modified hgweb* scripts)
1.2. Disadvantages
- If your favourite OS does not have pre-built mod_wsgi packages, you might need to compile it yourself (if you have a compiler and some apache dev packages installed, it is quite easy to compile).
For Debian etch, there are current mod_wsgi packages on http://backports.org/.
2. Pre-requisites
You'll need following software (tested versions are in parenthesis, other versions should work too):
- Apache (2.2.6, 2.2.3)
- mod_wsgi (1.1, 2.0)
- Python (2.5.1, 2.4.4)
- Mercurial (0.9.4, 0.9.5)
- hgwebdir.wsgi
3. Configuration
3.1. mod_wsgi
In case you can't find mod_wsgi package for your operating system, you'll have to compile it yourself.
e.g.
$ tar xvf mod_wsgi-1.1.tar.gz $ cd mod_wsgi-1.1 $ ./configure $ make $ su -c "make install"
Edit your httpd.conf file to load wsgi module:
LoadModule wsgi_module libexec/httpd/mod_wsgi.so
3.2. Apache
In this sample setup, we are serving mercurial repositories from separate virtual host (hg.example.net). Repositories are in htdocs directory, served by modified hgwebdir.cgi script (hgwebdir.wsgi).
<VirtualHost *:80> ServerName hg.example.net DocumentRoot /var/www/vhosts/hg.example.net/htdocs ErrorLog /var/log/httpd/hg.example.net-error_log CustomLog /var/log/httpd/hg.example.net-access_log common WSGIScriptAliasMatch ^(.*) /var/www/vhosts/hg.example.net/cgi-bin/hgwebdir.wsgi$1 # To enable "daemon" mode, uncomment following lines. (Read mod_wsgi docs for more info) # WSGIDaemonProcess hg.example.net user=USER group=GROUP threads=15 maximum-requests=1000 # some more interesting options (tested on mod_wsgi 2.0): # processes=2 umask=0007 display-name=wsgi-hg.example.net inactivity-timeout=300 # WSGIProcessGroup hg.example.net <Directory /var/www/vhosts/hg.example.net/htdocs> Options FollowSymlinks DirectoryIndex index.html AllowOverride None Order allow,deny Allow from all </Directory> <Directory /var/www/vhosts/hg.example.net/cgi-bin> Options ExecCGI FollowSymlinks AddHandler cgi-script .cgi AllowOverride None Order allow,deny Allow from all </Directory> </VirtualHost>
3.3. Mercurial
You only need to change the last line in hgwebdir.cgi script which comes with mercurial. Here is the short version - hgwebdir.wsgi:
Where hgwebdir.config file looks like this:
[web] style = gitweb [collections] /var/www/vhosts/hg.example.net/htdocs = /var/www/vhosts/hg.example.net/htdocs
4. Note
It seems to me that mod_wsgi is the future of python web applications on Apache. It really nice, even in this early stage, and I expect it to become even better.
Bye mod_python/fastcgi, you won't be missed.