A Django Simple Deploy plugin for deploying Django projects to any VPS provider using Kamal.
Project description
dsd-vps-kamal

A django-simple-deploy plugin for deploying Django projects to any VPS using Kamal.
Hetzner, DigitalOcean, Linode et al. — if you can SSH into it, you can deploy to it.
- Current Status 🙋♂️
- Installation 💻
- Configuration-only mode
- Fully automated deployment ⚡
- Options
- Installing Kamal 🔧
- Development 🛠️
- Special Thanks ❤️
- License 📄
Current Status 🙋♂️
This plugin is in a pre-1.0 development phase. It's ready for use, but the API is not yet stable. See the roadmap to v1 for what's planned.
Installation 💻
pip install dsd-vps-kamal
Then add django_simple_deploy to INSTALLED_APPS in your settings.py:
INSTALLED_APPS = [
# ...
"django_simple_deploy",
]
Usage 🧑🔧
Configuration-only mode
By default, the plugin configures your project for deployment but doesn't actually deploy. You review the changes, commit, and deploy yourself:
python manage.py deploy --ip-address <your-vps-ip>
This generates all the files Kamal needs — deploy.yml, Dockerfile, secrets, and production settings. Review the changes, then:
git add .
git commit -m "Configured for deployment via Kamal."
rvx kamal setup # see »Installing Kamal« below for more details
Fully automated deployment ⚡
Pass --automate-all and the plugin handles everything — configuration, committing, and running kamal setup for you:
python manage.py deploy --automate-all --ip-address <your-vps-ip>
This requires a few things to be in place:
- VPS provisioning is out of scope (for now) — bring your own server; this command does not create or configure the VPS itself yet.
- SSH root access —
ssh root@<your-vps-ip>must work without a password prompt - Docker running locally — the Docker daemon needs to be active on your machine. We recommend Docker Desktop.
- Kamal installed locally — see Installing Kamal below
Options
--ip-address (required)
The IPv4 address of your VPS. This is how the plugin knows where to deploy.
--host (required for HTTPS, optional otherwise)
A domain name for Kamal's proxy routing, e.g. myapp.example.com. If you've pointed a DNS record at your VPS, pass it here:
python manage.py deploy --ip-address <your-vps-ip> --host myapp.example.com
If omitted, your app is served over HTTP on the IP address (no automatic TLS certificate).
--sqlite (optional)
Use SQLite instead of PostgreSQL:
python manage.py deploy --ip-address <your-vps-ip> --sqlite
Uses dj-lite for production-ready SQLite by default.
Installing Kamal 🔧
Kamal is a Ruby gem. If you already have Ruby set up:
gem install kamal
If you'd rather not manage a Ruby environment, we recommend rv:
brew install rv # see https://github.com/spinel-coop/rv#installation for other OSes
rv tool install kamal
Then use rvx kamal wherever you'd normally run kamal. The plugin detects rv automatically when using --automate-all.
Development 🛠️
Install Just to run the development commands:
just dev-setup # clones core + installs everything in editable mode
## Other `just` recipes for development:
lint # Check linting (no fixes)
format # Format code
test-unit # Run unit tests
test-integration # Run integration tests
All available just commands:
just --list
Special Thanks ❤️
- Eric Matthes for django-simple-deploy — making Django deployment accessible to everyone
- David Heinemeier Hansson for Kamal — zero-downtime deployments to any VPS without the complexity
- Jeff Triplett for django-startproject — a fantastic project template and inspiration
- Adam Hill for dj-lite — production-ready SQLite for Django
- The Djangonauts program & Team Venus 🪐 - Session 6
License 📄
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dsd_vps_kamal-0.1.1.tar.gz.
File metadata
- Download URL: dsd_vps_kamal-0.1.1.tar.gz
- Upload date:
- Size: 16.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5d620a0fd5448c25e4b12ab8ca74ac50dc19a6aea276f51126cca6c6393fe1d9
|
|
| MD5 |
585fc4defb279d35f3d1e2a3521a8f7f
|
|
| BLAKE2b-256 |
632fc5feb4be4c780ad6b62ffc77a658880b0afd63140ed91f96beb53d6300ca
|
Provenance
The following attestation bundles were made for dsd_vps_kamal-0.1.1.tar.gz:
Publisher:
publish.yml on janraasch/dsd-vps-kamal
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dsd_vps_kamal-0.1.1.tar.gz -
Subject digest:
5d620a0fd5448c25e4b12ab8ca74ac50dc19a6aea276f51126cca6c6393fe1d9 - Sigstore transparency entry: 1239399694
- Sigstore integration time:
-
Permalink:
janraasch/dsd-vps-kamal@4b2eef052235ce3b65f595adc5d64997b7f170e8 -
Branch / Tag:
refs/tags/v0.1.1-rerelease - Owner: https://github.com/janraasch
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4b2eef052235ce3b65f595adc5d64997b7f170e8 -
Trigger Event:
release
-
Statement type:
File details
Details for the file dsd_vps_kamal-0.1.1-py3-none-any.whl.
File metadata
- Download URL: dsd_vps_kamal-0.1.1-py3-none-any.whl
- Upload date:
- Size: 16.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1c36202a5e356e9c98a9844c27ad269f36d1af3698924972b99566ff756213d3
|
|
| MD5 |
9e3d40111f1e0f84260469eb822f4a48
|
|
| BLAKE2b-256 |
565d10336c00950764a052d3dc1742b872df12a5970ca98146a7f6ab62277146
|
Provenance
The following attestation bundles were made for dsd_vps_kamal-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on janraasch/dsd-vps-kamal
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dsd_vps_kamal-0.1.1-py3-none-any.whl -
Subject digest:
1c36202a5e356e9c98a9844c27ad269f36d1af3698924972b99566ff756213d3 - Sigstore transparency entry: 1239399696
- Sigstore integration time:
-
Permalink:
janraasch/dsd-vps-kamal@4b2eef052235ce3b65f595adc5d64997b7f170e8 -
Branch / Tag:
refs/tags/v0.1.1-rerelease - Owner: https://github.com/janraasch
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4b2eef052235ce3b65f595adc5d64997b7f170e8 -
Trigger Event:
release
-
Statement type: