Project

General

Profile

Apache » History » Version 3

Elmer de Looff, 2012-05-10 18:27

1 1 Elmer de Looff
h1. Requirements
2 1 Elmer de Looff
3 1 Elmer de Looff
For µWeb to work on Apache, you need the @mod_python@ package installed and enabled. On Debian (version 5 and up) this requires no effort beyond the straightforward installation of the package (here included with apache2 for ease of use):
4 1 Elmer de Looff
5 1 Elmer de Looff
<pre><code class="shell">
6 1 Elmer de Looff
sudo apt-get install apache2 libapache2-mod-python
7 1 Elmer de Looff
</code></pre>
8 1 Elmer de Looff
9 1 Elmer de Looff
The module automatically gets enabled and requires no further user-configuration.
10 1 Elmer de Looff
11 3 Elmer de Looff
h1. Configuring Apache
12 1 Elmer de Looff
13 1 Elmer de Looff
The second step is setting up an Apache config file. This is a basic configuration that sets up a VirtualHost for a specific hostname. This is the common scenario for Apache configurations, though many options are possible. We create the following file in Apache's @sites-available@ directory, and then enable it using @a2ensite@ (or an equivalent). This example is a copy of the router contained in the @uweb_info@ demo project:
14 1 Elmer de Looff
15 1 Elmer de Looff
<pre><code class="config">
16 1 Elmer de Looff
# /var/www/uweb_info/ should contain the uWeb router
17 1 Elmer de Looff
# This can be achieved by either copying the router (including optional
18 1 Elmer de Looff
# configuration file) to this directory, or creating a symbolic link where
19 1 Elmer de Looff
# /var/www/uweb_info points to the directory containing the router.
20 1 Elmer de Looff
21 1 Elmer de Looff
<VirtualHost *:80>
22 1 Elmer de Looff
    ServerName      uweb.local
23 1 Elmer de Looff
    DocumentRoot    /var/www/uweb_info/
24 1 Elmer de Looff
</VirtualHost>
25 1 Elmer de Looff
26 1 Elmer de Looff
<Directory "/var/www/uweb_info">
27 1 Elmer de Looff
    SetHandler        mod_python
28 1 Elmer de Looff
    PythonHandler     router
29 1 Elmer de Looff
    PythonPath        "['/home/elmer', '/home/elmer/devel'] + sys.path"
30 1 Elmer de Looff
    PythonDebug       on
31 1 Elmer de Looff
    PythonAutoReload  on
32 1 Elmer de Looff
</Directory>
33 1 Elmer de Looff
</code></pre>
34 1 Elmer de Looff
35 1 Elmer de Looff
The VirtualHost statement configures Apache to respond only to the given ServerName, so that it blends in nicely with a multi-website setup. The directory command contains the functional @mod_python@ statements:
36 1 Elmer de Looff
37 1 Elmer de Looff
|_.Directive |_.Meaning |
38 1 Elmer de Looff
| SetHandler | Instructs Apache to handle all requests for (and under) this directory to be handled through the @mod_python@ handler. |
39 1 Elmer de Looff
| PythonHandler | Name of the module that should route requests. Points to the location of the router (relative from the @DocumentRoot@). |
40 1 Elmer de Looff
| PythonPath | This is a Python statement that is necessary to be able to include the uWeb framework. If µWeb is installed in @'/home/john/devel/uweb/'@ then the added path should be @'/home/john/devel/'@ |
41 1 Elmer de Looff
| PythonDebug | Prints @mod_python@ debug reports in case there is an error causing µWeb itself to break. Like other debugging, it is suggested you turn this 'off' for production sites. |
42 1 Elmer de Looff
| PythonAutoReload | Automatically reloads python source files if and when they have changed. Not very reliable on the µWeb Framework stack. Default to 'on', suggested you turn this 'off' for production sites. |
43 1 Elmer de Looff
44 3 Elmer de Looff
h1. Setting up the router
45 1 Elmer de Looff
46 1 Elmer de Looff
After setting up Apache configuration, it's time to move the *[[router]]* file to the appropriate location. For the example above, the router should be placed in @'/var/www/uweb_info/router.py'@ (of course, '.pyc' and '.pyo' would also work).
47 1 Elmer de Looff
48 1 Elmer de Looff
<pre><code class="python">
49 1 Elmer de Looff
#!/usr/bin/python
50 1 Elmer de Looff
"""A uWeb demonstration project."""
51 1 Elmer de Looff
52 1 Elmer de Looff
# uWeb Framework
53 1 Elmer de Looff
import uweb
54 1 Elmer de Looff
55 1 Elmer de Looff
# Project's controller
56 1 Elmer de Looff
from uweb.uweb_info import pages
57 1 Elmer de Looff
58 1 Elmer de Looff
# uWeb configuration variables
59 1 Elmer de Looff
CONFIG = 'example.conf'
60 1 Elmer de Looff
PACKAGE = 'uweb_info'
61 1 Elmer de Looff
62 1 Elmer de Looff
PAGE_CLASS = pages.PageMaker
63 1 Elmer de Looff
ROUTES = (
64 1 Elmer de Looff
    ('/static/(.*)', 'Static'),
65 1 Elmer de Looff
    ('/(broken.*)', 'FourOhFour'),
66 1 Elmer de Looff
    ('/haltandcatchfire', 'MakeFail'),
67 1 Elmer de Looff
    ('/json', 'Json'),
68 1 Elmer de Looff
    ('/text', 'Text'),
69 1 Elmer de Looff
    ('/redirect/(.*)', 'Redirect'),
70 1 Elmer de Looff
    ('/OpenIDLogin', '_OpenIdInitiate'),
71 1 Elmer de Looff
    ('/OpenIDValidate', '_OpenIdValidate'),
72 1 Elmer de Looff
    ('/ULF-Challenge', '_ULF_Challenge'),
73 1 Elmer de Looff
    ('/ULF-Login', '_ULF_Verify'),
74 1 Elmer de Looff
    ('/(.*)', 'Index'))
75 1 Elmer de Looff
76 1 Elmer de Looff
uweb.ServerSetup(apache_logging=True)
77 1 Elmer de Looff
</code></pre>
78 1 Elmer de Looff
79 1 Elmer de Looff
Compared to the *[[request router]]*, there are a few things different here (broadly similar to Standalone):
80 1 Elmer de Looff
81 1 Elmer de Looff
# @CONFIG@ is used to indicate the path for the configuration file, if there is any. This is a path to the configuration file relative from the router location. In this router, the configuration file is a file named example.conf in the same directory as the router. If there is no configuration file, this variable should be omitted.
82 1 Elmer de Looff
# @PACKAGE@ is used to indicate the package name of the project. The package name is used to group logfiles by. Logfiles will be automatically created and written to either. If no explicit @PACKAGE@ variable is set, it defaults to @'uweb_project'@.
83 1 Elmer de Looff
# On the @uweb.ServerSetup@ call, there is an optional argument @'apache_logging'@ that controls application logging (enabled by default). This refers to the explicit logging done inside µWeb using @logging.log*@ methods. For this to work, there must be a writable path for µWeb either
84 1 Elmer de Looff
#* on @'/var/log/underdark/'@ (the latter is recommended for Apache mode). This creates a subdirectory after the @PACKAGE@ name, and in there creates SQLite logfiles based on the router name.
85 1 Elmer de Looff
#* on the home-directory of the apache user, in a subdirectory @.underdark@ (this directory will be created if it doesn't exist). From here, a directory will be created after the @PACKAGE@ name, and in a @'logs'@ directory, the various SQLite logfiles will be stored.
86 1 Elmer de Looff
87 2 Elmer de Looff
h1. Reload and run
88 1 Elmer de Looff
89 1 Elmer de Looff
After reloading the Apache configuration, the site will be available when we browse to http://uweb.local (assuming the path is resolved by DNS, or added to the machine's @hosts@ file).