Pruvon is a web UI for Dokku. It runs on the Dokku host itself and gives you a browser-based interface for app operations, service management, backups, logs, Docker visibility, and terminal access.
It is not a general-purpose server management panel. Pruvon assumes Dokku, Linux paths, and a service-style deployment on the target host.
Warning
Pruvon is under active development and should be considered early-stage software. If you choose to run it in environments where breakage, rough edges, or incomplete features are a problem, that risk is yours to take.
- Dokku Web UI: Manage apps, services, and operational workflows from the browser
- Database Backups: Run and retain PostgreSQL, MariaDB, MongoDB, and Redis backups through Dokku plugins
- Logs and Terminal Access: Use browser-based logs and terminal sessions over WebSockets
- Docker Visibility: Inspect containers, images, and host resource usage
- Operational Tools: Manage SSH keys, templates, users, and related Dokku tasks
- A Linux host with Dokku already installed
sudoor root access on that hostsystemd,nginx, and Dokku available on the host
The supported production path is the official installer. It does more than copy a binary: it lays out the service, config, logs, cron, sudoers policy, and systemd unit for you.
Install the latest release:
curl -fsSL https://pruvon.dev/install.sh | sudo bashIf curl is not available:
wget -qO- https://pruvon.dev/install.sh | sudo bashInstall a specific release:
curl -fsSL https://pruvon.dev/install.sh | sudo env PRUVON_VERSION=v0.1.0 bashCreate a fresh config with a custom listen address:
curl -fsSL https://pruvon.dev/install.sh | sudo env PRUVON_LISTEN=127.0.0.1:9090 bashPRUVON_LISTEN only applies when the installer creates a new config file. If /etc/pruvon.yml already exists, the installer keeps the existing listen address.
Install or update from a local checkout:
git clone https://github.com/pruvon/pruvon.git
cd pruvon
sudo ./install.shInstall a locally built binary instead of downloading a GitHub release:
make build
sudo env PRUVON_BINARY=builds/pruvon-linux-amd64 ./install.shinstall.sh will:
- download the matching Linux release archive from GitHub Releases unless
PRUVON_BINARYis provided - verify release archives against
checksums.txt - fetch the matching
pruvon.yml.exampleandscripts/cron/pruvon-backupfrom the same tagged source tree unless overrides are provided - install the binary to
/opt/pruvon/pruvon - create
/usr/local/bin/pruvonas a symlink - create the
pruvonservice user and required group memberships - create
/var/lib/pruvon,/var/log/pruvon, and/var/lib/dokku/data/pruvon-backup - create
/etc/pruvon.ymlif it does not exist - generate a random local admin password for a fresh install and store only its bcrypt hash in config
- rotate the bundled example admin password hash if an existing config still contains it
- ensure
/etc/pruvon.ymlis owned by thepruvonservice user with0600permissions so settings changes can be persisted from the UI - install the systemd unit, sudoers policy, daily backup cron script, and logrotate policy
- enable and start the
pruvonsystemd service
Any installer-generated admin password is printed once at the end of installation.
| Path | Purpose |
|---|---|
/etc/pruvon.yml |
Main configuration file |
/opt/pruvon/pruvon |
Installed binary |
/usr/local/bin/pruvon |
Convenience symlink to the installed binary |
/etc/systemd/system/pruvon.service |
systemd unit |
/etc/sudoers.d/pruvon |
Commands the service account may run with sudo |
/etc/cron.daily/pruvon-backup |
Daily backup trigger |
/etc/logrotate.d/pruvon |
Log rotation policy |
/var/log/pruvon/activity.log |
Activity log |
/var/log/pruvon/backup.log |
Backup job log |
/var/lib/dokku/data/pruvon-backup |
Backup archive storage |
install.sh already enables and starts pruvon. After that, normal service operations are done with systemctl and journalctl.
Common commands:
sudo systemctl status pruvon
sudo systemctl start pruvon
sudo systemctl stop pruvon
sudo systemctl restart pruvon
sudo systemctl enable pruvon
sudo systemctl disable pruvon
sudo journalctl -u pruvon -fInspect the installed unit or create an override safely:
sudo systemctl cat pruvon
sudo systemctl edit pruvon
sudo systemctl daemon-reload
sudo systemctl restart pruvonIf you edit /etc/systemd/system/pruvon.service directly or create an override with systemctl edit, run daemon-reload before restarting the service.
On an installed system, the main config file lives at /etc/pruvon.yml.
The installer keeps that file owned by the pruvon service user with 0600 permissions so runtime settings changes can be written back safely.
Top-level sections:
users: Local users, bcrypt password hashes, roles, scoped access, and optional GitHub usernames for SSH key sync.pruvon: Runtime settings such as the bind address.backup: Backup storage, schedule, database types, and retention.dokku: Reserved for future Dokku-specific settings. Leave it as{}.server: Legacy or reserved section. Leave it asnullunless you know you need it.
After editing /etc/pruvon.yml, restart Pruvon:
sudo systemctl restart pruvon
sudo systemctl status pruvonIf you want to rotate the local admin password, generate a new bcrypt hash and replace the admin user's password in /etc/pruvon.yml.
Generate a hash interactively:
NEW_HASH="$(htpasswd -nBC 10 '' | tr -d ':\n')"
printf '%s\n' "$NEW_HASH"Edit the config:
sudoedit /etc/pruvon.ymlExample:
users:
- username: admin
password: "$2a$10$...your-new-hash..."
role: adminApply the change:
sudo systemctl restart pruvonAvoid htpasswd -b ...; it exposes the plain-text password in shell history and process listings.
The standard install creates one daily cron job at /etc/cron.daily/pruvon-backup. That job runs:
pruvon -backup auto -config /etc/pruvon.yml-backup auto does not create separate daily, weekly, and monthly timers. Instead, each daily run chooses exactly one rotation type:
- monthly if today matches
backup.do_monthly - otherwise weekly if today matches
backup.do_weekly - otherwise daily
Key settings in /etc/pruvon.yml:
backup.backup_dir: Where backup archives are writtenbackup.db_types: Which Dokku service types are includedbackup.do_weekly: Weekly rotation day. Use1-6for Monday-Saturday, and0or7for Sunday.backup.do_monthly: Day of month for monthly rotationbackup.keep_daily_days: How many days of daily backups to keepbackup.keep_weekly_num: How many weekly backups to keepbackup.keep_monthly_num: How many monthly backups to keep
Run backups manually when needed:
sudo pruvon -backup auto -config /etc/pruvon.yml
sudo pruvon -backup daily -config /etc/pruvon.yml
sudo pruvon -backup weekly -config /etc/pruvon.yml
sudo pruvon -backup monthly -config /etc/pruvon.ymlThe repository copy is still useful for local development and manual testing, but it is not the recommended production path.
Start from the example config when you are running from source:
cp pruvon.yml.example pruvon.yml
go run ./cmd/app -server -config pruvon.ymlDevelopment requirements:
- Go 1.26+
- A recent
golangci-lintinstallation if you want to runmake lint
Build release artifacts for Dokku hosts:
make buildBuild a host-native development binary if needed:
go build -o pruvon ./cmd/appCommon local verification commands:
make fmt
make vet
make test
make lintmake lint expects a recent golangci-lint installation compatible with the Go toolchain in use.
Create a release locally:
make release VERSION=v0.1.1 PREVIOUS_TAG=v0.1.0This command will:
- regenerate
CHANGELOG.mdfor the target version - create a release commit such as
release: v0.1.1 - build versioned Linux release archives in
dist/ - create and push the git tag
- create the GitHub release and upload the archives plus
checksums.txt
Release prerequisites:
- a clean git working tree
gh auth logincompleted for the target GitHub account- permission to push the current branch and the new tag to
origin
If you want custom GitHub release notes instead of generated changelog text, pass a file path:
make release VERSION=v0.1.1 NOTES_FILE=/absolute/path/to/release-notes.mdRemove the installed service files but keep config, logs, backups, and the service user:
curl -fsSL https://pruvon.dev/uninstall.sh | sudo bashRemove persistent data too:
curl -fsSL https://pruvon.dev/uninstall.sh | sudo bash -s -- --purgeAlso remove the pruvon system user and group:
curl -fsSL https://pruvon.dev/uninstall.sh | sudo bash -s -- --purge --remove-userIf you already have a local checkout, sudo ./uninstall.sh is equivalent.
Default uninstall keeps /etc/pruvon.yml, /var/log/pruvon, and /var/lib/dokku/data/pruvon-backup so an accidental removal does not destroy operational data.
Release notes are generated from commit subjects.
Generate a changelog entry for a release:
make changelog VERSION=0.1.1 PREVIOUS_TAG=v0.1.0If PREVIOUS_TAG is omitted, the generator uses the latest v* tag it can find.
Best results come from commit subjects with a conventional prefix such as:
feat: ...fix: ...docs: ...refactor: ...test: ...chore: ...
These prefixes are grouped into changelog sections like Added, Fixed, Changed, Documentation, Tests, and Maintenance.
Contributions are welcome. See CONTRIBUTING.md.
See SECURITY.md for vulnerability reporting.
Copyright (c) 2026 Pruvon. Licensed under AGPL-3.0.