djanjo + heroku
Post on 16-Jul-2015
911 Views
Preview:
TRANSCRIPT
THIS IS MESSFOUNDED IN 2007
4 DESIGNERS + 4 DEVELOPERS
WEB, MOBILE, SOCIAL, DESKTOP, IOS, ANDROID
1.25 ADMINS (ME + DAN)
64.2% DJANGO
4 SITES A MONTH
WAY MORE IN “MAINTENANCE”
http://www.thisismess.com
SERVERS SHOULD BESAME(ish)
PREDICTABLE TO SCALE WITH
CHEAP TO DEVELOP WITH
EASY(ish) TO ADMINISTER
RELIABLE(ish)
FLEXIBLE(ish)
BILLABLE!
1996 CALLED AND IT HATES YOU…BUT IT’S CHEAP
…AND PREDICTABLE!
…AND FLEXIBLE!
…AND ABSOLUTELY NOTHING ELSE
2002 ISN’T MUCH HAPPIER…BUT IT’S CHEAP
…AND PREDICTABLE!
…AND FLEXIBLE!
…AND (more) RELIABLE!
…AND ABSOLUTELY NOTHING ELSE
(n)VPS (es?)
AT RACKSPACE
USING FABRICAND RELEASES
AND SFTP
AND NEW RELIC
AND SENTRY
AND GIT
AND PUPPETMASTER
LIVING THE DREAM…CHEAP(ish)
…AND PREDICTABLE!
…AND FLEXIBLE!
…AND RELIABLE!
…AND (sort of) STANDARDIZED!
…AND BILLABLE!
IF YOUR DREAM IS…PAINFUL TO SETUP
…AND UPDATE
…AND SECURE
…AND SCALE
…AND TRAIN ON
…AND CHANGE
…AND BILL
…AND TRANSFER
HEROKU (and S3 and EC2 and RACKSPACE)
100% STANDARD (unless it’s non-standard)
BILLABLE
N00B PROOF
RELIABLE(ish)
FLEXIBLE(ish)
DOCUMENTED
ADMINISTRATABLE (because you don’t)
CHEAPER THAN CHEAP. FREE!
IT’S KINDA, WELL…DUMBIT’S JUST EC2
…AND WITHOUT IT
…SO IT GOES DOWN WITH EC2
…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
…AND LOGGING IS…LESS THAN AWESOME
…AND PSQL IS KINDA SLOW
…AND THEIR SUPPORT SUCKS
…AND YOU DEPLOY WITH GIT
turns out they use linux containers or something.
1. GET GOING
DOWNLOAD THE TOOLBELT
INSTALL BREW
https://toolbelt.heroku.com
http://mxcl.github.com/homebrew/
INSTALL GIT brew install git;
CREATE AN ACCOUNT https://heroku.com
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
DO THE VENV
INSTALL THINGS INTO THE VENV
START A PROJECT mkdir heroku-app; cd heroku-app; git init;
virtualenv .env --distribute;source .env/bin/activate;
pip install Django psycopg2 dj-database-url;pip install boto django-storages South;
DJANGO! DJANGO!
django-admin.py startproject herokuapp .
3. PREPARE
SPEC REQS
SETUP PSQL
SETTINGS.PYimport dj_database_urlDATABASES['default'] = dj_database_url.config(default='postgres://foo@localhost/heroku')
RUNSERVER python manage.py runserver;pip freeze > requirements.txtcreatedb -h localhost heroku;
GUNICORN (they refuse to support UWSGI correctly)
pip install gunicorn;“web: gunicorn herokuapp.wsgi” >> Profile
.gitignore
*.pyc.env.DS_Storelocal_settings.py
5. HEROKUEN!heroku create;heroku addons:add heroku-postgresql:devgit push heroku master;heroku run python manage.py syncdb;heroku open;
APPIFY
IT’S FREE TO DEVELOP WITH100% FREE DURING DEV/STAGING (PRODUCTION!)
INSTANCES SPIN DOWN!
CRON A CURL http://google.com
WEBSOCKETS, WEBSPROCKETS…IT’S NGINX’S FAULT
(heroku addons:add pusher:sandbox)
SOCKET.IO + TORNADO
JUST USE EC2
UWSGI IS WAY BETTER THAN GUNICORNUSE 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'
#### ASSETS URLS ####BASE_URL = '//bucket-name.s3.amazonaws.com/'STATIC_URL = '%sstatic/' % BASE_URLMEDIA_URL = '%suploads/' % BASE_URL
#### Amazon AWS / StorageAWS_ACCESS_KEY_ID = "AKXXXXX"AWS_SECRET_ACCESS_KEY = "HZZXXX/XXXX"AWS_STORAGE_BUCKET_NAME = 'bucket-name'
#### File StorageDEFAULT_FILE_STORAGE = 'herokuapp.utils.MediaRootS3BotoStorage'STATICFILES_STORAGE = 'herokuapp.StaticRootS3BotoStorage'
SETTINGS.PY
MICROS ARE FINEIF YOU NEED MORE PERFORMANCE heroku ps:scale web=2;
WHATEVER WEIRD CONTAINER THING THEY USE
http://getsentry.com/
YOU’RE A LOGWHY AREN’T YOU USING SENTRY?
INSTALL RAVEN
pip install raven; pip freeze > requirements.txt;
SETTINGS.PY
# Set your DSN valueSENTRY_DSN = 'https://XXXXX:XXXXX@app.getsentry.com/1111'
# Add raven to the list of installed appsINSTALLED_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 DEPLOYSUSE PROCFILE FOR STUFF
“web: python manage.py collectstatic --noinput; uwsgi --http-socket :$PORT --wsgi-file wsgi.py” >> Profile
THANK YOU
JACK SHEDD | INTERACTIVE DIRECTOR
jshedd@thisismess.com
http://www.thisismess.com
top related