Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The Twelve-Factor App
Search
Kristian Glass
September 20, 2014
Programming
2
1.1k
The Twelve-Factor App
http://12factor.net/
- what, why, how
From PyCon UK 2014
Kristian Glass
September 20, 2014
Tweet
Share
More Decks by Kristian Glass
See All by Kristian Glass
How To Screw Up Hiring - Kristian Glass - PyCon UK 2018
doismellburning
0
430
Infrastructure as Code with AWS CloudFormation and Sceptre
doismellburning
0
3.6k
Other Decks in Programming
See All in Programming
Scalaから始めるOpenFeature入門 / Scalaわいわい勉強会 #4
arthur1
1
360
責務を分離するための例外設計 - PHPカンファレンス 2024
kajitack
9
2.1k
技術的負債と向き合うカイゼン活動を1年続けて分かった "持続可能" なプロダクト開発
yuichiro_serita
0
170
menu基盤チームによるGoogle Cloudの活用事例~Application Integration, Cloud Tasks編~
yoshifumi_ishikura
0
110
今年のアップデートで振り返るCDKセキュリティのシフトレフト/2024-cdk-security-shift-left
tomoki10
0
270
どうして手を動かすよりもチーム内のコードレビューを優先するべきなのか
okashoi
3
660
LLM Supervised Fine-tuningの理論と実践
datanalyticslabo
7
1.6k
EC2からECSへ 念願のコンテナ移行と巨大レガシーPHPアプリケーションの再構築
sumiyae
2
470
Amazon S3 NYJavaSIG 2024-12-12
sullis
0
110
Findy Team+ Awardを受賞したかった!ベストプラクティス応募内容をふりかえり、開発生産性向上もふりかえる / Findy Team Plus Award BestPractice and DPE Retrospective 2024
honyanya
0
110
各クラウドサービスにおける.NETの対応と見解
ymd65536
0
200
Запуск 1С:УХ в крупном энтерпрайзе: мечта и реальность ПМа
lamodatech
0
740
Featured
See All Featured
Visualization
eitanlees
146
15k
4 Signs Your Business is Dying
shpigford
182
21k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
32
2.7k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
111
49k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
Embracing the Ebb and Flow
colly
84
4.5k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
Transcript
The Twelve-Factor App Kristian Glass @doismellburning http://www.doismellburning.co.uk/talks/django12factor 1
•I do development •I do operations •I write code and
care how it runs 2
What is Twelve Factor? “A methodology for building web apps”
3
Core Concept Clean interface between app and underlying system 4
#1 One code repository, many deploys 5
#2 Explicitly declare and isolate dependencies 6
So, virtualenv and requirements.txt ? 7
$ pip install -r requirements.txt! # …! Downloading/unpacking gevent! Running
setup.py egg_info for package gevent! # …! gevent/libevent.h:9:19: error: event.h: No such file or directory! # …! error: command 'gcc-4.2' failed with exit status 1 8
So how? •Containers/VMs •OS packages (ish) 9
#3 Read config from the environment 10
What is Config? Everything likely to vary between deploys 11
Config Examples •Service URLs (Database, mail, etc.) •Service credentials •Debug
flag 12
Why do this? •Separation of responsibility •Language and framework independent
•Avoid leakage of secrets 13
But config files? •Apps read from environment •Environment may come
from files 14
How do I populate the environment? • foreman • honcho
• envdir • supervisor • bash scripts • and more… 15
Using Django? https://github.com/doismellburning/ django12factor 16
#4 Treat backing services as attached resources 17
Attached Resources •No distinction between local/external resources •Loose coupling 18
#5 Distinct build/ release/run stages 19
Build / Release? build :: Code -> Executable! ! release
:: Config -> Executable -> Release Artefact 20
Example: Building a Django Project $ git clone! $ virtualenv!
$ pip install -r requirements.txt! $ manage.py collectstatic ! $ fpm 21
Releases •New config? New release •New code? New build, new
release 22
Run stage As simple as possible 23
Why? •Do hard work in advance •Optimise the common case
24
#6 Run as stateless process(es) 25
Stateless Processes •Persist data to external services •Assume nothing about
RAM/ disk •No sticky sessions 26
#7 Export services via port binding 27
What does this mean? •Your app should offer its services
by some protocol on some port •Self-contained services: run and go 28
#8 Scale out with processes 29
Process model •More load? More processes •Background jobs? Worker processes
•Don’t daemonise, that’s manager’s job 30
#9 Start quickly, stop nicely 31
Start quickly, stop nicely •Disposable apps •Auto-scale easily •Deploy quickly
and easily 32
#10 Keep environments as similar as possible 33
Three prod/dev gaps •Time gap •People gap •Tools gap 34
Time gap •“Production is weeks behind dev” •Solution: Deploy more
35
People gap •“Developers write code, Ops run it” •Solution: DevOps
36
Tool gap •“It works on my machine” •Solution: Use the
same tools everywhere 37
#11 Treat logs as event streams 38
Logs as event streams •No logfile / routing / storage
handling •Spit logs out to stdout •One event, one line 39
#12 Admin tasks as part of your app 40
What does that mean? •Django management commands are a great
example •$ python manage.py syncdb! •No private folders of “useful snippets” •Keep them with the app 41
Recap 1. One codebase 2. Dependencies 3. Config in environment
4. Backing Services 5. Build, release, run 6. Stateless processes 7. Port binding 8. Scale with processes 9. Disposability 10. Dev/prod parity 11. Logs as event stream 12. Admin processes 42
Recap •It does not matter what language •It does not
matter what framework 43
Questions? http://www.doismellburning.co.uk/talks/django12factor 44