Notes taken during a talk at PyConUK
#1 one code repo many deploys
#2 what about declaring your dependencies, e.g. gcc compiled items, deply containers
#3 read config from environment
debug flag, db connections etc
avoids secret leakage,
add defaults
make it language independent
populating env – foreman, supervisor (d?), ansible, bash -whatever etc
doismellburning – django app
www.doismellburning. co.uk .com?
NB: can be in another repo, just def outside of your app
#4 Loose coupling
#5 build, release (when config gets blended), run
build tip
…
fpm – builds an os package (ruby, don’t snigger too much – it’s awesome)
run stage needs to be a simple as possibly, do as much work in advance. e.g. fetch eggs in build, collect static etc
#6 stateless
assume nothing about RAM, persist data to external serices
#7 Port binding:
clean interface, should be able to tell your app a protocol and port and go
#8 Scale out not up, start more processes, don’t daemonise – let the env do it
#9 Stop quick;y, stop nicely
#10 Keep env similar: time, people, tool gap
Deploy more often
people
-> get people together, devops, …
tools
-> it works on my machine
#11 Treat logs as event streams
Run a log agreegator
one event, one line
=> q. how do you handle exceptions – let the agreegotr handle this, some differently code new lines.
#12 Run admin tasks in your app, eg clean up old sessions, as a django management command not a one off script on some dev machine
Language and framework agnostics