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). |