Deploy Python apps in 5 min with a PaaS

Post on 07-Nov-2014

4.518 views 0 download

Tags:

description

How can you avoid servers and get back to coding? Platform-as-a-service (PaaS) makes deployment easy. But which PaaS do you choose and how do you get started? This talk will examine several of the leading PaaS providers and discuss their pros/cons. We'll also give examples for how to deploy the same app to each of them to see the differences.

Transcript of Deploy Python apps in 5 min with a PaaS

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/