Climbing Mount Production: Django’s Missing Deployment Story
Speaker: Jan Raasch
After finishing Django’s official tutorial, you have a working app on your computer… and nothing else. Just DEBUG = True and a lone security warning. This talk follows my own path from the foot of “Mount Deployment”: discovering django-simple-deploy and its ecosystem of plugins for platforms like Fly.io and Scalingo, then building dsd-vps-kamal to take a bare VPS from empty to a running Django app. We’ll deploy an app to a clean VPS live - all with HTTPS and a custom domain. We’ll close by looking at what’s still missing, from related projects like django-prodserver to a possible Django deployment working group.
The tutorial ends, and then?
I came to Django from many years of Rails, and loved it immediately. Right up until I finished the official tutorial and looked around for what should come next. Rails ships with production-shaped opinions from rails new onward. Django’s tutorial hands you a working app, a DEBUG = True in settings.py, one lone security warning comment, and… that’s it. No Dockerfile. No deploy command. Just manage.py check --deploy with no clear path on how to go live.
Enter django-simple-deploy
django-simple-deploy fills that gap with a plugin architecture: one core tool, many deployment targets. I built dsd-vps-kamal as one of those plugins: Kamal-powered deployment to any plain VPS, no PaaS lock-in.
Live: zero to running
We’ll deploy a small Django app from a completely clean VPS to a running production instance, live, using dsd-vps-kamal. Expect real terminal output, a real server, and (hopefully :)) a working app by the end.
What’s still missing
One plugin doesn’t mean deployment is solved. I want to leave the audience with on-going related efforts and the open problems I see:
- django-prodserver - the production-server command that dsd-vps-kamal already leans on
- A Dockerfile in the tutorial’s example project, so containerized deployment isn’t a bolt-on
- Multiple example projects, matched to different backgrounds and comfort levels
- Support for experimental APIs in Django core. Think a
deployorservermanagement command, available for all developers as part of Django core even while these APIs are still undergoing heavy development themselves - A Django Deployment Working Group: people who just care about the “it works on my machine” → “it’s live” gap, maybe anchored by a one-stop shop like django-deployment.com. Rockets and unicorns very much encouraged 🚀🦄
This talk is for you if you only finished the tutorial and want to know how to get your app live on the internet.
This talk is also for you if you are a seasoned Django developer, have opinions about deployment, and are looking for ways to share your experience & expertise to benefit the broader Django community.
About Jan
I started my career in software 14+ years ago on the frontend. Quickly, I acquired backend skills to be able to ship complete features end-to-end.
In a previous life, 14+ years ago, I was a mathematician. It shows in how I approach problems – I love diving deep into complex challenges and finding elegant solutions.
I’ve been consulting as a full-stack developer for over 5 years. Remote since before it was cool, I’ve learned that the best products are built on trust, clear communication, and testing ideas early.