Deploys Django, Flask and FastAPI applications as per-domain systemd services and manages the Python interpreters available on the server. A deploy writes a systemd unit that runs gunicorn (WSGI), a uvicorn worker (ASGI/FastAPI) or daphne (Django Channels) from the app's virtualenv as a chosen Linux user, picks a free port if none is given, and configures the reverse proxy in front of it — nginx, Apache2 or OpenLiteSpeed. The unit can be previewed before it is written, and the WSGI/ASGI module can be auto-detected from the project directory.
Virtualenv handling is part of the plugin: it reports venv status, creates one, installs packages or applies a requirements.txt, and lists what is installed. A bootstrap action creates the venv and a minimal project skeleton for the chosen framework in one step, patching Django's ALLOWED_HOSTS with the site's hostnames, which is what the website create form uses. The interpreter manager works like the PHP-FPM version picker: it lists installed Python versions, installs additional ones via install_version.sh, removes them (the system default is protected), and each app records the version its venv was built from.
Deployed apps can be started, stopped, restarted and reloaded, and their journal logs read from the panel. Web rules per site cover static and media aliases and a directory-indexing toggle, written into the web server config. A website_deleting hook stops and removes an app's unit before its website is torn down, and because actions carry the domain, the action API resolves that site's node and runs the venv build there instead of on the panel.
Deploy and everything that mutates are admin-only; tenants may only list available Python versions. Uninstalling the plugin deliberately leaves deployed services running — removing the tooling should not take a live site offline, so apps must be removed individually first.
Use VinzaPanel's REST API to download and install this app programmatically.
POST /plugins/api/download/python-deploy/ Content-Type: application/json { "panel_version": "1.0.0" }
{
"success": true,
"plugin_id": "python-deploy",
"version": "1.0.17",
"download_url": "..."
}