Skip to main content

A Django Simple Deploy plugin for deploying Django projects to any VPS provider using Kamal.

Project description

dsd-vps-kamal lint tests

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 🙋‍♂️

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 accessssh 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 📄

BSD 3-Clause © Jan Raasch

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dsd_vps_kamal-0.2.0.tar.gz (16.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dsd_vps_kamal-0.2.0-py3-none-any.whl (16.1 kB view details)

Uploaded Python 3

File details

Details for the file dsd_vps_kamal-0.2.0.tar.gz.

File metadata

  • Download URL: dsd_vps_kamal-0.2.0.tar.gz
  • Upload date:
  • Size: 16.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dsd_vps_kamal-0.2.0.tar.gz
Algorithm Hash digest
SHA256 1aa3a4f8e4b8276de56c17fb2462e3a60542e1b1d648e106b55ce390a1ee9038
MD5 f5b2f8a0c0233adebf38d448627b75be
BLAKE2b-256 8c27649f9a7826df0d0ea754bd6c4145b767b211bca25c722197ffe257b0b117

See more details on using hashes here.

Provenance

The following attestation bundles were made for dsd_vps_kamal-0.2.0.tar.gz:

Publisher: publish.yml on janraasch/dsd-vps-kamal

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file dsd_vps_kamal-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: dsd_vps_kamal-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 16.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for dsd_vps_kamal-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9ca277b7bc3ea0978046d24d52bad7ceca2e907acd2a5d167c4a9a7e25929d56
MD5 39ad19a6f17de8e30e6a51bbf74ec24d
BLAKE2b-256 3fd8dbf346618269f5f9710e9c68f05fb53b49ddb584b35c956f38a16a9c8e86

See more details on using hashes here.

Provenance

The following attestation bundles were made for dsd_vps_kamal-0.2.0-py3-none-any.whl:

Publisher: publish.yml on janraasch/dsd-vps-kamal

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page