fallbck

module
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 20, 2026 License: AGPL-3.0

README

fallbck

Application-aware backups for filesystems, databases, Kubernetes, Proxmox VE and Docker hosts, and Microsoft 365, straight into Proxmox Backup Server.

FallBCK is built in Go with an integrated Temporal server for the agent handling/coordination of jobs. All snapshots are saved as plain (or encrypted) PXAR archives in format V1 or V2 (better deduplication, more efficient storage but requires PBS at version 2.5 or later). Everything can be restored from these archives manually using PBS or via the scripts included in the backups themselves.

By design, FallBCK only holds the DatastoreBackup permission which eliminates the risk of connecting it to a PBS instance since it can't touch settings or delete backups or files. Retention policies are configured in and enforced by PBS.

Background

We have been using PBS pretty much since it came out as a beta around 2020, and over time we have built internal tools and workflows to manage all kinds of backups into it. FallBCK is the end product resulting from all of those hours, scripts and manual backups we've done over the last few years. We have one other developer to thank for a lot of the initial work on decoding the first specification, building a whole library around it, getting Windows VSS snapshots to work and much more: @tizbac and their project proxmoxbackupclient_go. If you are looking for a command-line tool similar to proxmox-backup-client (but cross-platform, built in Go), that's the project you want!

After recently showing FallBCK to some former colleagues who expressed an interest in using it, we decided to package it into a more formal project that others can use and contribute to as well, and now that we have reached 1.0.0 we are finally ready to release it to the world.

Features

  • Backup Targets

    • Supports backing up to a PBS datastore or namespace in a datastore
    • Requires only the DatastoreBackup permission for its tokens (and will warn you if you are using a token with higher privileges)
    • Supports both plain and encrypted PXAR archives in format V1 or V2
    • Can be combined with other targets like tizbac's pmoxs3backuproxy to back up straight to any S3-compatible storage
    • Stores files in the original format(s), no proprietary data structures.
  • Agent Features

    • Deployment via Docker Compose, Kubernetes, Package repositories (APK, DEB, RPM, WinGet) or as a standalone binary
    • The agent connects to the server to receive and execute backup jobs, no firewalls have to be opened from server to client
    • Can back up directly to PBS, or via a tunnel via FallBCK to a PBS instance
    • Secure client-side credential storage (databases, kubernetes, ms365) as an option so database credentials never touch the server side
  • Server Features

    • Integrated Temporal server for job coordination
    • Proxy for backup communication in case some clients can't reach PBS server directly
    • Web UI for managing agents, backup jobs, runs and logs
    • Role-based access control for different user permissions
    • OpenID Connect authentication as the standard method for user login (no SSO tax here)
    • Audit logging for tracking user actions and system events
    • Onboarding workflow for new servers/targets

Backup Sources

Kind Type Description Restore Workflow
Filesystem Local Local filesystem backup (Windows, Linux, MacOS) Restore files directly via PBS UI or CLI
Database MariaDB/MySQL Backup of MariaDB/MySQL databases with binary log archival for PITR Restore archive from PBS UI or CLI and run the script included in the backup for automatic restore
Database PostgreSQL Backup of PostgreSQL databases with WAL archival for PITR Restore archive from PBS UI or CLI and run the script included in the backup for automatic restore
Database SQL Server Backup of SQL Server databases with transaction log archival for PITR Restore archive from PBS UI or CLI and run the script included in the backup for automatic restore
Database MongoDB Backup of MongoDB databases with oplog archival for PITR Restore archive from PBS UI or CLI and run the script included in the backup for automatic restore
Virtualization PVE Backup of Proxmox Virtual Environment (PVE) hosts for easier restore during DR (not VM/CT backup or storage backup, PVE handles that by itself just fine) Restore the archive to a freshly installed PVE server and run the included script or copy files manually as needed
Containers Docker Backup of Docker images, containers, volumes, networks and compose definitions Restore archive from PBS UI or CLI and run the script included in the backup for automatic restore, or copy/restore files manually as needed
Containers Kubernetes Backup of Kubernetes API resources, volumes/volume snapshots, cluster state Restore archive from PBS UI or CLI and run the script included in the backup for automatic restore, or copy/restore files manually as needed
Containers Databases Supports application-aware backups of databases inside containers, same databases as above Restore files or archives from PBS UI or CLI and run the script included in the backup for automatic restore, or copy/restore files manually as needed
Cloud Microsoft 365 [Beta] Backup of Microsoft 365 data including Outlook, OneDrive, Sharepoint, Teams and Entra data Saved as much as possible as the native format, automatic restore functionality and documentation is still under active development

LLM Usage

The product itself does not use any AI technologies for any of its functionality. It does not connect to any external services at runtime except for PBS and whatever workload you choose to use it to back up (e.g. Microsoft 365).

During the course of the project, and for ongoing maintenance, AI coding assistants have been used to help with code generation, refactoring, combination of various scripts, review of our code and other development tasks. All AI-generated suggestions have been reviewed and approved by the development team before being included in the project.

📖 Docs: https://osshield.github.io/fallbck/

Quick start (with PBS included)

You can run our demo instance from the compose.yml in the demo directory. It will set up FallBCK, register a single agent in a container, connect to an ephemeral (single-use) PBS instance and allow you to click around and see the functionality without any risk to your existing environment.

Quick start (local, no login)

If you want to set up a fresh instance, use the compose file in the deploy directory instead. Do note that PBS provides no functionality for username/password login, and requires an OpenID Connect server to handle authentication. It can also be switched off entirely.

cd deploy
docker compose -f docker-compose.yml -f compose.dev.yml up -d   # postgres + fallbck-server, admin login off (dev only)
open http://localhost:8080            # Web UI; Temporal UI at http://localhost:8080/temporal/

Enroll the example agent container:

TOKEN=$(curl -s -X POST http://localhost:8080/api/v1/tokens -H 'Content-Type: application/json' -d '{"name":"compose-agent"}' | jq -r .raw_token)
FALLBCK_AGENT_ENROLLMENT_KEY=$TOKEN docker compose --profile agent up -d

For a real install (TLS, SSO, reverse proxy), see Production install.

Hacking on it

go build ./... && go test ./...

More in Development. The docs source is in docs/.

Roadmap

Easier restore functionality

The plan is to provide a more user-friendly restore tool (likely a standalone CLI), which will simplify the process of restoring backups and data from PBS back into the respective source.

Backup Sources

These are the future backup sources that are currently planned. If you miss any, feel free to open an issue or contribute with a pull request:

  • VCS (Github, Gitlab, Gitea, Forgejo, etc.)
  • Cloud storage (via RClone, so all/most supported providers)
  • Google Workspace (Gmail, Drive, Calendar, Contacts, etc.)
  • Build a better, responsive UI for the web interface
  • Other hypervisors
    • Here I need some community feedback on what would be the most useful. We only use proxmox in-house.
Better integration with Proxmox Backup Server

Once PBS supports a plugin system, we plan to integrate parts of or the entire backup workflow directly into PBS.

Directories

Path Synopsis
cmd
fallbck-agent command
fallbck-ctl command
fallbck-k8s-agent command
fallbck-k8s-agent backs up a Kubernetes cluster (API resources + PVC data) to Proxmox Backup Server through the FallBCK server.
fallbck-k8s-agent backs up a Kubernetes cluster (API resources + PVC data) to Proxmox Backup Server through the FallBCK server.
fallbck-server command
pkg
agent/backup
Package backup runs filesystem backups from the agent into Proxmox Backup Server with gopbs, over a session the FallBCK server opened on the agent's behalf.
Package backup runs filesystem backups from the agent into Proxmox Backup Server with gopbs, over a session the FallBCK server opened on the agent's behalf.
agent/credstore
Package credstore is the agent's encrypted store for database credential profiles.
Package credstore is the agent's encrypted store for database credential profiles.
agent/dbbackup
Package dbbackup executes database backups on fallbck-agent (and, through the db-worker mode, inside kubernetes dump pods): it detects the client tools, checks the server, dumps into a spool directory, writes the manifest and hands the spool to the pxar upload engine.
Package dbbackup executes database backups on fallbck-agent (and, through the db-worker mode, inside kubernetes dump pods): it detects the client tools, checks the server, dumps into a spool directory, writes the manifest and hands the spool to the pxar upload engine.
agent/dockerbackup
Package dockerbackup runs Docker host backups from the filesystem agent: it collects container, network, volume and image definitions plus compose files into a spool directory, archives them together with every named volume, and generates a restore runbook.
Package dockerbackup runs Docker host backups from the filesystem agent: it collects container, network, volume and image definitions plus compose files into a spool directory, archives them together with every named volume, and generates a restore runbook.
agent/enrollment
Package enrollment registers an agent with the FallBCK server using a one-time token
Package enrollment registers an agent with the FallBCK server using a one-time token
agent/k8sbackup
Package k8sbackup implements the Kubernetes backup agent: API resource dumps, PVC snapshots/clones, worker-pod supervision and the Secret-backed identity.
Package k8sbackup implements the Kubernetes backup agent: API resource dumps, PVC snapshots/clones, worker-pod supervision and the Secret-backed identity.
agent/m365
Package m365 executes Microsoft 365 backup jobs on the agent: it talks to Microsoft Graph, keeps a per-unit index of what the previous snapshot held, presents each user, site or team as a virtual tree whose unchanged items are never fetched, and uploads one snapshot per unit through the shared backup engine.
Package m365 executes Microsoft 365 backup jobs on the agent: it talks to Microsoft Graph, keeps a per-unit index of what the previous snapshot held, presents each user, site or team as a virtual tree whose unchanged items are never fetched, and uploads one snapshot per unit through the shared backup engine.
agent/pvebackup
Package pvebackup runs Proxmox VE host backups from the filesystem agent: it collects the node's configuration and inventory into a spool directory, archives it together with /etc, /root and optional data paths, and generates a restore runbook.
Package pvebackup runs Proxmox VE host backups from the filesystem agent: it collects the node's configuration and inventory into a spool directory, archives it together with /etc, /root and optional data paths, and generates a restore runbook.
agent/runtime
Package runtime is the shared daemon skeleton of the fallbck agents: configuration lookup and self-enrollment, the Temporal client and PBS tunnel connections through the server gateway, the activity worker, and the heartbeat / token-rotation loop.
Package runtime is the shared daemon skeleton of the fallbck agents: configuration lookup and self-enrollment, the Temporal client and PBS tunnel connections through the server gateway, the activity worker, and the heartbeat / token-rotation loop.
agent/vss
Package vss backs Windows backups with Volume Shadow Copies: every volume a job's paths live on is snapshotted, the shadow copy is exposed through a directory symlink under the agent's data directory, and the job's paths are remapped onto it so open and locked files are read from a consistent point in time.
Package vss backs Windows backups with Volume Shadow Copies: every volume a job's paths live on is snapshotted, the shadow copy is exposed through a directory symlink under the agent's data directory, and the job's paths are remapped onto it so open and locked files are read from a consistent point in time.
agenthealth
Package agenthealth derives the alerts the agent status page shows from what the server already knows: heartbeats, the inventory summary, the agent's jobs and their newest runs, and the server version.
Package agenthealth derives the alerts the agent status page shows from what the server already knows: heartbeats, the inventory summary, the agent's jobs and their newest runs, and the server version.
agentupdate
Package agentupdate mirrors the fallbck-agent release of the server's own version for agents that update themselves.
Package agentupdate mirrors the fallbck-agent release of the server's own version for agents that update themselves.
api
audit
Package audit keeps the audit log bounded: a daily prune deletes entries older than the retention, after handing them to the configured export so they still exist somewhere.
Package audit keeps the audit log bounded: a daily prune deletes entries older than the retention, after handing them to the configured export so they still exist somewhere.
db
dbbackup
Package dbbackup holds the database backup job specification, agent-side credential profiles and the run manifest.
Package dbbackup holds the database backup job specification, agent-side credential profiles and the run manifest.
dockerbackup
Package dockerbackup holds the Docker host backup job specification, the agent-side settings and the run manifest.
Package dockerbackup holds the Docker host backup job specification, the agent-side settings and the run manifest.
fsutil
Package fsutil holds the small filesystem helpers shared by the agents (tree copies for spooling and migration) and by the job specs (archive entry names).
Package fsutil holds the small filesystem helpers shared by the agents (tree copies for spooling and migration) and by the job specs (archive entry names).
gateway
Package gateway exposes a narrow, authenticated slice of the Temporal WorkflowService to backup agents on the server's public port.
Package gateway exposes a narrow, authenticated slice of the Temporal WorkflowService to backup agents on the server's public port.
inventory
Package inventory is what an agent knows about its host and reports to the server: a compact Summary every few minutes with the heartbeat, and the full Detail on demand (the status page's Refresh).
Package inventory is what an agent knows about its host and reports to the server: a compact Summary every few minutes with the heartbeat, and the full Detail on demand (the status page's Refresh).
k8sbackup
Package k8sbackup holds the Kubernetes backup job specification (backup_jobs.k8s_config), the discovery plan exchanged between server and agent, and the run manifest.
Package k8sbackup holds the Kubernetes backup job specification (backup_jobs.k8s_config), the discovery plan exchanged between server and agent, and the run manifest.
m365
Package m365 holds the Microsoft 365 backup job specification, the tenant (Entra app registration) model, the Graph credential flow and the run manifest.
Package m365 holds the Microsoft 365 backup job specification, the tenant (Entra app registration) model, the Graph credential flow and the run manifest.
pbs
Package pbs holds the server's Proxmox Backup Server helpers: API token parsing, key files and the token permission check.
Package pbs holds the server's Proxmox Backup Server helpers: API token parsing, key files and the token permission check.
proxy
Package proxy carries agents' Proxmox Backup Server sessions through the FallBCK server.
Package proxy carries agents' Proxmox Backup Server sessions through the FallBCK server.
proxy/pbstest
Package pbstest is a minimal fake Proxmox Backup Server for tests: it accepts the backup-protocol upgrade over TLS and implements the session endpoints gopbs uses (dynamic index create/append/close, chunk and blob upload, previous, finish).
Package pbstest is a minimal fake Proxmox Backup Server for tests: it accepts the backup-protocol upgrade over TLS and implements the session endpoints gopbs uses (dynamic index create/append/close, chunk and blob upload, previous, finish).
pvebackup
Package pvebackup holds the Proxmox VE host backup job specification and run manifest.
Package pvebackup holds the Proxmox VE host backup job specification and run manifest.
releasesig
Package releasesig verifies that a release's checksums file carries a valid Sigstore (cosign keyless) signature from this project's GitHub release workflow, and looks artifacts up in that signed file.
Package releasesig verifies that a release's checksums file carries a valid Sigstore (cosign keyless) signature from this project's GitHub release workflow, and looks artifacts up in that signed file.
rundetail
Package rundetail holds the type-specific detail blob stored per backup run (backup_runs.details) and rendered on the run detail page.
Package rundetail holds the type-specific detail blob stored per backup run (backup_runs.details) and rendered on the run detail page.
secrets
Package secrets seals the server's stored secrets (PBS API tokens, backup encryption keys) with a master key held outside the database, so a database dump alone does not expose them.
Package secrets seals the server's stored secrets (PBS API tokens, backup encryption keys) with a master key held outside the database, so a database dump alone does not expose them.
temporal/activities
Package activities defines the activities executed by the client backup agent.
Package activities defines the activities executed by the client backup agent.
temporal/embedded
Package embedded runs the Temporal server in-process inside fallbck-server.
Package embedded runs the Temporal server in-process inside fallbck-server.
temporal/scheduler
Package scheduler keeps one Temporal Schedule per backup job with a cron expression.
Package scheduler keeps one Temporal Schedule per backup job with a cron expression.
temporal/ui
Package ui embeds the Temporal Web UI (temporalio/ui-server) in fallbck-server.
Package ui embeds the Temporal Web UI (temporalio/ui-server) in fallbck-server.
tokencheck
Package tokencheck keeps an eye on the PBS API tokens of backup targets: each one should hold Datastore.Backup within its datastore and nothing else.
Package tokencheck keeps an eye on the PBS API tokens of backup targets: each one should hold Datastore.Backup within its datastore and nothing else.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL