Chris McDonough
2009-09-18 43514664d60d00721bfe9b32d68c5d9dcdb2419a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
.. _modwsgi_tutorial:
 
Running a :mod:`repoze.bfg` Application under ``mod_wsgi``
==========================================================
 
:term:`mod_wsgi` is an Apache module developed by Graham Dumpleton.
It allows :term:`WSGI` programs to be served using the Apache web
server.
 
This guide will outline broad steps that can be used to get a
:mod:`repoze.bfg` application running under Apache via ``mod_wsgi``.
This particular tutorial was developed under Apple's Mac OS X platform
(Snow Leopard, on a 32-bit Mac), but the instructions should be
largely the same for all systems, delta specific path information for
commands and files.
 
.. note:: Unfortunately these instructions almost certainly won't work
   for deploying a :mod:`repoze.bfg` application on a Windows system
   using ``mod_wsgi``.  If you have experience with :mod:`repoze.bfg`
   and and ``mod_wsgi`` on Windows systems, please help us document
   this experience by submitting documentation to the `mailing list
   <http://lists.repoze.org/listinfo/repoze-dev>`_.
 
#.  The tutorial assumes you have Apache already installed on your
    system.  If you do not, install Apache 2.X for your platform in
    whatever manner makes sense.
 
#.  Once you have Apache installed, install ``mod_wsgi``.  Use the
    (excellent) `installation instructions
    <http://code.google.com/p/modwsgi/wiki/InstallationInstructions>`_
    for your platform into your system's Apache installation.
 
#.  Install :term:`virtualenv` into the Python which mod_wsgi will
    run using the ``easy_install`` program.
 
    .. code-block:: bash
       :linenos:
 
       $ sudo /usr/bin/easy_install-2.6 virtualenv
 
    This command may need to be performed as the root user.
 
#.  Create a :term:`virtualenv` which we'll use to install our
    application.
 
    .. code-block:: bash
       :linenos:
 
       $ cd ~
       $ mkdir -p /projects/modwsgi
       $ cd projects/modwsgi
       $ /usr/local/bin/virtualenv --no-site-packages env
 
#.  Install :mod:`repoze.bfg` into the newly created virtualenv:
 
    .. code-block:: bash
       :linenos:
 
       $ cd ~/projects/modwsgi/env
       $ bin/easy_install -i http://dist.repoze.org/bfg/current/simple repoze.bfg
    
#.  Create and install your :mod:`repoze.bfg` application.  For the
    purposes of this tutorial, we'll just be using the ``bfg_starter``
    application as a baseline application.  Substitute your existing
    :mod:`repoze.bfg` application as necessary if you already have
    one.
 
    .. code-block:: bash
       :linenos:
 
       $ cd ~/projects/modwsgi/env
       $ bin/paster create -t bfg_starter myapp
       $ cd myapp
       $ ../bin/python setup.py install
 
#.  Within the virtualenv directory (``~/projects/modwsgi/env``),
    create a script named ``bfg.wsgi``.  Give it these contents:
 
    .. code-block:: bash
       :linenos:
 
       from repoze.bfg.paster import get_app
       application = get_app('/Users/chrism/projects/modwsgi/env/myapp/myapp.ini', 'main')
 
    The first argument to ``get_app`` is the project Paste
    configuration file name.  The second is the name of the section
    within the .ini file that should be loaded by ``mod_wsgi``.  The
    assignment to the name ``application`` is important: mod_wsgi
    requires finding such an assignment when it opens the file.
 
#.  Make the ``bfg.wsgi`` script executable.
 
    .. code-block:: bash
       :linenos:
 
       $ cd ~/projects/modwsgi/env
       $ chmod 755 bfg.wsgi
 
#.  Edit your Apache configuration and add some stuff.  I happened to
    create a file named ``/etc/apache2/other/modwsgi.conf`` on my own
    system while installing Apache, so this stuff went in there.
 
    .. code-block:: bash
       :linenos:
 
       # Use only 1 Python sub-interpreter.  Multiple sub-interpreters
       # play badly with C extensions.
       WSGIApplicationGroup 0
 
       WSGIPassAuthorization On
 
       WSGIDaemonProcess bfg user=chrism group=staff processes=1 threads=6 \
         python-path=/Users/chrism/projects/modwsgi/env/lib/python2.6/site-packages
 
       WSGIScriptAlias /myapp /Users/chrism/projects/modwsgi/env/bfg.wsgi
 
       <Directory /Users/chrism/projects/modwsgi/env>
         WSGIProcessGroup bfg
         WSGIApplicationGroup %{GLOBAL}
         Order allow, deny
         Allow from all
       </Directory>
 
#.  Restart Apache
 
    .. code-block:: bash
       :linenos:
 
        $ sudo /usr/sbin/apachectl restart
 
#.  Visit ``http://localhost/myapp`` in a browser.  You should see the
    sample application rendered in your browser.
 
:term:`mod_wsgi` has many knobs and a great variety of deployment
modes.  This is just one representation of how you might use it to
serve up a :mod:`repoze.bfg` application.  See the `mod_wsgi
configuration documentation
<http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines>`_ for
more in-depth configuration information.