Wealthfolio logo Wealthfolio
Download
Docs
Proxmox VE

Proxmox VE

Three install paths on Proxmox (community-scripts LXC, Docker inside an LXC, or Docker inside a VM). Pick based on how you already run services.


There are three sensible ways to run Wealthfolio on Proxmox. Pick based on how you already run other services.

ApproachProsCons
LXC via community-scriptsNative execution, lowest overhead, fits the Proxmox idiom (no Docker-in-LXC)Builds from source (~15–25 min on a typical homelab CPU on first install, #563)
Docker inside an LXCFast install (image pull only), easy updatesDocker-in-LXC needs nesting + a couple of LXC tweaks
Docker inside a VMMost isolated, no LXC quirksHigher RAM/CPU overhead than LXC

If you’re already a community-scripts user, stick with the LXC path. If you already run a Docker host VM on Proxmox, just deploy the container there like any other service. See Docker Compose.

The community-scripts project maintains an installer that creates a Debian 13 LXC, installs all dependencies, builds Wealthfolio from source, and registers a systemd service.

Install

Open a shell on the Proxmox host (not inside an existing container) and run:

bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/wealthfolio.sh)"

The script prompts for resources. The defaults are sensible:

ResourceDefaultNotes
OSDebian 13
CPU4 coresUsed heavily during the initial Rust build, can be lowered after.
RAM4096 MBSame: the build is the peak; ~256 MB at runtime.
Disk10 GB
PrivilegedNoUnprivileged container
Port8080Note: the official Docker image uses 8088, this script uses 8080.

When the script finishes:

  • WebUI: http://<lxc-ip>:8080
  • Login credentials: /root/wealthfolio.creds inside the container (pct enter <vmid> then cat ~/wealthfolio.creds)
  • WF_SECRET_KEY is generated for you and persisted in /etc/systemd/system/wealthfolio.service. Back this file up along with /opt/wealthfolio_data/.

Layout inside the LXC

PathPurpose
/opt/wealthfolioSource + built static assets (dist/)
/opt/wealthfolio_data/wealthfolio.dbSQLite database
/usr/local/bin/wealthfolio-serverCompiled server binary
/etc/systemd/system/wealthfolio.serviceSystemd unit (holds env vars including the key)

Updating

Re-run the installer one-liner. The script’s update path pulls the latest release tag, rebuilds, and restarts the service.

Heads-up: long builds. Wealthfolio doesn’t yet ship prebuilt Linux binaries, so each install/update compiles the Rust server from scratch (~15–25 min depending on CPU). Tracked in #563. The Docker paths below avoid this entirely.

2. Docker inside an LXC

If you already run a Docker-host LXC for other services, just add Wealthfolio to it. Otherwise, create a small unprivileged Debian/Ubuntu LXC first.

LXC requirements for Docker

In the LXC’s config (/etc/pve/lxc/<vmid>.conf on the Proxmox host):

features: nesting=1,keyctl=1

Unprivileged containers running storage-driver overlay2 may also need:

lxc.apparmor.profile: unconfined
lxc.cap.drop:

(Drop these only if you understand the security tradeoff. Privileged LXCs sidestep most of this but lose isolation.)

Install Wealthfolio

Inside the LXC, install Docker + Compose, then follow the Docker Compose guide. Quick version:

mkdir -p /opt/wealthfolio && cd /opt/wealthfolio

# Generate secrets
WF_SECRET_KEY=$(openssl rand -base64 32)
apt install -y argon2
WF_AUTH_PASSWORD_HASH=$(printf 'changeme' | argon2 yoursalt16chars! -id -e)

cat > .env <<EOF
WF_SECRET_KEY='${WF_SECRET_KEY}'
WF_AUTH_PASSWORD_HASH='${WF_AUTH_PASSWORD_HASH}'
WF_CORS_ALLOW_ORIGINS=http://$(hostname -I | awk '{print $1}'):8088
EOF
chmod 600 .env

curl -fsSL https://raw.githubusercontent.com/afadil/wealthfolio/main/compose.yml -o compose.yml
docker compose --env-file .env up -d

WebUI: http://<lxc-ip>:8088. Data lives in the wealthfolio-data Docker volume.

3. Docker inside a VM

Same flow as a normal Docker host. Nothing Proxmox-specific. Spin up a Debian/Ubuntu VM, install Docker, and follow Docker or Docker Compose.

This is the right choice if you don’t want to fiddle with LXC nesting or if you’re already running a “docker VM” pattern.

Reverse proxy

For HTTPS and a real domain, see Reverse proxy setup.

Troubleshooting

SymptomFix
LXC install fails near cargo build with OOMBump RAM to 6–8 GB during the build, drop it back after.
Docker container restarts: WF_SECRET_KEY missingThe variable wasn’t picked up. Check .env has single-quoted values.
Login screen rejects the right passwordHash captured a trailing newline (use printf, not echo) or $ chars got eaten.
LXC runs but isn’t reachable on the LANCheck the LXC’s network bridge and firewall; the service binds 0.0.0.0.

Reference