Self-hosted · open source · pull-based backups

Pull backups
from your VPS fleet

LazyBackup is a self-hosted web app that pulls data from remote servers to the machine running it—via rsync or scp over SSH. Schedule jobs, keep versioned snapshots, and review history from one dashboard. No agents on your VPS, no cloud lock-in.

Direction
Pull
Destination
Local
Auth
SSH keys
lazybackup — deploy & pull

$ docker run -d --name lazybackup \

-p 3000:3000 -v ./backups:/backups \

ghcr.io/ceneka/lazybackup:latest

✓ Dashboard ready at http://localhost:3000

→ Server added: vps.prod (SSH key)

→ Job: vps.prod:/var/www → /backups/mysite · 0 2 * * *

✓ rsync pull complete · 1.2 GB · snapshot 2026-07-08_02-00

Everything you need, nothing you don’t

Remote source → local destination on your LazyBackup host. Trusted self-hosted deployment with no web UI login layer.

Server management

Add, edit, and test VPS connections over SSH. Password auth works for connection tests; SSH keys are required to run backups.

Backup jobs

Define remote source paths, local destinations on the LazyBackup host, cron schedules, exclude patterns, and pre-backup shell commands.

Versioned snapshots

Optional timestamped copies with automatic retention—keep what you need without manual cleanup.

Automated scheduling

In-process cron scheduler runs jobs on time. No external cron daemon or sidecar required.

History & dashboard

Track every run, read logs, and monitor success rates from a single self-hosted dashboard.

See it in action

A clean, self-hosted dashboard to manage servers, jobs, and backup history—no login layer, just your backup host.

lazybackup — dashboard
LazyBackup dashboard with server count, backup status, success rate chart, and recent activity

How it works

LazyBackup runs on your backup machine and pulls files from remote VPS instances into local paths—e.g. /backups/mysite in Docker.

1

Deploy

Run the Docker image or clone the repo and start with Bun on your backup host.

2

Configure

Add remote servers via SSH, then create jobs that pull data to local paths like /backups/mysite.

3

Monitor

LazyBackup runs on schedule, keeps snapshots, and logs every run in the dashboard.

Stack we ship on

Next.js, Bun, SQLite, and rsync—deployed with Docker.

Next.js 15

Web UI

React 19

Components

Tailwind + shadcn

Design

SQLite + Drizzle

Persistence

rsync / scp

Transfers

Bun

Runtime

Open source & live demo

Browse the code on GitHub or try a running instance at lazy.zic.ar.

Get started in minutes

Docker is the recommended path. Mount your SSH keys read-only and a local volume for backup storage.

Docker (recommended)

docker run -d \
  --name lazybackup \
  -p 3000:3000 \
  -v lazybackup_data:/app/data \
  -v ./backups:/backups \
  -v ~/.ssh:/root/.ssh:ro \
  -e DATABASE_URL=file:/app/data/data.db \
  ghcr.io/ceneka/lazybackup:latest

Or run docker compose up -d. Manual setup: git clone, bun install, bun run db:migrate, bun run dev.

Environment variables

DATABASE_URL
default: file:./data.db
PORT
default: 3000
BACKUP_STORAGE_PATH
default: ./backups
SSH_KEYS_PATH
default: ~/.ssh