SlideShare uma empresa Scribd logo
1 de 41
Baixar para ler offline
DJANGO + HEROKU
OR HOW TO BE SMART ABOUT BEING STUPID
THIS IS MESS
FOUNDED IN 2007
WEB, MOBILE, SOCIAL, DESKTOP, IOS, ANDROID
4 DESIGNERS + 4 DEVELOPERS
1.25 ADMINS (ME + DAN)
4 SITES A MONTH
WAY MORE IN “MAINTENANCE”
64.2% DJANGO
http://www.thisismess.com
I OWN MESS.
I DO NOT WORK FOR HEROKU
      …and kinda hate their support guys.
WHAT WE NEED
 …besides money and Scotch
SERVERS SHOULD BE
SAME(ish)
CHEAP TO DEVELOP WITH
PREDICTABLE TO SCALE WITH
EASY(ish) TO ADMINISTER
RELIABLE(ish)
FLEXIBLE(ish)
BILLABLE!
DEPLOYMENT MUST BE
THE SAME ACROSS AS MANY PROJECTS AS POSSIBLE
N00B-PROOF’D
DOCUMENTED
FORGIVING
WHAT WE’VE TRIED
    …and decided sucks
1
IN HOUSE
1996 CALLED AND IT HATES YOU
…BUT IT’S CHEAP
…AND FLEXIBLE!
…AND PREDICTABLE!
…AND ABSOLUTELY NOTHING ELSE
1
CO-LOCATED
  AT RACKSPACE
2002 ISN’T MUCH HAPPIER
…BUT IT’S CHEAP
…AND FLEXIBLE!
…AND PREDICTABLE!
…AND (more) RELIABLE!
…AND ABSOLUTELY NOTHING ELSE
(n)
VPS (es?)
 AT RACKSPACE
  USING FABRIC
  AND RELEASES
     AND SFTP
   AND NEW RELIC
     AND SENTRY
       AND GIT

   AND PUPPETMASTER
LIVING THE DREAM
…CHEAP(ish)
…AND FLEXIBLE!
…AND PREDICTABLE!
…AND RELIABLE!
…AND (sort of) STANDARDIZED!
…AND BILLABLE!
IF YOUR DREAM IS…
PAINFUL TO SETUP
…AND SECURE
…AND UPDATE
…AND SCALE
…AND TRAIN ON
…AND CHANGE
…AND BILL
…AND TRANSFER
AND BEFORE YOU ASK…
AWS IS AWESOME
…AND EC2 IS GREAT
…BUT IT SUCKS
SO, HEROKU.
   …it sucks less
(h)+
HEROKU (and S3 and EC2 and RACKSPACE)
100% STANDARD (unless it’s non-standard)
N00B PROOF
BILLABLE
RELIABLE(ish)
FLEXIBLE(ish)
DOCUMENTED
ADMINISTRATABLE (because you don’t)
CHEAPER THAN CHEAP. FREE!
AND YEAH
IT’S JUST EC2
…BUT IT HIDES THE BULLSHIT
…UNTIL YOU NEED BULLSHIT
WHY NOT HEROKU
  …everything sucks in its own way
IT’S KINDA, WELL…DUMB
IT’S JUST EC2
…SO IT GOES DOWN WITH EC2
…AND WITHOUT IT
…AND YOU CAN’T DO NATIVE WEBSOCKETS
…AND IT GETS PRICEY
…AND MYSQL SUCKS ON IT (so?)
…AND UWSGI HAS PROBLEMS
…AND THERE’S NO PERMANENT STORAGE
…AND IT USES MICROS ON EC2 turns out they use linux containers or something.
…AND LOGGING IS…LESS THAN AWESOME
…AND PSQL IS KINDA SLOW
…AND THEIR SUPPORT SUCKS
…AND YOU DEPLOY WITH GIT
MAKE IT SUCK LESS
     …as best you can
1. GET GOING
CREATE AN ACCOUNT https://heroku.com
DOWNLOAD THE TOOLBELT https://toolbelt.heroku.com
INSTALL BREW http://mxcl.github.com/homebrew/
INSTALL GIT brew install git;
INSTALL VIRTUALENV sudo easy_install virtualenv;
INSTALL PIP sudo easy_install pip;
INSTALL PSQL http://postgresapp.com
GENERATE SSH IDENTITY http://google.com
ADD PUBLIC KEY TO HEROKU https://dashboard.heroku.com/account
2. MAKE AN APP
START A PROJECT   mkdir heroku-app;
                  cd heroku-app;
                  git init;
DO THE VENV virtualenv .env --distribute;
            source .env/bin/activate;
INSTALL THINGS INTO THE VENV

pip install Django psycopg2 dj-database-url;
pip install boto django-storages South;

DJANGO! DJANGO!
django-admin.py startproject herokuapp .
3. PREPARE
RUNSERVER python manage.py runserver;
SPEC REQS pip freeze > requirements.txt
SETUP PSQL createdb -h localhost heroku;
SETTINGS.PY
import dj_database_url
DATABASES['default'] =   dj_database_url.config(default='postgres://foo@localhost/heroku')


GUNICORN (they refuse to support UWSGI correctly)
pip install gunicorn;
“web: gunicorn herokuapp.wsgi” >> Profile

.gitignore
*.pyc
.env
.DS_Store
local_settings.py
4. GIT IT?
INIT & COMMIT git init;
              git add .;
              git commit -a -m “I love squirrels.”;
5. HEROKUEN!
APPIFY   heroku create;
         heroku addons:add heroku-postgresql:dev
         git push heroku master;
         heroku run python manage.py syncdb;
         heroku open;
IT WORKS!
…but here be dragons (and not the fluffy ones)
THERE IS NO DOWNTIME FIX
…99.99999999999999 UPTIME IS NOT POSSIBLE
…IT’S PROBABLY OK.
IT’S FREE TO DEVELOP WITH
100% FREE DURING DEV/STAGING (PRODUCTION!)
INSTANCES SPIN DOWN!
CRON A CURL http://google.com
STOP USING MYSQL
…IT’S AWFUL.
(heroku addons:add cleardb:ignite)
…SERIOUSLY. IT’S AWFUL.
WEBSOCKETS, WEBSPROCKETS
…IT’S NGINX’S FAULT
(heroku addons:add pusher:sandbox)
SOCKET.IO + TORNADO
JUST USE EC2
UWSGI IS WAY BETTER THAN GUNICORN
USE PYTHON 2.7.2
pip install uwsgi;
pip freeze > requirements.txt;
“python-2.7.2” >> runtime.txt
“web: uwsgi --http-socket :$PORT --wsgi-file wsgi.py” >> Profile
STORING FILES? USE FILE STORAGES.
S3 IS BUILT FOR THIS
pip install boto django-storages;
pip freeze > requirements.txt;

CUSTOM STORAGES (utils.py)
from storages.backends.s3boto import S3BotoStorage

class StaticRootS3BotoStorage(S3BotoStorage):
      def __init__(self, *args, **kwargs):
             super(StaticRootS3BotoStorage, self).__init__(*args, **kwargs)
             self.location = 'static'

class MediaRootS3BotoStorage(S3BotoStorage):
      def __init__(self, *args, **kwargs):
             super(MediaRootS3BotoStorage, self).__init__(*args, **kwargs)
             self.location = 'uploads'



SETTINGS.PY
#### ASSETS URLS ####
BASE_URL   = '//bucket-name.s3.amazonaws.com/'
STATIC_URL = '%sstatic/' % BASE_URL
MEDIA_URL = '%suploads/' % BASE_URL


#### Amazon AWS / Storage
AWS_ACCESS_KEY_ID       = "AKXXXXX"
AWS_SECRET_ACCESS_KEY   = "HZZXXX/XXXX"
AWS_STORAGE_BUCKET_NAME = 'bucket-name'


#### File Storage
DEFAULT_FILE_STORAGE    = 'herokuapp.utils.MediaRootS3BotoStorage'
STATICFILES_STORAGE     = 'herokuapp.StaticRootS3BotoStorage'
WHATEVER WEIRD CONTAINER THING THEY USE

MICROS ARE FINE
IF YOU NEED MORE PERFORMANCE              heroku ps:scale web=2;
YOU’RE A LOG
WHY AREN’T YOU USING SENTRY? http://getsentry.com/
INSTALL RAVEN
pip install raven;
pip freeze > requirements.txt;

SETTINGS.PY
# Set your DSN value
SENTRY_DSN = 'https://XXXXX:XXXXX@app.getsentry.com/1111'

# Add raven to the list of installed apps
INSTALLED_APPS = INSTALLED_APPS + (
    # ...
    'raven.contrib.django.raven_compat',
)
PSQL? EC2!
MAKE A HIGH-MEMORY INSTANCE ON EC2 http://google.com
SET DATABASE_URL ENV
heroku config:set DATABASE_URL=postgres://xxx.aws.com:xxx/xxxx

THIS WORKS FOR ANYTHING
HEROKU’S PSQL IS ACTUALLY PRETTY GREAT
EMBRACE GIT DEPLOYS
USE PROCFILE FOR STUFF
“web: python manage.py collectstatic --noinput; uwsgi --http-
socket :$PORT --wsgi-file wsgi.py” >> Profile
THEIR SUPPORT SUCKS
BUT AT LEAST THEY HAVE SOME.
THANK YOU
JACK SHEDD | INTERACTIVE DIRECTOR
jshedd@thisismess.com
http://www.thisismess.com
QUESTIONS?
…warning, I tend to ramble.

Mais conteúdo relacionado

Destaque

Akirachix Engaging Women
Akirachix Engaging WomenAkirachix Engaging Women
Akirachix Engaging Women
Web Gathering
 
Global Warming
Global WarmingGlobal Warming
Global Warming
karchi
 
Convergence india 2012
Convergence india 2012Convergence india 2012
Convergence india 2012
sp_cool
 
BPE USA agenda - Full Agenda
BPE USA agenda - Full AgendaBPE USA agenda - Full Agenda
BPE USA agenda - Full Agenda
Zoe Gammie
 
Fas drs power_point_2003
Fas drs power_point_2003Fas drs power_point_2003
Fas drs power_point_2003
shallongammon
 

Destaque (20)

New Forests for New People
New Forests for New PeopleNew Forests for New People
New Forests for New People
 
OpenAIRE at the EC Consultation Workshop "Skills and Human Resources for e-In...
OpenAIRE at the EC Consultation Workshop "Skills and Human Resources for e-In...OpenAIRE at the EC Consultation Workshop "Skills and Human Resources for e-In...
OpenAIRE at the EC Consultation Workshop "Skills and Human Resources for e-In...
 
User Experience Mentoring (Ideabox Indonesia)
User Experience Mentoring (Ideabox Indonesia)User Experience Mentoring (Ideabox Indonesia)
User Experience Mentoring (Ideabox Indonesia)
 
Curating Cultures: Digital Technologies and Their Ramifications for Museums a...
Curating Cultures: Digital Technologies and Their Ramifications for Museums a...Curating Cultures: Digital Technologies and Their Ramifications for Museums a...
Curating Cultures: Digital Technologies and Their Ramifications for Museums a...
 
Akirachix Engaging Women
Akirachix Engaging WomenAkirachix Engaging Women
Akirachix Engaging Women
 
9. Il Web semantico
9. Il Web semantico9. Il Web semantico
9. Il Web semantico
 
DCU School of Physical Sciences
DCU School of Physical SciencesDCU School of Physical Sciences
DCU School of Physical Sciences
 
Cugos 2016 Ricker
Cugos 2016 RickerCugos 2016 Ricker
Cugos 2016 Ricker
 
Global Warming
Global WarmingGlobal Warming
Global Warming
 
Plastic Mulches & Row Covers on Growth & Production of Summer Squash; Gardeni...
Plastic Mulches & Row Covers on Growth & Production of Summer Squash; Gardeni...Plastic Mulches & Row Covers on Growth & Production of Summer Squash; Gardeni...
Plastic Mulches & Row Covers on Growth & Production of Summer Squash; Gardeni...
 
Streams API (Web Engines Hackfest 2015)
Streams API (Web Engines Hackfest 2015)Streams API (Web Engines Hackfest 2015)
Streams API (Web Engines Hackfest 2015)
 
A Hundred Years in a Decade
A Hundred Years in a DecadeA Hundred Years in a Decade
A Hundred Years in a Decade
 
Regional Newsletter (Winter 2014/15)
Regional Newsletter (Winter 2014/15)Regional Newsletter (Winter 2014/15)
Regional Newsletter (Winter 2014/15)
 
School of Chemical Sciences
School of Chemical SciencesSchool of Chemical Sciences
School of Chemical Sciences
 
Convergence india 2012
Convergence india 2012Convergence india 2012
Convergence india 2012
 
裸裎相見關鍵字
裸裎相見關鍵字裸裎相見關鍵字
裸裎相見關鍵字
 
MakkelijkLezenPlein deel 2 Theek 5
MakkelijkLezenPlein deel 2 Theek 5MakkelijkLezenPlein deel 2 Theek 5
MakkelijkLezenPlein deel 2 Theek 5
 
BPE USA agenda - Full Agenda
BPE USA agenda - Full AgendaBPE USA agenda - Full Agenda
BPE USA agenda - Full Agenda
 
From Sage 500 to 1000 ... Performance Testing myths exposed
From Sage 500 to 1000 ... Performance Testing myths exposedFrom Sage 500 to 1000 ... Performance Testing myths exposed
From Sage 500 to 1000 ... Performance Testing myths exposed
 
Fas drs power_point_2003
Fas drs power_point_2003Fas drs power_point_2003
Fas drs power_point_2003
 

Djanjo + heroku

  • 1. DJANGO + HEROKU OR HOW TO BE SMART ABOUT BEING STUPID
  • 2. THIS IS MESS FOUNDED IN 2007 WEB, MOBILE, SOCIAL, DESKTOP, IOS, ANDROID 4 DESIGNERS + 4 DEVELOPERS 1.25 ADMINS (ME + DAN) 4 SITES A MONTH WAY MORE IN “MAINTENANCE” 64.2% DJANGO http://www.thisismess.com
  • 3. I OWN MESS. I DO NOT WORK FOR HEROKU …and kinda hate their support guys.
  • 4. WHAT WE NEED …besides money and Scotch
  • 5. SERVERS SHOULD BE SAME(ish) CHEAP TO DEVELOP WITH PREDICTABLE TO SCALE WITH EASY(ish) TO ADMINISTER RELIABLE(ish) FLEXIBLE(ish) BILLABLE!
  • 6. DEPLOYMENT MUST BE THE SAME ACROSS AS MANY PROJECTS AS POSSIBLE N00B-PROOF’D DOCUMENTED FORGIVING
  • 7. WHAT WE’VE TRIED …and decided sucks
  • 9. 1996 CALLED AND IT HATES YOU …BUT IT’S CHEAP …AND FLEXIBLE! …AND PREDICTABLE! …AND ABSOLUTELY NOTHING ELSE
  • 10. 1 CO-LOCATED AT RACKSPACE
  • 11. 2002 ISN’T MUCH HAPPIER …BUT IT’S CHEAP …AND FLEXIBLE! …AND PREDICTABLE! …AND (more) RELIABLE! …AND ABSOLUTELY NOTHING ELSE
  • 12. (n) VPS (es?) AT RACKSPACE USING FABRIC AND RELEASES AND SFTP AND NEW RELIC AND SENTRY AND GIT AND PUPPETMASTER
  • 13. LIVING THE DREAM …CHEAP(ish) …AND FLEXIBLE! …AND PREDICTABLE! …AND RELIABLE! …AND (sort of) STANDARDIZED! …AND BILLABLE!
  • 14. IF YOUR DREAM IS… PAINFUL TO SETUP …AND SECURE …AND UPDATE …AND SCALE …AND TRAIN ON …AND CHANGE …AND BILL …AND TRANSFER
  • 15. AND BEFORE YOU ASK… AWS IS AWESOME …AND EC2 IS GREAT …BUT IT SUCKS
  • 16. SO, HEROKU. …it sucks less
  • 17. (h)+
  • 18. HEROKU (and S3 and EC2 and RACKSPACE) 100% STANDARD (unless it’s non-standard) N00B PROOF BILLABLE RELIABLE(ish) FLEXIBLE(ish) DOCUMENTED ADMINISTRATABLE (because you don’t) CHEAPER THAN CHEAP. FREE!
  • 19. AND YEAH IT’S JUST EC2 …BUT IT HIDES THE BULLSHIT …UNTIL YOU NEED BULLSHIT
  • 20. WHY NOT HEROKU …everything sucks in its own way
  • 21. IT’S KINDA, WELL…DUMB IT’S JUST EC2 …SO IT GOES DOWN WITH EC2 …AND WITHOUT IT …AND YOU CAN’T DO NATIVE WEBSOCKETS …AND IT GETS PRICEY …AND MYSQL SUCKS ON IT (so?) …AND UWSGI HAS PROBLEMS …AND THERE’S NO PERMANENT STORAGE …AND IT USES MICROS ON EC2 turns out they use linux containers or something. …AND LOGGING IS…LESS THAN AWESOME …AND PSQL IS KINDA SLOW …AND THEIR SUPPORT SUCKS …AND YOU DEPLOY WITH GIT
  • 22. MAKE IT SUCK LESS …as best you can
  • 23. 1. GET GOING CREATE AN ACCOUNT https://heroku.com DOWNLOAD THE TOOLBELT https://toolbelt.heroku.com INSTALL BREW http://mxcl.github.com/homebrew/ INSTALL GIT brew install git; INSTALL VIRTUALENV sudo easy_install virtualenv; INSTALL PIP sudo easy_install pip; INSTALL PSQL http://postgresapp.com GENERATE SSH IDENTITY http://google.com ADD PUBLIC KEY TO HEROKU https://dashboard.heroku.com/account
  • 24. 2. MAKE AN APP START A PROJECT mkdir heroku-app; cd heroku-app; git init; DO THE VENV virtualenv .env --distribute; source .env/bin/activate; INSTALL THINGS INTO THE VENV pip install Django psycopg2 dj-database-url; pip install boto django-storages South; DJANGO! DJANGO! django-admin.py startproject herokuapp .
  • 25. 3. PREPARE RUNSERVER python manage.py runserver; SPEC REQS pip freeze > requirements.txt SETUP PSQL createdb -h localhost heroku; SETTINGS.PY import dj_database_url DATABASES['default'] = dj_database_url.config(default='postgres://foo@localhost/heroku') GUNICORN (they refuse to support UWSGI correctly) pip install gunicorn; “web: gunicorn herokuapp.wsgi” >> Profile .gitignore *.pyc .env .DS_Store local_settings.py
  • 26. 4. GIT IT? INIT & COMMIT git init; git add .; git commit -a -m “I love squirrels.”;
  • 27. 5. HEROKUEN! APPIFY heroku create; heroku addons:add heroku-postgresql:dev git push heroku master; heroku run python manage.py syncdb; heroku open;
  • 28. IT WORKS! …but here be dragons (and not the fluffy ones)
  • 29. THERE IS NO DOWNTIME FIX …99.99999999999999 UPTIME IS NOT POSSIBLE …IT’S PROBABLY OK.
  • 30. IT’S FREE TO DEVELOP WITH 100% FREE DURING DEV/STAGING (PRODUCTION!) INSTANCES SPIN DOWN! CRON A CURL http://google.com
  • 31. STOP USING MYSQL …IT’S AWFUL. (heroku addons:add cleardb:ignite) …SERIOUSLY. IT’S AWFUL.
  • 32. WEBSOCKETS, WEBSPROCKETS …IT’S NGINX’S FAULT (heroku addons:add pusher:sandbox) SOCKET.IO + TORNADO JUST USE EC2
  • 33. UWSGI IS WAY BETTER THAN GUNICORN USE PYTHON 2.7.2 pip install uwsgi; pip freeze > requirements.txt; “python-2.7.2” >> runtime.txt “web: uwsgi --http-socket :$PORT --wsgi-file wsgi.py” >> Profile
  • 34. STORING FILES? USE FILE STORAGES. S3 IS BUILT FOR THIS pip install boto django-storages; pip freeze > requirements.txt; CUSTOM STORAGES (utils.py) from storages.backends.s3boto import S3BotoStorage class StaticRootS3BotoStorage(S3BotoStorage): def __init__(self, *args, **kwargs): super(StaticRootS3BotoStorage, self).__init__(*args, **kwargs) self.location = 'static' class MediaRootS3BotoStorage(S3BotoStorage): def __init__(self, *args, **kwargs): super(MediaRootS3BotoStorage, self).__init__(*args, **kwargs) self.location = 'uploads' SETTINGS.PY #### ASSETS URLS #### BASE_URL = '//bucket-name.s3.amazonaws.com/' STATIC_URL = '%sstatic/' % BASE_URL MEDIA_URL = '%suploads/' % BASE_URL #### Amazon AWS / Storage AWS_ACCESS_KEY_ID = "AKXXXXX" AWS_SECRET_ACCESS_KEY = "HZZXXX/XXXX" AWS_STORAGE_BUCKET_NAME = 'bucket-name' #### File Storage DEFAULT_FILE_STORAGE = 'herokuapp.utils.MediaRootS3BotoStorage' STATICFILES_STORAGE = 'herokuapp.StaticRootS3BotoStorage'
  • 35. WHATEVER WEIRD CONTAINER THING THEY USE MICROS ARE FINE IF YOU NEED MORE PERFORMANCE heroku ps:scale web=2;
  • 36. YOU’RE A LOG WHY AREN’T YOU USING SENTRY? http://getsentry.com/ INSTALL RAVEN pip install raven; pip freeze > requirements.txt; SETTINGS.PY # Set your DSN value SENTRY_DSN = 'https://XXXXX:XXXXX@app.getsentry.com/1111' # Add raven to the list of installed apps INSTALLED_APPS = INSTALLED_APPS + ( # ... 'raven.contrib.django.raven_compat', )
  • 37. PSQL? EC2! MAKE A HIGH-MEMORY INSTANCE ON EC2 http://google.com SET DATABASE_URL ENV heroku config:set DATABASE_URL=postgres://xxx.aws.com:xxx/xxxx THIS WORKS FOR ANYTHING HEROKU’S PSQL IS ACTUALLY PRETTY GREAT
  • 38. EMBRACE GIT DEPLOYS USE PROCFILE FOR STUFF “web: python manage.py collectstatic --noinput; uwsgi --http- socket :$PORT --wsgi-file wsgi.py” >> Profile
  • 39. THEIR SUPPORT SUCKS BUT AT LEAST THEY HAVE SOME.
  • 40. THANK YOU JACK SHEDD | INTERACTIVE DIRECTOR jshedd@thisismess.com http://www.thisismess.com