# django-simple-deploy
Deployment, for Djangonauts with deadlines.
## Documentation
The full documentation for this project is at [Read the Docs](https://django-simple-deploy.readthedocs.io/en/latest/).
## Recent media
[Django Simple Deploy and other DevOps Things](https://talkpython.fm/episodes/show/500/django-simple-deploy-and-other-devops-things) (Episode 500 of Talk Python)
It was an honor to be the guest on episode 500, that's a fantastic milestone for a podcast! This episode focuses on the state of `django-simple-deploy` as it reached the 1.0 release.
## Quickstart
`django-simple-deploy` gives you a management command that configures your project for an initial deployment. It currently supports deployments to [Fly.io](https://fly.io), [Platform.sh](https://platform.sh), and [Heroku](https://heroku.com). Each platform is supported by an external plugin, which means it's relatively straightforward to build support for additional hosting platforms. A [plugin](https://github.com/django-simple-deploy/dsd-vps) supporting VPS-based deployments is currently in development.
If you have a Django project that runs locally, you can deploy your project in a few short steps. The only change you'll need to make to your project is to add `django_simple_deploy` to `INSTALLED_APPS`.

The above command will deploy your project to Fly.io. To deploy to another platform such as Platform.sh, just install a different plugin when you install `django-simple-deploy`:
```sh
$ pip install "django-simple-deploy[platform_sh]"
```
All output is captured and written to a log file stored in `dsd_logs/`, which is placed at the project's root directory.
Installing a plugin automatically installs `django-simple-deploy`. So for platforms supported by third-party plugins, the only difference is the installation step:
```sh
$ pip install <dsd-plugin-name>
# Add django_simple_deploy to INSTALLED_APPS
$ python manage.py deploy --automate-all
```
Configuration-only mode
---
The above example uses the `--automate-all` flag, which reduces deployment to three steps. The fully automated mode configures your project, commits changes for you, and pushes your code to the target platform's servers. There's also a configuration-only mode, which lets you inspect the changes made to your project before committing them and making the actual deployment. For a quick example, see the full [Fly.io Quick Start guide](https://django-simple-deploy.readthedocs.io/en/latest/quick_starts/quick_start_flyio/).
Raw data
{
"_id": null,
"home_page": null,
"name": "django-simple-deploy",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "django, deployment",
"author": null,
"author_email": "Eric Matthes <ehmatthes@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/a3/0f/d4c5157097861c6b71d232f29662ecfb589199224caecccb5fd038912083/django_simple_deploy-1.1.1.tar.gz",
"platform": null,
"description": "# django-simple-deploy\n\nDeployment, for Djangonauts with deadlines.\n\n## Documentation\n\nThe full documentation for this project is at [Read the Docs](https://django-simple-deploy.readthedocs.io/en/latest/).\n\n## Recent media\n\n[Django Simple Deploy and other DevOps Things](https://talkpython.fm/episodes/show/500/django-simple-deploy-and-other-devops-things) (Episode 500 of Talk Python)\n\nIt was an honor to be the guest on episode 500, that's a fantastic milestone for a podcast! This episode focuses on the state of `django-simple-deploy` as it reached the 1.0 release.\n\n## Quickstart\n\n`django-simple-deploy` gives you a management command that configures your project for an initial deployment. It currently supports deployments to [Fly.io](https://fly.io), [Platform.sh](https://platform.sh), and [Heroku](https://heroku.com). Each platform is supported by an external plugin, which means it's relatively straightforward to build support for additional hosting platforms. A [plugin](https://github.com/django-simple-deploy/dsd-vps) supporting VPS-based deployments is currently in development.\n\nIf you have a Django project that runs locally, you can deploy your project in a few short steps. The only change you'll need to make to your project is to add `django_simple_deploy` to `INSTALLED_APPS`.\n\n\n\nThe above command will deploy your project to Fly.io. To deploy to another platform such as Platform.sh, just install a different plugin when you install `django-simple-deploy`:\n\n```sh\n$ pip install \"django-simple-deploy[platform_sh]\"\n```\n\nAll output is captured and written to a log file stored in `dsd_logs/`, which is placed at the project's root directory.\n\nInstalling a plugin automatically installs `django-simple-deploy`. So for platforms supported by third-party plugins, the only difference is the installation step:\n\n```sh\n$ pip install <dsd-plugin-name>\n# Add django_simple_deploy to INSTALLED_APPS\n$ python manage.py deploy --automate-all\n```\n\nConfiguration-only mode\n---\n\nThe above example uses the `--automate-all` flag, which reduces deployment to three steps. The fully automated mode configures your project, commits changes for you, and pushes your code to the target platform's servers. There's also a configuration-only mode, which lets you inspect the changes made to your project before committing them and making the actual deployment. For a quick example, see the full [Fly.io Quick Start guide](https://django-simple-deploy.readthedocs.io/en/latest/quick_starts/quick_start_flyio/).\n",
"bugtrack_url": null,
"license": null,
"summary": "Deployment, for Djangonauts with deadlines.",
"version": "1.1.1",
"project_urls": {
"Changelog": "https://github.com/django-simple-deploy/django-simple-deploy/blob/main/CHANGELOG.md",
"Documentation": "https://django-simple-deploy.readthedocs.io/en/latest/",
"GitHub": "https://github.com/django-simple-deploy/django-simple-deploy"
},
"split_keywords": [
"django",
" deployment"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "052a48c82b3d0af5c38b5410802f81f8c30d6fd4c2378e6c9a072b5142f77edc",
"md5": "1db3b4a345a43a2f7bf947dbd8021e74",
"sha256": "878d2ee87ba1767c6cab5f29e1a8ded9237cd60a320ad22eeff0b9a337473e52"
},
"downloads": -1,
"filename": "django_simple_deploy-1.1.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "1db3b4a345a43a2f7bf947dbd8021e74",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 25495,
"upload_time": "2025-09-13T14:35:17",
"upload_time_iso_8601": "2025-09-13T14:35:17.467547Z",
"url": "https://files.pythonhosted.org/packages/05/2a/48c82b3d0af5c38b5410802f81f8c30d6fd4c2378e6c9a072b5142f77edc/django_simple_deploy-1.1.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a30fd4c5157097861c6b71d232f29662ecfb589199224caecccb5fd038912083",
"md5": "f11c581788f43b2bab900e448af5c377",
"sha256": "ee20801e937e15c4fe5dab00c8241275a6631ff286e94abb7ebfdb500c2c59fb"
},
"downloads": -1,
"filename": "django_simple_deploy-1.1.1.tar.gz",
"has_sig": false,
"md5_digest": "f11c581788f43b2bab900e448af5c377",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 65115,
"upload_time": "2025-09-13T14:35:18",
"upload_time_iso_8601": "2025-09-13T14:35:18.740491Z",
"url": "https://files.pythonhosted.org/packages/a3/0f/d4c5157097861c6b71d232f29662ecfb589199224caecccb5fd038912083/django_simple_deploy-1.1.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-13 14:35:18",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "django-simple-deploy",
"github_project": "django-simple-deploy",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "asgiref",
"specs": [
[
"==",
"3.8.1"
]
]
},
{
"name": "babel",
"specs": [
[
"==",
"2.17.0"
]
]
},
{
"name": "black",
"specs": [
[
"==",
"25.1.0"
]
]
},
{
"name": "build",
"specs": [
[
"==",
"1.2.2.post1"
]
]
},
{
"name": "certifi",
"specs": [
[
"==",
"2025.1.31"
]
]
},
{
"name": "charset-normalizer",
"specs": [
[
"==",
"3.4.1"
]
]
},
{
"name": "click",
"specs": [
[
"==",
"8.1.8"
]
]
},
{
"name": "colorama",
"specs": [
[
"==",
"0.4.6"
]
]
},
{
"name": "distlib",
"specs": [
[
"==",
"0.3.9"
]
]
},
{
"name": "django",
"specs": [
[
"==",
"5.1.6"
]
]
},
{
"name": "docutils",
"specs": [
[
"==",
"0.21.2"
]
]
},
{
"name": "filelock",
"specs": [
[
"==",
"3.17.0"
]
]
},
{
"name": "ghp-import",
"specs": [
[
"==",
"2.1.0"
]
]
},
{
"name": "griffe",
"specs": [
[
"==",
"1.5.6"
]
]
},
{
"name": "id",
"specs": [
[
"==",
"1.5.0"
]
]
},
{
"name": "idna",
"specs": [
[
"==",
"3.10"
]
]
},
{
"name": "iniconfig",
"specs": [
[
"==",
"2.0.0"
]
]
},
{
"name": "jaraco-classes",
"specs": [
[
"==",
"3.4.0"
]
]
},
{
"name": "jaraco-context",
"specs": [
[
"==",
"6.0.1"
]
]
},
{
"name": "jaraco-functools",
"specs": [
[
"==",
"4.1.0"
]
]
},
{
"name": "jinja2",
"specs": [
[
"==",
"3.1.5"
]
]
},
{
"name": "keyring",
"specs": [
[
"==",
"25.6.0"
]
]
},
{
"name": "markdown",
"specs": [
[
"==",
"3.7"
]
]
},
{
"name": "markdown-it-py",
"specs": [
[
"==",
"3.0.0"
]
]
},
{
"name": "markupsafe",
"specs": [
[
"==",
"3.0.2"
]
]
},
{
"name": "mdurl",
"specs": [
[
"==",
"0.1.2"
]
]
},
{
"name": "mergedeep",
"specs": [
[
"==",
"1.3.4"
]
]
},
{
"name": "mkdocs",
"specs": [
[
"==",
"1.6.1"
]
]
},
{
"name": "mkdocs-autorefs",
"specs": [
[
"==",
"1.3.0"
]
]
},
{
"name": "mkdocs-get-deps",
"specs": [
[
"==",
"0.2.0"
]
]
},
{
"name": "mkdocs-material",
"specs": [
[
"==",
"9.6.3"
]
]
},
{
"name": "mkdocs-material-extensions",
"specs": [
[
"==",
"1.3.1"
]
]
},
{
"name": "mkdocstrings",
"specs": [
[
"==",
"0.28.0"
]
]
},
{
"name": "mkdocstrings-python",
"specs": [
[
"==",
"1.14.6"
]
]
},
{
"name": "more-itertools",
"specs": [
[
"==",
"10.6.0"
]
]
},
{
"name": "mypy-extensions",
"specs": [
[
"==",
"1.0.0"
]
]
},
{
"name": "nh3",
"specs": [
[
"==",
"0.2.20"
]
]
},
{
"name": "packaging",
"specs": [
[
"==",
"24.2"
]
]
},
{
"name": "paginate",
"specs": [
[
"==",
"0.5.7"
]
]
},
{
"name": "pathspec",
"specs": [
[
"==",
"0.12.1"
]
]
},
{
"name": "pipenv",
"specs": [
[
"==",
"2024.4.1"
]
]
},
{
"name": "platformdirs",
"specs": [
[
"==",
"4.3.6"
]
]
},
{
"name": "pluggy",
"specs": [
[
"==",
"1.5.0"
]
]
},
{
"name": "pygments",
"specs": [
[
"==",
"2.19.1"
]
]
},
{
"name": "pymdown-extensions",
"specs": [
[
"==",
"10.14.3"
]
]
},
{
"name": "pyproject-hooks",
"specs": [
[
"==",
"1.2.0"
]
]
},
{
"name": "pytest",
"specs": [
[
"==",
"8.3.4"
]
]
},
{
"name": "python-dateutil",
"specs": [
[
"==",
"2.9.0.post0"
]
]
},
{
"name": "pyyaml",
"specs": [
[
"==",
"6.0.2"
]
]
},
{
"name": "pyyaml-env-tag",
"specs": [
[
"==",
"0.1"
]
]
},
{
"name": "readme-renderer",
"specs": [
[
"==",
"44.0"
]
]
},
{
"name": "regex",
"specs": [
[
"==",
"2024.11.6"
]
]
},
{
"name": "requests",
"specs": [
[
"==",
"2.32.3"
]
]
},
{
"name": "requests-toolbelt",
"specs": [
[
"==",
"1.0.0"
]
]
},
{
"name": "rfc3986",
"specs": [
[
"==",
"2.0.0"
]
]
},
{
"name": "rich",
"specs": [
[
"==",
"13.9.4"
]
]
},
{
"name": "setuptools",
"specs": [
[
"==",
"75.8.0"
]
]
},
{
"name": "six",
"specs": [
[
"==",
"1.17.0"
]
]
},
{
"name": "sqlparse",
"specs": [
[
"==",
"0.5.3"
]
]
},
{
"name": "toml",
"specs": [
[
"==",
"0.10.2"
]
]
},
{
"name": "twine",
"specs": [
[
"==",
"6.1.0"
]
]
},
{
"name": "urllib3",
"specs": [
[
"==",
"2.3.0"
]
]
},
{
"name": "virtualenv",
"specs": [
[
"==",
"20.29.1"
]
]
},
{
"name": "watchdog",
"specs": [
[
"==",
"6.0.0"
]
]
}
],
"lcname": "django-simple-deploy"
}