[CentralOH] Django Application Deployment and Production Delivery

Joe Shaw joe at joeshaw.org
Thu Jul 18 21:40:44 CEST 2013


We built Woven (woventheapp.com) as a Flask app that serves an API to
native mobile client apps. Our setup is:

* An SSL-terminating Rackspace load balancer
* 2 web servers running nginx
* The same 2 servers running our Flask app in uwsgi, proxying using the
nginx uwsgi binary protocol over a unix domain socket

I highly recommend the combination of nginx + uwsgi.  It has never caused
us any problems, and while the docs around configuring uwsgi aren't great,
once it's running you basically never have to touch it.  With these two
servers we can easily handle hundreds of requests per second and the
bottleneck becomes the database, not the web server or our app.

Hudson is now called Jenkins, and we use it with nose to ensure 100% code
coverage.  We also use it to run periodic integration tests.  It works well
enough, and we recently moved from self-hosting the whole environment to
only partially hosting it, with Cloudbees hosting the rest.  I wouldn't say
I love Jenkins, though.

If you use GitHub for development, I also wrote a little tool called Leeroy
(http://github.com/litl/leeroy) to integrate GH pull requests with Jenkins.
 We have a rule that you can't push code until the Jenkins build passes
without test failures.

Hope this is helpful,

On Thu, Jul 18, 2013 at 3:17 PM, Mark Aufdencamp <mark at aufdencamp.com>wrote:

> Hi All,
> While many of you here are busy planning the upcoming PyOhio, I've been
> engaged in learning to coherently converse on TDD and Django this year.
> I've been following O'Reilly's "Test Driven Development in Python" which
> is still sparse on chapters.  I've managed to complete the first three
> chapters of building an application.   In preparation of deploying to a
> server, I stepped back into some virtualenv/pythonbrew learning and
> discovered the magic of PythonPath and the site_packages directory.
> I've learned a bit and can successfully configure a venv and utilize it
> for development.
> I'd now like to propagate that to a production environment.  I've ruled
> out mod_python as an option to run django apps.  That leaves wsgi and
> gunicorn.
> So, I guess I'm looking for someone with some experience utilizing
> apache/wsgi/venv/django to give me some sage advice on how they do it
> and the gotchas?
> Alternatively, if your running NGinx in front of gunicorn with BSD
> sockets, I'd be really interested in hearing of your experiences. (I
> like the performance and no TCP port requirement)
> In conjunction with selecting and building a production platform, I'm
> curious as to the differing deployment methodologies utilized in the
> group.  I'm spoiled by capistrano in the ruby world.  Any great
> equivalent in the django world?  Utilizing scp/sftp?  Pulling with
> git/svn directly from a repository?
> How about dealing with database migrations in django?  Anyone utilizing
> South?
> Last question, anyone utilizing Hudson with django/venv as a testing
> platform?
> Hoping to elicit some responses, and looking forward to this years
> PyOhio.
> Mark Aufdencamp
> _______________________________________________
> CentralOH mailing list
> CentralOH at python.org
> http://mail.python.org/mailman/listinfo/centraloh
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/centraloh/attachments/20130718/01807d23/attachment-0001.html>

More information about the CentralOH mailing list