A first pass at deployment documentation.

This commit is contained in:
Ryan Petrello
2012-03-29 15:07:13 -04:00
parent 6f3c8263cc
commit acd9b52eac

View File

@@ -3,30 +3,102 @@
Deploying Pecan in Production
=============================
Deploying a pecan project can be accomplished in several ways. You may
already be familiar with deployment methodologies for other Python
projects, in which case, try that! Pecan doesn't deviate from the
standards laid out by similar Python web frameworks before it.
Deploying a Pecan project to a production environment can be accomplished in
a variety of ways. A few popular options for deployment are documented here.
It is important, however, to note that these examples are meant to provide
*direction*, not explicit instruction; deployment is usually heavily dependent
upon the needs and goals of individual applications, so your mileage may vary.
Here we will outline some of the common methods for deploying your Pecan
project.
.. note::
While Pecan comes packaged with a simple server *for development use*
(``pecan serve``), using a *production-ready* server similar to the ones
described in this document is **very highly encouraged**.
mod_wsgi
--------
TODO
Installing Pecan
----------------
For instructions on installing Pecan in most any environment, refer to
the documentation on :ref:`Installation`.
FastCGI
-------
TODO
Disabling Debug Mode
--------------------
One of the most important steps to take before deploying a Pecan app into
production is to disable **Debug Mode**, which is responsible for serving
static files locally and providing a development-oriented debug environment
for tracebacks. In your production configuration file, ensure that::
uWSGI
-----
TODO
# myapp/production_config.py
app = {
...
'debug': False
}
Tornado
-------
TODO
Pecan and WSGI
--------------
WSGI is a Python standard that describes a standard interface between servers
and an application. Any Pecan application is also known as a "WSGI
application" because it implements the WSGI interface, so any server that is
"WSGI compatible" may be used to serve your application. A few popular
examples are:
Gunicorn
--------
TODO
* `mod_wsgi <http://code.google.com/p/modwsgi/>`__
* `uWSGI <http://projects.unbit.it/uwsgi/>`__
* `Gunicorn <http://gunicorn.org/>`__
* `waitress <http://docs.pylonsproject.org/projects/waitress/en/latest/>`__
Generally speaking, the WSGI entry point to any Pecan application can be
generated using ``pecan.deploy``::
from pecan.deploy import deploy
application = deploy('/path/to/some/app/config.py')
Considerations for Static Files
-------------------------------
Pecan comes with simple static file serving (e.g., CSS, Javascript, images)
middleware which is **not** recommended for use in production.
In production, Pecan doesn't serve media files itself; it leaves that job to
whichever web server you choose.
For serving static files in production, it's best to separate your concerns by
serving static files separately from your WSGI application (primarily for
performance reasons). There are several popular ways to accomplish this. Here
are two:
1. Set up a proxy server (such as `nginx <http://nginx.org/>`_, `cherokee
<http://www.cherokee-project.com>`_, or `lighttpd
<http://www.lighttpd.net/>`_) to serve static files and proxy application
requests through to your WSGI application:
::
HTTP Client ─── Proxy Server (0.0.0.0:80) ─── Static Files
├── WSGI Server Instance (127.0.0.1:5000)
├── WSGI Server Instance (127.0.0.1:5001)
├── WSGI Server Instance (127.0.0.1:5002)
└── WSGI Server Instance (127.0.0.1:5003)
2. Serve static files via a separate service, virtual host, or CDN.
Common Recipes
--------------
Apache + mod_wsgi
+++++++++++++++++
`mod_wsgi <http://code.google.com/p/modwsgi/>`_ is a popular Apache module
which can be used to host any WSGI-compatible Python applicationa.
uwsgi + cherokee
++++++++++++++++
`uWSGI <http://projects.unbit.it/uwsgi/>`_ is a fast, self-healing and
developer/sysadmin-friendly application container server coded in pure C. It
uses the `uwsgi <http://projects.unbit.it/uwsgi/wiki/uwsgiProtocol>`__
protocol, but can speak other protocols as well (http, fastcgi...).
Gunicorn + nginx
++++++++++++++++
`Gunicorn <http://gunicorn.org/'>`__, or "Green Unicorn", is a WSGI HTTP Server for
UNIX. Its a pre-fork worker model ported from Rubys Unicorn project. It
supports both eventlet and greenlet. Running a Flask application on this server
is quite simple: