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
Containerless Django
Search
Peter Baumgartner
October 16, 2018
Programming
1.8k
5
Share
Containerless Django
Deploying Django without Docker
Peter Baumgartner
October 16, 2018
More Decks by Peter Baumgartner
See All by Peter Baumgartner
High Performance Django at Ten
ipmb
0
54
Just Enough Ops for Developers
ipmb
0
300
Prepping Your Project for Production
ipmb
2
910
Django Deployments Done Right
ipmb
6
1.5k
High Performance Django: From runserver to Reddit hugs
ipmb
1
1.4k
Getting Started with Salt (PyCon 2014)
ipmb
6
1.3k
Monitoring Infrastructure with SaltStack
ipmb
16
10k
Getting Started with Salt
ipmb
11
1.7k
Other Decks in Programming
See All in Programming
今からFlash開発できるわけないじゃん、ムリムリ! (※ムリじゃなかった!?)
arkw
0
190
仕様漏れ実装漏れをなくすトレーサビリティAI基盤のご紹介
orgachem
PRO
9
5.2k
年間50登壇、単著出版、雑誌寄稿、Podcast出演、YouTube、CM、カンファレンス主催……全部やってみたので面白さ等を比較してみよう / I’ve tried them all, so let’s compare how interesting they are.
nrslib
4
730
Going Multiplatform with Your Android App (Android Makers 2026)
zsmb
2
360
Vibe NLP for Applied NLP
inesmontani
PRO
0
130
それはエンジニアリングの糧である:AI開発のためにAIのOSSを開発する現場より / It serves as fuel for engineering: insights from the field of developing open-source AI for AI development.
nrslib
1
830
ドメインイベントでビジネスロジックを解きほぐす #phpcon_odawara
kajitack
2
120
LM Linkで(非力な!)ノートPCでローカルLLM
seosoft
0
420
ネイティブアプリとWebフロントエンドのAPI通信ラッパーにおける共通化の勘所
suguruooki
0
250
ファインチューニングせずメインコンペを解く方法
pokutuna
0
280
L’IA au service des devs : Anatomie d'un assistant de Code Review
toham
0
220
レガシーPHP転生 〜父がドメインエキスパートだったのでDDD+Claude Codeでチート開発します〜
panda_program
0
610
Featured
See All Featured
The SEO Collaboration Effect
kristinabergwall1
0
420
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
220
Code Reviewing Like a Champion
maltzj
528
40k
Un-Boring Meetings
codingconduct
0
260
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
260
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
110
Utilizing Notion as your number one productivity tool
mfonobong
4
290
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
150
A Tale of Four Properties
chriscoyier
163
24k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
150
BBQ
matthewcrist
89
10k
Transcript
DjangoCon US—San Diego Oct 2018 Deploying without Docker Containerless Django
Peter Baumgartner
Founder at Lincoln Loop—lincolnloop.com Former SysAdmin, DevOps for 8 years
Author of High Performance Django About Me
Docker is cool!
@ipmb | #djangocon Docker is cool! The “pipeline” Security Isolation
Dev/prod parity
Just bundle the entire OS
Some philosophy
“ —Mike Perham https://www.mikeperham.com/2016/02/09/kill-your-dependencies/ No code runs faster than no
code. No code has fewer bugs than no code. No code uses less memory than no code. No code is easier to understand than no code. “
None
@ipmb | #djangocon Docker Drawbacks Slow Extra abstractions More software,
more problems
None
How did we get here?
@ipmb | #djangocon Deployments sucked Dependencies would shift underneath you
Build tools and dev packages needed to be installed Multiple languages, multiple builds (Python & Node)
@ipmb | #djangocon The ideal deployment Download a binary Create
a configuration file Run it
@ipmb | #djangocon The ideal deployment /usr/local/bin/traefik \ --configFile=/etc/traefik/traefik.toml /usr/local/bin/telegraf
\ --config=/etc/telegraf/telegraf.conf /usr/sbin/nginx -c /etc/nginx/nginx.conf
@ipmb | #djangocon Python isn’t C or Go Requires a
VM Dynamic linking Packaging isn’t straightforward
None
Can we do better?
@ipmb | #djangocon We already are! Lock files via pipenv
or poetry Pre-compiled wheels (Pillow, psycopg2-binary, etc.) Still lots of holes - Assembling virtualenvs - Static files - Production webserver
@ipmb | #djangocon Prior art Private PyPI virtualenv-clone Platter dh-virtualenv
Pex
@ipmb | #djangocon ZIP applications? Part of Python since 2.6
PEP-441 improves support in 3.5 Create a ZIP archive of your project. Run it with Python. …but no mechanism for handling dependencies
None
@ipmb | #djangocon Enter shiv! A project from LinkedIn Zipapps
with dependencies A single artifact you can build → test → deploy ./myproject.pyz runserver
Django as a zipapp
Package your project with setup.py
@ipmb | #djangocon Include templates & static files Create a
MANIFEST.in graft your_project/collected_static graft your_project/templates
@ipmb | #djangocon Production webserver gunicorn + whitenoise ⭐ https://pypi.org/project/django-pyuwsgi/
@ipmb | #djangocon Build your zipapp
@ipmb | #djangocon Run your zipapp ./yourproject.pyz pyuwsgi --http=:8000
@ipmb | #djangocon Configuration Same zipapp, but different settings per
environment Options: - Multiple settings files and DJANGO_SETTINGS_MODULE - Environment variables - ⭐ https://pypi.org/project/goodconf/
@ipmb | #djangocon The zipapp pipeline Use CI (Travis, CircleCI,
Bitbucket, etc.) to: - Build - Test - Push Deploy = Download and run
None
What about security?
Systemd's got your back
@ipmb | #djangocon Systemd is awesome ProtectSystem=strict ProtectHome=true DynamicUser=true CapabilityBoundingSet=~CAP_SYS_ADMIN
AppArmorProfile=srv.yourproject.pyz ProtectKernelTunables=true ProtectControlGroups=true ProtectKernelModules=true PrivateDevices=true PrivateTmp=true SystemCallArchitectures=native
What about isolation?
@ipmb | #djangocon Isolation You still need Python installed globally
Easy to install multiple Pythons on one server Docker has better isolation, but do you need it?
@ipmb | #djangocon What about parity? Zipapp is the same
from CI to all deployed environments Use Docker to mimic deployment envionrment locally (or don't)
@ipmb | #djangocon Pros Simpler. No Docker on the server.
No registry. ~1M fewer lines of code to depend on. Smaller artifacts Faster deployments It's just Python
@ipmb | #djangocon Cons Not as isolated as true containers
Requires Python runtime on the server Python-specific Not cross-platform compatible (if you have packages with C extensions)
@ipmb | #djangocon Sweet spot for zipapps You are deploying
primarily Python services You have outgrown PaaS (Heroku, PythonAnywhere, Divio, etc.) You have fewer than 50 services to maintain
None
None
Thanks! Peter Baumgartner
[email protected]
@ipmb