Post on 07-Nov-2014
description
Deploy Python apps in 5 minuteswith a PaaS
Nate AunePyCon on the Charles, part 1
Feb. 25, 2013
Jazkarta (2004-‐current)
2010-‐2011
• Nothing equivalent to Heroku for Django developers
• Built my own PaaS (“How hard can it be?”)
• Shut down last year. Increased compeTTon from big corps meant a race to the boUom
Appsembler (2012-‐current)
Agenda
•Why should I care?
•What is a PaaS? What are the advantages?
•Which PaaS should I use?
•When might I not want to use a PaaS?
Where are you deploying/hosTng today?
• Shared hosTng (i.e. WebfacTon)
• Running your own servers (co-‐located)?
• Using an IaaS provider (i.e. AWS or Rackspace)
• Already using a plaZorm-‐as-‐a-‐service (PaaS)
Meet Dave
Configuring a server
• deciding what size to get (memory, disk)
• ge]ng all the dependencies installed on it
• SSHing into the machine to deploy stuff (feels dirty, but he’s under Tme pressure)
1 day1 day
Maintaining the server
1 day1 day 1 day
Security
1 day1 day 1 day 1 day
Scaling
1 day1 day 1 day 1 day 1 day
Oh sh*t moment.
How many people focus on your platform?
Could you innovate faster if they focused on your apps?
Where do you invest?!
6
Example Headcount Costs
Sysadmin $80k
DBA $90kTrain new guy
Why touch servers if you don’t have to?
PaaSIs it the promised land?
What is a PaaS?Platform-as-a-service enables developers to create
innovative applications without operational overhead around configuration, deployment and management.
Layers of infrastructure
Source: EngineYard “PaaS - State of the Market Survey” May 2012 - http://venturebeat.com/2012/07/05/engine-yard-paas-infographic/
Source: EngineYard “PaaS - State of the Market Survey” May 2012 - http://venturebeat.com/2012/07/05/engine-yard-paas-infographic/
Source: EngineYard “PaaS - State of the Market Survey” May 2012 - http://venturebeat.com/2012/07/05/engine-yard-paas-infographic/
Source: EngineYard “PaaS - State of the Market Survey” May 2012 - http://venturebeat.com/2012/07/05/engine-yard-paas-infographic/
Source: AppFog “Evolution of the Cloud: Toward a NoOps World” Jan 2012http://gigaom.com/cloud/why-2013-is-the-year-of-noops-for-programmers-infographic/
Efficient, Elastic, Secure
• Lots of applications co-located on a few servers
• Drastically reduces resources
• Add/remove servers depending on load
• All secured using SELinux or LXC
Let them do the boring stuff
• Patches and updates
• Migrating applications
• Backups / snapshots
• Configuring everything (web servers, load balancers, modules, databases)
Define OS dependencies
www: type: python systempackages: - openoffice.org - mysql-client-5.1
5 min
Backups
5m 5m
https://devcenter.heroku.com/articles/heroku-postgres-fork
SSL
5m 5m 5m
Scaling
5m 5m 5m 5m
https://openshift.redhat.com/community/developers/scaling
Caching
5m 5m 5m 5m 5m
IaaS vs. PaaS
IaaS -‐ days
PaaS -‐ minutes
Which PaaS?
• Hosted
• DIY
• Hybrid (public with opTon to go private)
Who are the players?
• CloudFoundry (open source by VMWare)
• AppFog
• Stackato(ActiveState)
• Heroku(now Salesforce)
• Dotcloud
• Gondor(Python only)
• OpenShift(Redhat’s open source PaaS)
• App Engine(Google)
• Elastic Beanstalk(Amazon)
• Azure(Microsoft)
Who are the players?
• CloudFoundry (open source by VMWare)
• AppFog
• Stackato(ActiveState)
• Heroku(now Salesforce)
•Dotcloud
• Gondor(Python only)
• OpenShift(Redhat’s open source PaaS)
• App Engine(Google)
• Elastic Beanstalk(Amazon)
• Azure(Microsoft)
We’ll look at these ones tonight.
Dotcloudpolyglot from the start, very flexible, most Python centric
Anatomy of a Django app
on Dotcloud
dotcloud.yml to store config info
nginx.conf to config URL rewriting
wsgi.py to serve using uWSGI
createdb.py to create the database
mkadmin.py to make the admin user
postinstall to run syncdb, collectstatic
customized settings.py for Dotcloud
Heroku
Anatomy of a Django app on Heroku
Procfile to configure process
requirements.txt to define dependencies
customized settings.py for Heroku
Stackatoby ActiveState
Python 3, Run anywhere, New Relic integration
http://appsembler.com/blog/django-deployment-using-stackato/
Anatomy of Django app on
Stackato
stackato.yml to define services
customized settings file
wsgi.py to serve using uWSGI
OpenShiftby Redhat
Open source, Auto-scaling, Jenkins builds
http://appsembler.com/blog/django-deployment-using-openshift/
setup.py instead of requirements.txt
application inside of wsgi dir.htaccess to serve up static files
/data/ dir to store uploaded media files
Action hooks for running commands during build, deploy, post-deploy, etc.
Anatomy of an OpenShift repo
Stackato OpenShift Dotcloud HerokuPython 2.7, 3.2
stackato runtimes2.6 (2.7) 2.6.5, 2.7.2,
3.1.2, 3.2.22.7.2
PostgreSQL 9.1 8.4 9.0 9.1.6MySQL 5.5 5.1 5.1 (Yes, via RDS)
Persisted FS Yes Yes Yes (Yes, via S3)
Redis Yes, 2.4 No Yes, 2.4.11 (Yes, via addon)
MongoDB Yes, 2.0 Yes, 2.2 Yes, 2.2.1 (Yes, via addon)
Memcached Yes, 1.4 No Yes (Yes, via addon)
RabbitMQ Yes, 2.4 No Yes, 2.8.5 (Yes, via addon)
Solr No No Yes, 3.4.0 (Yes, via Websolr)
Cron Yes Yes Yes Yes
Extensible Yes, apt-get install Yes, DIY cartridge Yes, custom service Yes, buildpacks
WebSockets Yes Yes Yes Yes, via Pusher add-on
Stackato OpenShift Dotcloud Heroku
Memory Configurable 1.5GB RAM
Unlimited sandbox
Apps Configurable No Yes, 2.8.5 (Yes, via addon)
Solr No No Yes, 3.4.0 (Yes, via Websolr)
Cron Yes Yes Yes Yes
Extensible Yes, apt-get install Yes, DIY cartridge Yes, custom service Yes, buildpacks
WebSockets Yes ? Yes Yes, via Pusher add-on
Why not PaaS?
• Already invested in your own infrastructure.
• Need to run on servers outside U.S.
• Special requirements not met by PaaS services
OpenShid Pricing
Dotcloud pricing
Heroku pricing
Other resources
• Wrap-up from PaaS bake-offhttp://appsembler.com/blog/wrap-up-from-paas-bake-off/
• Django deployment using PaaShttp://appsembler.com/blog/django-deployment-using-paas/
• django-deployerhttps://github.com/natea/django-deployer
• paasbakeoff - code exampleshttps://github.com/appsembler/paasbakeoff/