Joulenap
Proxmox VE · Backup Server · Wake-on-LAN

Your backup servers sleep.
Joulenap wakes them, backs up, tucks them back in.

A self-hosted scheduler for any number of Proxmox hosts and backup servers — each one powered off until a route needs it.

Open-source · AGPL-3.0 · runs on ~512 MB RAM

Joulenap dashboard: the backup map of Proxmox hosts and backup servers, the routes between them, and the run history This is the real UI — open the live demo →

Routes

You draw the routes. Joulenap runs them.

A route is one scheduled flow of backup data between your machines — sources, a target, its own time, its own retention. List each Proxmox host and each backup server once, then wire them together however your setup actually looks.

Backup02:00 · every day
pve-alphapve-beta pbs-01

One or more Proxmox hosts into a backup server. Several hosts can fan into one — they share the wake window, so the box comes up once for all of them.

Sync05:00 · Sundays
pbs-01 pbs-02

One backup server into another, pull or push — a genuine off-site second copy, on a box that only wakes for the sync and sleeps again after.

Externalon its own schedule
pbs-03 watched

For setups already scheduled natively on Proxmox. Joulenap starts nothing: it wakes the box, watches the jobs PVE and PBS run themselves, and powers it off once they go quiet.

Verify03:00 · 1st of the month
pbs-01 checked

Checks that what is already stored can still be restored — worth knowing before you need it, and it costs one wake.

Every backup server keeps its own credentials, wake-up settings and power-off method — including ones you leave powered on all the time.

Get running

One command. No files to download.

The container creates its own config on first boot — you finish setup in the browser. Guided wizards add each Proxmox host and each backup server, and can create the scoped API tokens and install the power-off key for you.

Full install guide
root@proxmox-lxc: ~
# pull & run — Docker grabs the image from Docker Hub
docker run -d --name joulenap \
  --restart unless-stopped \
  --network host \
  -e TZ=Etc/UTC \
  -v /opt/joulenap/data:/app/data \
  catubba/joulenap:latest

# → open http://<your-ip>:8080 and run the setup wizard
1 Create a small LXC 2 Install Docker 3 Run the command 4 Open the wizard
When a route runs

Off by default. Awake only when it matters.

Joulenap owns its own schedule and drives the whole cycle over the Proxmox APIs — nothing on your Proxmox hosts is modified.

01

Wake

A magic packet to every backup server the route touches, then waits for each to answer.

02

Run

Back up, sync, verify — or just watch, if the servers schedule themselves. Then retention and GC.

03

Power off

A clean shutdown, once nothing else still needs the box.

04

Notify

Success or failure on your channel, naming the route it was.

What you get

A friendly UI around a job you'd otherwise script by hand.

Queue + power lease

One run at a time, the rest queued — and a server stays awake between two runs that both need it, instead of being woken twice.

Wake-on-LAN

Wakes each backup server itself, waits for it to be ready, and retries on a timeout. Boxes you keep always on are supported too.

Per-source guest selection

Pick the CTs and VMs per Proxmox host — all of them, new ones included automatically, or an explicit list resolved live at backup time.

Retention + GC + verify

Keep last/daily/weekly/monthly/yearly, garbage collection, and optional verify — per route, while the box is awake.

Notifications

Telegram, ntfy, email, Discord and 100+ more via Apprise — on success or failure, naming the route.

Live log + manual runs

Watch real vzdump/GC output stream, run any route on demand — or a one-off GC or verify on a single box. Stop a stuck run and it's cancelled on the Proxmox side too.

Run history

Every run broken down into steps — wake, backup, GC, verify, power off — with durations, outcomes and logs, per route.

Dashboards & metrics

Status on Homepage, Homarr, Dashy or Glance via a read-only API, plus Prometheus metrics for Grafana, labelled per route and per server. Scraping never wakes a box.

Private by design

No outbound requests, self-hosted fonts, update check strictly opt-in. English + Italian, dark & light, works on your phone.

Why it exists

Second machines on 24/7 for jobs that run a few minutes a night.

A dedicated backup server is the right way to keep backups on separate hardware — the 3-2-1 rule. But leaving it running around the clock burns power for nothing, and Proxmox's built-in schedules assume the target is always reachable, so they can't drive a wake-then-sleep cycle. Nor can they drive one for a second backup server that only comes up once a week to take an off-site copy.

Joulenap fills that gap: a joule saved, while your backup servers take a nap. 💤

~23 h/day
powered off, in a typical nightly setup

Always-on PBS24 h/day
With Joulenap~1 h/day awake
Backups keptidentical

Illustrative — actual savings depend on your backup window & hardware.