Statistics
| Branch: | Tag: | Revision:

root / snf-webproject / docs / index.rst @ a868c831

History | View | Annotate | Download (10.9 kB)

1 e609b1ba Vangelis Koukis
.. _snf-webproject:
2 e609b1ba Vangelis Koukis
3 e609b1ba Vangelis Koukis
Component snf-webproject
4 dbe32d94 Vangelis Koukis
========================
5 e609b1ba Vangelis Koukis
6 5a0dde9e Constantinos Venetsanopoulos
Synnefo component :ref:`snf-webproject <snf-webproject>` defines a Django 
7 5a0dde9e Constantinos Venetsanopoulos
project in which the various other Synnefo components
8 b1996c81 Kostas Papadimitriou
(:ref:`snf-cyclades-app <snf-cyclades-app>`,
9 99644884 Vangelis Koukis
:ref:`snf-pithos-app <snf-pithos-app>`, etc.) may run.
10 99644884 Vangelis Koukis
11 5a0dde9e Constantinos Venetsanopoulos
It provides a standard mechanism for every Synnefo software component to modify
12 99644884 Vangelis Koukis
the list of Django apps to be executed inside the project (``INSTALLED_APPS``),
13 99644884 Vangelis Koukis
modify the list of middleware classes (``MIDDLEWARE_CLASSES``) and add its own
14 99644884 Vangelis Koukis
URL patterns.
15 99644884 Vangelis Koukis
16 5a0dde9e Constantinos Venetsanopoulos
In other words, wraps a Django project which extends itself (URLs,
17 5a0dde9e Constantinos Venetsanopoulos
default_settings, installed_apps, middleware_classes) based on the Synnefo
18 5a0dde9e Constantinos Venetsanopoulos
components/packages installed on the system.
19 5a0dde9e Constantinos Venetsanopoulos
20 5a0dde9e Constantinos Venetsanopoulos
The extending mechanism is based on the python setuptools `entry_points`. So if
21 5a0dde9e Constantinos Venetsanopoulos
an application (Synnefo component) wants to plug additional configuration to
22 5a0dde9e Constantinos Venetsanopoulos
the Django project, it should define within its setup.py file the 'synnefo'
23 5a0dde9e Constantinos Venetsanopoulos
appropriate entry_points.
24 5a0dde9e Constantinos Venetsanopoulos
25 5a0dde9e Constantinos Venetsanopoulos
For usage example please take a look how snf-cyclades-app package defines its entry
26 5a0dde9e Constantinos Venetsanopoulos
points in:
27 5a0dde9e Constantinos Venetsanopoulos
28 5a0dde9e Constantinos Venetsanopoulos
    - snf-cyclades-app/setup.py
29 5a0dde9e Constantinos Venetsanopoulos
    - snf-cyclades-app/app_settings/__init__.py
30 5a0dde9e Constantinos Venetsanopoulos
31 99644884 Vangelis Koukis
.. todo:: Document snf-webproject facilities for developers
32 99644884 Vangelis Koukis
33 99644884 Vangelis Koukis
Package installation
34 99644884 Vangelis Koukis
--------------------
35 99644884 Vangelis Koukis
36 99644884 Vangelis Koukis
.. todo:: kpap: verify instructions for installation from source.
37 99644884 Vangelis Koukis
38 99644884 Vangelis Koukis
Use ``pip`` to install the latest version of the package from source,
39 99644884 Vangelis Koukis
or request a specific version as ``snf-webproject==x.y.z``.
40 99644884 Vangelis Koukis
41 99644884 Vangelis Koukis
.. code-block:: console
42 99644884 Vangelis Koukis
43 34e79416 Constantinos Venetsanopoulos
   pip install snf-webproject -f https://www.synnefo.org/packages/pypi
44 99644884 Vangelis Koukis
45 99644884 Vangelis Koukis
On Debian Squeeze, install the ``snf-webproject`` Debian package.
46 99644884 Vangelis Koukis
47 99644884 Vangelis Koukis
Package configuration
48 99644884 Vangelis Koukis
---------------------
49 99644884 Vangelis Koukis
50 dbe32d94 Vangelis Koukis
Database
51 dbe32d94 Vangelis Koukis
********
52 dbe32d94 Vangelis Koukis
53 dbe32d94 Vangelis Koukis
You need to create a database for use by the Django project,
54 dbe32d94 Vangelis Koukis
then configure your custom :ref:`snf-common <snf-common>` settings,
55 dbe32d94 Vangelis Koukis
according to your choice of DB.
56 dbe32d94 Vangelis Koukis
57 dbe32d94 Vangelis Koukis
DB creation
58 dbe32d94 Vangelis Koukis
```````````
59 dbe32d94 Vangelis Koukis
60 dbe32d94 Vangelis Koukis
SQLite
61 dbe32d94 Vangelis Koukis
~~~~~~
62 dbe32d94 Vangelis Koukis
Most self-respecting systems have ``sqlite`` installed by default.
63 dbe32d94 Vangelis Koukis
64 dbe32d94 Vangelis Koukis
65 dbe32d94 Vangelis Koukis
MySQL
66 dbe32d94 Vangelis Koukis
~~~~~
67 dbe32d94 Vangelis Koukis
MySQL must be installed first:
68 dbe32d94 Vangelis Koukis
69 dbe32d94 Vangelis Koukis
.. code-block:: console
70 dbe32d94 Vangelis Koukis
71 dbe32d94 Vangelis Koukis
    # apt-get install libmysqlclient-dev
72 dbe32d94 Vangelis Koukis
73 dbe32d94 Vangelis Koukis
if you are using MacPorts:
74 dbe32d94 Vangelis Koukis
75 dbe32d94 Vangelis Koukis
.. code-block:: console
76 dbe32d94 Vangelis Koukis
77 dbe32d94 Vangelis Koukis
    $ sudo port install mysql5
78 dbe32d94 Vangelis Koukis
79 dbe32d94 Vangelis Koukis
.. note::
80 dbe32d94 Vangelis Koukis
81 dbe32d94 Vangelis Koukis
    On MacOSX with Mysql install from MacPorts the above command will
82 dbe32d94 Vangelis Koukis
    fail complaining that it cannot find the mysql_config command. Do
83 dbe32d94 Vangelis Koukis
    the following and restart the installation:
84 dbe32d94 Vangelis Koukis
85 dbe32d94 Vangelis Koukis
    .. code-block:: console
86 dbe32d94 Vangelis Koukis
87 dbe32d94 Vangelis Koukis
       $ echo "mysql_config = /opt/local/bin/mysql_config5" >> ./build/MySQL-python/site.cfg
88 dbe32d94 Vangelis Koukis
89 dbe32d94 Vangelis Koukis
Configure a MySQL db/account for the Django project:
90 dbe32d94 Vangelis Koukis
91 dbe32d94 Vangelis Koukis
.. code-block:: console
92 dbe32d94 Vangelis Koukis
93 dbe32d94 Vangelis Koukis
    $ mysql -u root -p;
94 dbe32d94 Vangelis Koukis
95 dbe32d94 Vangelis Koukis
.. code-block:: mysql
96 dbe32d94 Vangelis Koukis
97 dbe32d94 Vangelis Koukis
    CREATE DATABASE <database name>;
98 dbe32d94 Vangelis Koukis
    SHOW DATABASES;
99 dbe32d94 Vangelis Koukis
    GRANT ALL ON <database name>.* TO <db username> IDENTIFIED BY '<db password>';
100 dbe32d94 Vangelis Koukis
101 dbe32d94 Vangelis Koukis
.. warning::
102 dbe32d94 Vangelis Koukis
        MySQL *must* be set in ``READ-COMMITED`` mode, e.g. by setting:
103 dbe32d94 Vangelis Koukis
104 dbe32d94 Vangelis Koukis
   .. code-block:: ini
105 dbe32d94 Vangelis Koukis
   
106 dbe32d94 Vangelis Koukis
      transaction-isolation = READ-COMMITTED
107 dbe32d94 Vangelis Koukis
               
108 dbe32d94 Vangelis Koukis
   in the ``[mysqld]`` section of :file:`/etc/mysql/my.cnf`.
109 dbe32d94 Vangelis Koukis
110 dbe32d94 Vangelis Koukis
   Alternatively, make sure the following code fragment stays enabled
111 dbe32d94 Vangelis Koukis
   in your custom settings, e.g., in :file:`/etc/synnefo/10-database.conf`:
112 dbe32d94 Vangelis Koukis
       
113 dbe32d94 Vangelis Koukis
   .. code-block:: python
114 dbe32d94 Vangelis Koukis
   
115 dbe32d94 Vangelis Koukis
       if DATABASES['default']['ENGINE'].endswith('mysql'):
116 dbe32d94 Vangelis Koukis
           DATABASES['default']['OPTIONS'] = {
117 dbe32d94 Vangelis Koukis
                   'init_command': 'SET storage_engine=INNODB; ' +
118 dbe32d94 Vangelis Koukis
                       'SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED',
119 dbe32d94 Vangelis Koukis
           }
120 dbe32d94 Vangelis Koukis
   
121 dbe32d94 Vangelis Koukis
PostgreSQL
122 dbe32d94 Vangelis Koukis
~~~~~~~~~~
123 dbe32d94 Vangelis Koukis
124 dbe32d94 Vangelis Koukis
You need to install the PostgreSQL binaries, e.g., for Debian:
125 dbe32d94 Vangelis Koukis
126 dbe32d94 Vangelis Koukis
.. code-block:: console
127 dbe32d94 Vangelis Koukis
	     
128 dbe32d94 Vangelis Koukis
    # apt-get install postgresql-8.4 libpq-dev
129 dbe32d94 Vangelis Koukis
130 dbe32d94 Vangelis Koukis
or ir you are using MacPorts:
131 dbe32d94 Vangelis Koukis
132 dbe32d94 Vangelis Koukis
.. code-block:: console
133 dbe32d94 Vangelis Koukis
134 dbe32d94 Vangelis Koukis
    $ sudo port install postgresql84
135 dbe32d94 Vangelis Koukis
136 dbe32d94 Vangelis Koukis
To configure a postgres db/account for synnefo,
137 dbe32d94 Vangelis Koukis
138 dbe32d94 Vangelis Koukis
*  Become the postgres user, connect to PostgreSQL:
139 dbe32d94 Vangelis Koukis
140 dbe32d94 Vangelis Koukis
.. code-block:: console
141 dbe32d94 Vangelis Koukis
142 dbe32d94 Vangelis Koukis
       $ sudo su - postgres
143 dbe32d94 Vangelis Koukis
       $ psql
144 dbe32d94 Vangelis Koukis
	
145 dbe32d94 Vangelis Koukis
* Run the following commands:
146 dbe32d94 Vangelis Koukis
147 dbe32d94 Vangelis Koukis
.. code-block:: sql
148 dbe32d94 Vangelis Koukis
149 dbe32d94 Vangelis Koukis
	   DROP DATABASE <database name>;
150 dbe32d94 Vangelis Koukis
	   DROP USER <db username>;
151 dbe32d94 Vangelis Koukis
	   CREATE USER <db username> WITH PASSWORD '<db password>';
152 dbe32d94 Vangelis Koukis
	   CREATE DATABASE <database name>;
153 dbe32d94 Vangelis Koukis
	   GRANT ALL PRIVILEGES ON DATABASE <database name> TO <db username>;
154 dbe32d94 Vangelis Koukis
	   ALTER DATABASE <database name> OWNER TO <db username>;
155 dbe32d94 Vangelis Koukis
	   ALTER USER <db username> CREATEDB;
156 dbe32d94 Vangelis Koukis
       
157 dbe32d94 Vangelis Koukis
.. note:: 
158 dbe32d94 Vangelis Koukis
   The last line enables the newly created user to create own databases. This
159 dbe32d94 Vangelis Koukis
   is needed for Django to create and drop the ``test_synnefo`` database for
160 dbe32d94 Vangelis Koukis
   unit testing.
161 dbe32d94 Vangelis Koukis
162 dbe32d94 Vangelis Koukis
DB driver
163 dbe32d94 Vangelis Koukis
`````````
164 dbe32d94 Vangelis Koukis
165 dbe32d94 Vangelis Koukis
Depending on your DB of choice, install one of the following:
166 dbe32d94 Vangelis Koukis
167 dbe32d94 Vangelis Koukis
=========     =======================     ===================         ==========
168 dbe32d94 Vangelis Koukis
Database      PyPi package name           Debian package name         version   
169 dbe32d94 Vangelis Koukis
=========     =======================     ===================         ==========
170 dbe32d94 Vangelis Koukis
mysql         MySQL-python                python-mysql                1.2.3
171 dbe32d94 Vangelis Koukis
postgres      psycopg2                    python-psycopg2             2.4  
172 dbe32d94 Vangelis Koukis
=========     =======================     ===================         ==========
173 dbe32d94 Vangelis Koukis
174 dbe32d94 Vangelis Koukis
.. note::
175 dbe32d94 Vangelis Koukis
    The python sqlite driver is available by default with Python so no
176 dbe32d94 Vangelis Koukis
    additional configuration is required. Also, most self-respecting systems
177 dbe32d94 Vangelis Koukis
    have the sqlite library installed by default.
178 dbe32d94 Vangelis Koukis
179 dbe32d94 Vangelis Koukis
DB settings
180 dbe32d94 Vangelis Koukis
```````````
181 dbe32d94 Vangelis Koukis
182 dbe32d94 Vangelis Koukis
Add the following to your custom :ref:`snf-common <snf-common>`, depending on
183 dbe32d94 Vangelis Koukis
your choice of DB:
184 dbe32d94 Vangelis Koukis
185 dbe32d94 Vangelis Koukis
SQLite
186 dbe32d94 Vangelis Koukis
~~~~~~
187 dbe32d94 Vangelis Koukis
.. code-block:: python
188 dbe32d94 Vangelis Koukis
189 dbe32d94 Vangelis Koukis
    DATABASES = {
190 dbe32d94 Vangelis Koukis
        'default': {
191 dbe32d94 Vangelis Koukis
            'ENGINE': 'django.db.backends.sqlite3',
192 dbe32d94 Vangelis Koukis
            'NAME': '/path/to/synnefo.db'
193 dbe32d94 Vangelis Koukis
        }
194 dbe32d94 Vangelis Koukis
    }
195 dbe32d94 Vangelis Koukis
196 dbe32d94 Vangelis Koukis
.. warning:: ``NAME`` must be an absolute path to the sqlite3 database file
197 dbe32d94 Vangelis Koukis
198 dbe32d94 Vangelis Koukis
199 dbe32d94 Vangelis Koukis
MySQL
200 dbe32d94 Vangelis Koukis
~~~~~
201 dbe32d94 Vangelis Koukis
202 dbe32d94 Vangelis Koukis
.. code-block:: python
203 dbe32d94 Vangelis Koukis
204 dbe32d94 Vangelis Koukis
    DATABASES = {
205 dbe32d94 Vangelis Koukis
         'default': {
206 dbe32d94 Vangelis Koukis
             'ENGINE': 'django.db.backends.mysql',
207 dbe32d94 Vangelis Koukis
             'NAME': 'synnefo',
208 dbe32d94 Vangelis Koukis
             'USER': 'USERNAME',
209 dbe32d94 Vangelis Koukis
             'PASSWORD': 'PASSWORD',
210 dbe32d94 Vangelis Koukis
             'HOST': 'HOST',
211 dbe32d94 Vangelis Koukis
             'PORT': 'PORT',
212 dbe32d94 Vangelis Koukis
             'OPTIONS': {
213 dbe32d94 Vangelis Koukis
                 'init_command': 'SET storage_engine=INNODB',
214 dbe32d94 Vangelis Koukis
             }
215 dbe32d94 Vangelis Koukis
        }
216 dbe32d94 Vangelis Koukis
    }
217 dbe32d94 Vangelis Koukis
218 dbe32d94 Vangelis Koukis
PostgreSQL
219 dbe32d94 Vangelis Koukis
~~~~~~~~~~
220 dbe32d94 Vangelis Koukis
221 dbe32d94 Vangelis Koukis
.. code-block:: python
222 dbe32d94 Vangelis Koukis
223 dbe32d94 Vangelis Koukis
    DATABASES = {
224 dbe32d94 Vangelis Koukis
         'default': {
225 dbe32d94 Vangelis Koukis
             'ENGINE': 'django.db.backends.postgresql_psycopg2',
226 dbe32d94 Vangelis Koukis
             'NAME': 'DATABASE',
227 dbe32d94 Vangelis Koukis
             'USER': 'USERNAME',
228 dbe32d94 Vangelis Koukis
             'PASSWORD': 'PASSWORD',
229 dbe32d94 Vangelis Koukis
             'HOST': 'HOST',
230 dbe32d94 Vangelis Koukis
             'PORT': 'PORT',
231 dbe32d94 Vangelis Koukis
         }
232 dbe32d94 Vangelis Koukis
    }
233 dbe32d94 Vangelis Koukis
234 dbe32d94 Vangelis Koukis
Try it out. The following command will attempt to connect to the DB and
235 dbe32d94 Vangelis Koukis
print out DDL statements. It should not fail.
236 dbe32d94 Vangelis Koukis
237 dbe32d94 Vangelis Koukis
.. code-block:: console
238 dbe32d94 Vangelis Koukis
239 dbe32d94 Vangelis Koukis
    $ snf-manage sql db
240 dbe32d94 Vangelis Koukis
241 dbe32d94 Vangelis Koukis
Web server
242 dbe32d94 Vangelis Koukis
**********
243 99644884 Vangelis Koukis
244 99644884 Vangelis Koukis
You need to configure your webserver to serve static files and relay
245 99644884 Vangelis Koukis
requests to :ref:`snf-webproject <snf-webproject>`.
246 99644884 Vangelis Koukis
247 25762387 Kostas Papadimitriou
248 25762387 Kostas Papadimitriou
.. static_files::
249 99644884 Vangelis Koukis
Static files
250 99644884 Vangelis Koukis
````````````
251 b3ae4dd1 Kostas Papadimitriou
252 b3ae4dd1 Kostas Papadimitriou
:ref:`snf-webproject <snf-webproject>` provides a helper mechanism to avoid tedious
253 b3ae4dd1 Kostas Papadimitriou
tasks involving the collection and deployment of installed applications static
254 b3ae4dd1 Kostas Papadimitriou
files (js/css/images etc.). The mechanism tries to mimic the ``staticfiles``
255 b3ae4dd1 Kostas Papadimitriou
application included in ``Django>=1.3`` but its far less robust and adequate
256 b3ae4dd1 Kostas Papadimitriou
regarding its capabilities. When ``Django>=1.3`` become available as a package 
257 b3ae4dd1 Kostas Papadimitriou
for the stable release of ``Debian``, the current mechanism will get wiped off
258 b3ae4dd1 Kostas Papadimitriou
to be replaced by the ``staticfiles`` contrib application.
259 b3ae4dd1 Kostas Papadimitriou
260 b3ae4dd1 Kostas Papadimitriou
The current mechanism provides a tool to collect the static files of the synnefo
261 b3ae4dd1 Kostas Papadimitriou
components installed and enabled in your system and an automatic way of serving
262 b3ae4dd1 Kostas Papadimitriou
those files directly from your django project. Be concerned that the latter is
263 b3ae4dd1 Kostas Papadimitriou
for debugging pupropses only since serving static files from your django project
264 b3ae4dd1 Kostas Papadimitriou
is considered as a bad practice.
265 b3ae4dd1 Kostas Papadimitriou
266 b3ae4dd1 Kostas Papadimitriou
Each django based synnefo component informs webproject mechanism for the static 
267 b3ae4dd1 Kostas Papadimitriou
files it contains using the ``synnefo.web_static`` entry point which should point
268 b3ae4dd1 Kostas Papadimitriou
to a dict containing a map of a python module and a namespace for the url under
269 b3ae4dd1 Kostas Papadimitriou
which the files will be served from. As an example of use we can see how 
270 b3ae4dd1 Kostas Papadimitriou
snf-cyclades-app informs webproject for the static files of ui and admin applications.
271 b3ae4dd1 Kostas Papadimitriou
272 b3ae4dd1 Kostas Papadimitriou
in ``setup.py``::
273 b3ae4dd1 Kostas Papadimitriou
    
274 b3ae4dd1 Kostas Papadimitriou
    ...
275 b3ae4dd1 Kostas Papadimitriou
    entry_points = {
276 b3ae4dd1 Kostas Papadimitriou
     ...
277 b3ae4dd1 Kostas Papadimitriou
     'synnefo': [
278 b3ae4dd1 Kostas Papadimitriou
         ...
279 b3ae4dd1 Kostas Papadimitriou
         'web_static = synnefo.app_settings:synnefo_static_files',
280 b3ae4dd1 Kostas Papadimitriou
         ...
281 b3ae4dd1 Kostas Papadimitriou
         ]
282 b3ae4dd1 Kostas Papadimitriou
      },
283 b3ae4dd1 Kostas Papadimitriou
    ...
284 b3ae4dd1 Kostas Papadimitriou
285 b3ae4dd1 Kostas Papadimitriou
and inside ``synnefo/app_settings/__init__.py``::
286 b3ae4dd1 Kostas Papadimitriou
287 b3ae4dd1 Kostas Papadimitriou
    synnefo_static_files = {
288 b3ae4dd1 Kostas Papadimitriou
        'synnefo.ui': 'ui',
289 b3ae4dd1 Kostas Papadimitriou
        'synnefo.admin': 'admin',
290 b3ae4dd1 Kostas Papadimitriou
    }
291 b3ae4dd1 Kostas Papadimitriou
292 b3ae4dd1 Kostas Papadimitriou
293 b3ae4dd1 Kostas Papadimitriou
Collecting static files
294 b3ae4dd1 Kostas Papadimitriou
^^^^^^^^^^^^^^^^^^^^^^^
295 b3ae4dd1 Kostas Papadimitriou
296 99644884 Vangelis Koukis
* Choose an appropriate path (e.g. :file:`/var/lib/synnefo/static/`) from which
297 99644884 Vangelis Koukis
  your web server will serve all static files (js/css) required by the synnefo
298 99644884 Vangelis Koukis
  web frontend to run.
299 99644884 Vangelis Koukis
* Change the ``MEDIA_ROOT`` value in your settings (see :ref:`snf-common
300 99644884 Vangelis Koukis
  <snf-common>`) to point to that directory.
301 99644884 Vangelis Koukis
* Create symlinks to the static files of all synnefo webapp components
302 99644884 Vangelis Koukis
  inside the chosen directory, by running:
303 99644884 Vangelis Koukis
304 99644884 Vangelis Koukis
.. code-block:: console
305 99644884 Vangelis Koukis
306 99644884 Vangelis Koukis
    $ snf-manage link_static
307 99644884 Vangelis Koukis
308 b3ae4dd1 Kostas Papadimitriou
309 b3ae4dd1 Kostas Papadimitriou
Serving static files
310 b3ae4dd1 Kostas Papadimitriou
^^^^^^^^^^^^^^^^^^^^
311 b3ae4dd1 Kostas Papadimitriou
312 b3ae4dd1 Kostas Papadimitriou
By default will serve the static files if ``DEBUG`` setting is set to True.
313 25762387 Kostas Papadimitriou
You can override this behaviour by explicitly setting the 
314 25762387 Kostas Papadimitriou
``WEBPROJECT_SERVE_STATIC`` to True or False in your settings files.
315 b3ae4dd1 Kostas Papadimitriou
316 b3ae4dd1 Kostas Papadimitriou
317 99644884 Vangelis Koukis
Apache
318 99644884 Vangelis Koukis
``````
319 99644884 Vangelis Koukis
320 99644884 Vangelis Koukis
.. todo:: document Apache configuration
321 99644884 Vangelis Koukis
322 99644884 Vangelis Koukis
nginx
323 99644884 Vangelis Koukis
`````
324 99644884 Vangelis Koukis
This section describes a sample nginx configuration which uses FastCGI
325 99644884 Vangelis Koukis
to relay requests to synnefo.
326 99644884 Vangelis Koukis
327 99644884 Vangelis Koukis
First, use a distribution-specific mechanism (e.g., APT) to install nginx:
328 99644884 Vangelis Koukis
329 99644884 Vangelis Koukis
.. code-block:: console
330 99644884 Vangelis Koukis
331 99644884 Vangelis Koukis
   # apt-get install nginx
332 99644884 Vangelis Koukis
333 99644884 Vangelis Koukis
Then activate the following nginx configuration file by placing it under
334 99644884 Vangelis Koukis
:file:`/etc/nginx/sites-available` and symlinking under
335 99644884 Vangelis Koukis
:file:`/etc/nginx/sites-enabled`:
336 99644884 Vangelis Koukis
337 99644884 Vangelis Koukis
.. literalinclude:: ../_static/synnefo.nginx.conf
338 99644884 Vangelis Koukis
339 99644884 Vangelis Koukis
.. todo:: fix the location of the configuration file
340 99644884 Vangelis Koukis
341 99644884 Vangelis Koukis
`download <../_static/synnefo.nginx.conf>`_
342 99644884 Vangelis Koukis
343 99644884 Vangelis Koukis
Once nginx is configured, run the FastCGI server to receive incoming requests
344 99644884 Vangelis Koukis
from nginx. This requires installation of package ``flup``:
345 99644884 Vangelis Koukis
346 99644884 Vangelis Koukis
.. code-block:: console
347 99644884 Vangelis Koukis
348 99644884 Vangelis Koukis
    # apt-get install flup
349 99644884 Vangelis Koukis
    $ snf-manage runfcgi host=127.0.0.1 port=8015
350 99644884 Vangelis Koukis
351 25762387 Kostas Papadimitriou
352 99644884 Vangelis Koukis
For developers
353 99644884 Vangelis Koukis
--------------
354 99644884 Vangelis Koukis
355 25762387 Kostas Papadimitriou
Available entry points
356 25762387 Kostas Papadimitriou
^^^^^^^^^^^^^^^^^^^^^^
357 25762387 Kostas Papadimitriou
358 25762387 Kostas Papadimitriou
web_apps
359 25762387 Kostas Papadimitriou
````````
360 25762387 Kostas Papadimitriou
Extends INSTALLED_APPS django project setting.
361 25762387 Kostas Papadimitriou
362 25762387 Kostas Papadimitriou
Example::
363 25762387 Kostas Papadimitriou
    
364 25762387 Kostas Papadimitriou
    # myapp/synnefo_settings.py
365 25762387 Kostas Papadimitriou
    # synnefo_settings and variable name is arbitary
366 25762387 Kostas Papadimitriou
    my_app_web_apps = ['myapp', 'south', 'django.contrib.sessions']
367 25762387 Kostas Papadimitriou
    
368 25762387 Kostas Papadimitriou
    # another more complex configuration where we need our app to be placed
369 25762387 Kostas Papadimitriou
    # before django.contrib.admin app because it overrides some of the admin
370 25762387 Kostas Papadimitriou
    # templates used by admin app views
371 25762387 Kostas Papadimitriou
    my_app_web_apps = [{'before':'django.contrib.admin', 'insert':'myapp'}, 'south']
372 25762387 Kostas Papadimitriou
373 25762387 Kostas Papadimitriou
    # setup.py
374 25762387 Kostas Papadimitriou
    entry_points = {
375 25762387 Kostas Papadimitriou
        'synnefo': ['web_apps = myapp.synnefo_settings:my_app_web_apps']
376 25762387 Kostas Papadimitriou
    }
377 25762387 Kostas Papadimitriou
378 25762387 Kostas Papadimitriou
379 25762387 Kostas Papadimitriou
web_middleware
380 25762387 Kostas Papadimitriou
``````````````
381 25762387 Kostas Papadimitriou
Extends MIDDLEWARE_CLASSES django setting.
382 25762387 Kostas Papadimitriou
383 25762387 Kostas Papadimitriou
384 25762387 Kostas Papadimitriou
web_static
385 25762387 Kostas Papadimitriou
``````````
386 25762387 Kostas Papadimitriou
Extends STATIC_FILES setting (see `static_files`_).
387 25762387 Kostas Papadimitriou
388 25762387 Kostas Papadimitriou
389 25762387 Kostas Papadimitriou
web_context_processors
390 25762387 Kostas Papadimitriou
``````````````````````
391 25762387 Kostas Papadimitriou
Extends TEMPLATE_CONTEXT_PROCESSORS django setting.
392 25762387 Kostas Papadimitriou
393 25762387 Kostas Papadimitriou
394 25762387 Kostas Papadimitriou
loggers
395 25762387 Kostas Papadimitriou
```````
396 25762387 Kostas Papadimitriou
Extends `snf-common`_ LOGGING_SETUP['loggers'] setting.
397 25762387 Kostas Papadimitriou
398 25762387 Kostas Papadimitriou
399 25762387 Kostas Papadimitriou
urls
400 25762387 Kostas Papadimitriou
````
401 25762387 Kostas Papadimitriou
Extends django project urls. Accepts a urlpatterns variable. The urls defined
402 25762387 Kostas Papadimitriou
in this variable will be used to extend the django project urls.