Introduction

Get started with Joulenap

Joulenap is a self-hosted web UI + scheduler that runs your Proxmox VE backups to a Proxmox Backup Server that stays powered off — waking it only when it's time, then putting it back to sleep.

What it is

A dedicated Proxmox Backup Server (PBS) is the right way to keep backups on separate hardware — the 3-2-1 rule. But a backup job runs for a few minutes a night, and leaving a second machine powered on 24/7 wastes energy. Proxmox's built-in scheduled backups assume the target is always reachable, so they can't drive a “wake, back up, sleep” cycle.

Joulenap is the missing piece: a small always-on service on your LAN that owns its own schedule, wakes the PBS over Wake-on-LAN at the scheduled time, runs the backup, applies retention and garbage collection, powers the PBS back down, and notifies you. Every run is logged step by step, can be stopped mid-flight, and can feed your homelab dashboard or Grafana. The name says it — a joule saved, while your backup server takes a nap. 💤

How it works with Proxmox

It talks to Proxmox VE and PBS through their APIs (using scoped tokens) and uses a single SSH command only for the PBS power-off, which has no API. Crucially, it modifies nothing on your Proxmox host — no cron, no systemd timers, no scripts on the node. Everything lives in one small container or LXC you run beside Proxmox.

How the nightly cycle works

At the scheduled time, Joulenap runs the whole cycle end to end and logs every step:

  1. Wake

    Sends a Wake-on-LAN magic packet to the sleeping PBS on your LAN.

  2. Wait

    Polls the PBS until it's reachable, with retries and a timeout — if it never comes up, the run aborts and notifies you.

  3. Back up

    Triggers vzdump via the PVE API for the guests you selected, to the PBS storage, and follows the task to completion.

  4. Prune, GC & verify

    Applies your retention policy and, if enabled, runs garbage collection and a quick verify of the new backups while the PBS is awake. A scheduled full-verify cycle is available too.

  5. Power off

    On success, SSHes a clean shutdown to the PBS. On failure it leaves the box on so you can inspect it.

  6. Notify

    Sends the result — success or failure, with durations and sizes — on your chosen channels. If a backup window passed while Joulenap was down, or a run was interrupted, you're told at the next startup — the PBS is never silently left powered on.

What you'll need

You don't need to prepare API tokens or SSH keys by hand — the built-in setup wizard can create scoped tokens and install the poweroff key for you.

A note on security

Joulenap can trigger backups and power machines on and off, so treat it as privileged. It's designed to run on a trusted LAN/VPN, behind its login — not on the public internet. It prefers scoped API tokens over root passwords; if root credentials are supplied during setup, they're used once to provision a scoped token and then discarded. Secrets live only in the container's data directory, never in the repo.