Guides

Install

ProxDock installs from a public apt repository, with a one-line script that prepares the host first. The binary is static and embeds its own web UI, so there is nothing to install alongside it beyond the system tools it drives: ZFS, Docker and skopeo.

Status: complete. Built and tested for the three platforms below; arm64 is planned but not built.

Supported platforms

One package per release, built from the same source, published to one suite per distribution.

Distribution Codename Suite ZFS
Debian 13 trixie trixie-release From contrib; the module is built on the host by DKMS
Ubuntu 24.04 LTS noble noble-release Prebuilt modules; skopeo comes from universe
Ubuntu 26.04 resolute resolute-release Prebuilt modules; skopeo comes from universe

amd64 only for now.

Install

One command. It checks the architecture and the release, puts ZFS and Docker on the host the way that distribution wants them, adds the repository, and installs ProxDock, so apt upgrade keeps it current afterwards.

wget -qO- https://proxdock.whydoesnothing.work/install.sh | sudo sh

wget is listed first deliberately: a minimal Debian 13 install has wget and no curl, while Ubuntu has both. curl -fsSL <url> | sudo sh works equally well where you have it.

The script is POSIX sh rather than bash, so dash runs it on both distributions. Every step is a function with main on the last line, which means a truncated download does nothing at all rather than executing as far as it got. That is the failure mode that actually matters when the ZFS step is halfway through.

Knobs

All optional, all environment variables. Put them after sudo:

wget -qO- https://proxdock.whydoesnothing.work/install.sh \
  | sudo PROXDOCK_VERSION=0.67.0 sh
Variable Effect
PROXDOCK_VERSION Pin an exact package version
PROXDOCK_REPO Install from a mirror of the repository
PROXDOCK_CHANNEL testing instead of release. The public repository carries release suites only, so this needs a mirror that has the suite

Or do it by hand

Nothing in the installer is magic. Docker should come from Docker's own repository, not the distribution's; the rest is ZFS and two apt commands.

On Debian, ZFS lives in contrib because of the licence, and the module is compiled against your running kernel, which means matching headers, and a reboot if you have upgraded the kernel without one:

apt install zfsutils-linux zfs-dkms zstd skopeo

On Ubuntu the module is prebuilt for each kernel, so there is no compiler and no DKMS wait. But cloud and minimal images often omit the package, and skopeo is in universe:

apt install linux-modules-extra-$(uname -r) zfsutils-linux zstd skopeo

Then the repository. The keyring package's postinst writes the sources file for whichever release you are on, so there is no /etc/apt to hand-edit and no key to place yourself. It is written once and never rewritten.

curl -fsSLO https://packages.whydoesnothing.work/wdnw-archive-keyring.deb
apt install ./wdnw-archive-keyring.deb
apt update && apt install proxdock

After it installs

Installing starts the service and prints the web UI address and a single-use initial password. Sign in with an empty username and that password; the setup wizard takes it from there, and the initial password is invalidated once setup completes.

First run walks the whole wizard with a screenshot of every step.

If there is no ZFS pool yet, the wizard scans the disks and offers to create one on stable by-id names, refusing anything not provably blank. That is why there is no zpool create above: a line here would be a worse version of it, and would invite running it against a disk the wizard would have declined.

Schema migrations are append-only and ship inside the binary, so upgrade every node in a cluster together when a release adds one. The changelog says which releases do.

Locked out

Run this as root on the host itself. It is single-use, good for that node only, and expires after fifteen minutes.

proxdock recovery-password

HTTPS

A node serves a self-signed certificate on first start, replaced by a cluster-CA-issued one once it joins a cluster. Neither is publicly trusted, so a browser will complain until you configure real certificates. See certificates.md.

Where things live

Path What it holds
/etc/apt/sources.list.d/wdnw.sources The repository, written by the keyring package
/etc/proxdock/config.yml Node configuration: listen address, data directory, certificate paths
/var/lib/proxdock Cluster store, Raft log, cluster CA and per-node identity
/var/lib/proxdock/apps Generated Compose files and per-application state
The pool you created One dataset per application; the pool name is yours

PROXDOCK_DATA_DIR overrides the state directory, which is useful for running a second instance locally during development.