Self-hosted backup automation for databases, websites, servers and cloud infrastructure.
Schedule backups, keep them on 25+ storage destinations or your own disk, and restore with one click.
Status: self-hostable (beta). BackupSheep was a paid SaaS from 2017–2023 serving 6,500+ users. It has been rewritten and open-sourced as a self-hosted application: all SaaS/billing machinery has been removed so you can run it yourself. Licensed under the GNU GPLv3 (see LICENSE).
| Source | Details |
|---|---|
| Websites / files | FTP, FTPS, SFTP, SSH. Include/exclude rules (regex + glob), parallel transfers, all key types (Ed25519/ECDSA/RSA, incl. passphrase-protected), server-side tar transport for SSH sources. |
| Databases | MySQL (bundled Oracle MySQL 8.4 client), MariaDB, PostgreSQL (version-matched pg_dump 14–18). Direct TCP or SSH tunnel, all databases or per-table selection, stored procedures, SSL/TLS. |
| Cloud servers & volumes | DigitalOcean, AWS (EC2, RDS, Lightsail), Hetzner, Vultr, UpCloud, Oracle Cloud, Google Cloud, OVH (CA/EU/US) — provider-native snapshots. |
| SaaS apps | WordPress, Basecamp. |
Tired of re-downloading the whole site every night? Incremental mode mirrors the site into a per-node local snapshot cache — after the first run, only new and changed files cross the network (deletions propagate too). Every backup is still a complete, standalone zip, so restores never depend on a chain. The cache rebuilds automatically when connection or path settings change, and you can reset it from the node page. Or stick with classic Full mode — every file, every time.
Amazon S3, Backblaze B2, Wasabi, Cloudflare R2, DigitalOcean Spaces, Google Cloud Storage, Google Drive, Azure Blob, Dropbox, OneDrive, pCloud, IDrive e2, IBM COS, Oracle, Scaleway, Linode, Vultr, UpCloud, Exoscale, Filebase, IONOS, Leviia, RackCorp, Tencent COS, Alibaba OSS — plus Local Storage: keep backups as plain zip files on the BackupSheep server's own disk (or any bind-mounted path/NFS). Push every backup to several destinations at once.
For Amazon S3 destinations, enable Object Lock governance or compliance retention on every new archive, prevent BackupSheep cleanup from creating misleading delete markers, and designate a protected air-gapped copy that a schedule must successfully validate before it starts. Configure a prefix-scoped lifecycle rule to tier older archives to cold S3 classes, then enter your contracted rates to see projected cost by source and destination. See immutable backups & lifecycle controls.
Select any historical backup and restore it straight from the console:
- Websites — files are pushed back to the server (lftp reverse mirror), optionally
with exact mirror (
--delete) to remove anything that isn't in the backup. - Databases — dumps are imported with the native client, creating databases that no longer exist; works for direct and SSH-tunnel connections.
- Restores are tracked runs with live status and run logs — you always know what happened and when.
- No silent partial backups — every transfer's exit status is verified (lftp,
mysqldump,pg_dump, SSH remote commands); a single failed file fails the run so it retries instead of archiving a gap. - Disk-space preflight — engines check free space against the expected dump size before starting, instead of dying mid-dump.
- Resume-friendly — interrupted transfers continue (
--continue), retries reuse the same backup record, and concurrent runs of the same node are serialized. - Credential hygiene — secrets are encrypted at rest, travel via temp
defaults-extra-file/.pgpass/env instead of process arguments, and are redacted from all run logs. - Proven at scale — verified against sites with 100k+ files and multi-GB databases, with restore-tested zips (every dump is re-imported in CI-style end-to-end runs).
Live dashboard (stat cards, storage usage, recent and upcoming runs, failures needing attention) · schedules (daily/weekly/monthly + cron) with keep-last retention · on-demand backups · backup & restore notifications by email, Slack and Telegram · team accounts with invite links, groups, granular permissions and per-node scoping · account-wide activity log (including sign-in tracking) · REST API for everything the console does · specialized Celery worker queues you can scale independently.
On a fresh Ubuntu 22.04+ or Debian 12+ server, run:
curl -fsSL https://raw.githubusercontent.com/bilal414/backupsheep/main/install.sh | sudo bashThe installer downloads BackupSheep from GitHub, installs Docker Engine with the Compose plugin and Git, generates secure application/database/onboarding secrets, builds the stack, and waits for the app health check. It prints the onboarding URL and token at the end. It detects the public IPv4 address by default; pass your hostname explicitly when you know it:
curl -fsSL https://raw.githubusercontent.com/bilal414/backupsheep/main/install.sh | sudo bash -s -- --domain backups.example.comThe initial install serves plain HTTP on port 8000. Allow that port through your firewall if needed, and put the app behind HTTPS before exposing it publicly. See Production deployment.
DigitalOcean App Platform's deploy button supports only a single service (optionally with a development database), while BackupSheep needs a web process, queue worker, scheduler, database, and broker. Create an Ubuntu 22.04+ or Debian 12+ Droplet, then use the one-command installer. It deploys the complete Docker Compose stack with persistent volumes.
The same complete installer works on fresh Ubuntu 22.04+ or Debian 12+ VMs from AWS, Azure, Google Cloud, Hetzner, Vultr, Akamai/Linode, OVHcloud, Scaleway, UpCloud, and similar providers. The cloud VM guide includes the exact one-command and reusable cloud-init configuration. This is the preferred path for durable local archives and independently scalable worker pools.
The Render Blueprint deploys the web console, one all-queue Celery worker, Beat, managed PostgreSQL, and a private RabbitMQ service with persistent storage. Enter a private onboarding token during setup, then use external object storage for backups—Local Storage is not suitable for this PaaS deployment. See the Render guide for its sizing and worker limitations.
The Heroku button provisions PostgreSQL, CloudAMQP's RabbitMQ Little Lemur plan, and separate web, worker, and Beat processes. Enter an onboarding token and the app's public hostname during setup; use external object storage for backup archives. See the Heroku guide for its limits and production sizing.
Railway requires a published multi-service template before it can issue a Deploy on Railway button. The repository includes the versioned service configurations and exact template publication steps in the Railway guide. It provisions web, worker, Beat, PostgreSQL, and a private RabbitMQ service in one project; use external object storage for backup archives.
You need Docker with the Compose plugin, and git.
git clone <your-fork-or-this-repo-url> backupsheep
cd backupsheep
cp .env_sample .env
# Edit .env and set at least:
# DJANGO_SECRET_KEY -> a long random string (python -c "import secrets; print(secrets.token_urlsafe(64))")
# DB_PASSWORD -> a database password of your choice
# The other defaults already target the bundled db/rabbitmq services.
docker compose up --buildOpen http://localhost:8000/ — the first-run wizard guides you through creating the admin account, email, storage, and your first source.
The app serves plain HTTP on port 8000 and is meant to sit behind your own TLS-terminating reverse proxy in production. Before exposing it, read docs/deployment.md.
flowchart LR
subgraph Sources
A[Website<br/>FTP/SFTP/SSH]
B[Database<br/>MySQL/MariaDB/PostgreSQL]
C[Cloud provider<br/>snapshots]
end
subgraph BackupSheep
D[app<br/>Django console]
E[beat<br/>scheduler]
F[worker-files<br/>worker-database]
G[worker-storage<br/>worker-cloud]
H[(PostgreSQL)]
I[(RabbitMQ)]
end
subgraph Destinations
J[25+ cloud storage<br/>providers]
K[Local Storage<br/>/backups volume]
end
A & B --> F
C --> G
E --> I --> F & G
D --- H
F -->|dump/zip| G
G --> J & K
J & K -.->|one-click restore| F
One Docker image runs as several services so a heavy backup can't starve the web UI: app (gunicorn + WhiteNoise), migrate (one-shot migrations), worker-cloud, worker-database, worker-files, worker-storage, worker-logs, and a singleton beat scheduler — backed by PostgreSQL and RabbitMQ. Technology: Django 6, Celery, Alpine.js + Tailwind CSS. See docs/scaling.md.
| Guide | What's in it |
|---|---|
| Installation | Prerequisites, Docker Compose setup, the .env you must edit |
| DigitalOcean Droplet | Deploy the complete Docker stack with the one-command installer |
| Cloud VMs | One-command/cloud-init deployments on AWS, Azure, Google Cloud, and VM providers |
| Render | Deploy the web, worker, scheduler, PostgreSQL, and private RabbitMQ stack |
| Heroku | Deploy via Heroku Button with PostgreSQL and managed RabbitMQ |
| Railway | Publish the ready-to-configure multi-service Railway deployment template |
| Configuration | Environment-variable reference, incl. BS_LOCAL_STORAGE_PATH |
| Immutable backups & lifecycle | S3 Object Lock, air-gapped copy policy, lifecycle tiering, and cost projections |
| First-run wizard | The 5 setup steps; admin accounts & /django-admin |
| Usage | Sources, storage, schedules, backup modes, retention, restores, dashboard, teams & permissions, notifications, activity log |
| Providers | Every backup source & storage destination, and what each needs |
| Production deployment | HTTPS/reverse proxy, hardening, storage volumes, secrets |
| Scaling & operations | Worker queues, scaling uploads, the beat singleton, multi-host |
| Troubleshooting | Common failures, FAQ, known limitations |
Also: SECURITY.md · CONTRIBUTING.md
BackupSheep is free software under the GNU General Public License v3.0. It comes with no warranty — see LICENSE. You may run, study, modify, and redistribute it under the terms of the GPLv3.