Tools: Essential Guide: I built a database backup tool where even I can't read your backups

Tools: Essential Guide: I built a database backup tool where even I can't read your backups

One thing that never got easier about running a VPS is database backups. Not because it's technically hard. pg_dump exists. Cron exists. The problem is you set it up, forget about it, and six months later you find out it's been silently failing. Or you never set it up at all because you were focused on shipping. I needed backups for my own Postgres database on a VPS. Everything I found was either too complex to set up or required giving a third party access to my data. SimpleBackups and Ottomatik are fine products but they proxy your backup through their servers. That means they can read your data. I didn't want that.So I built PGArchive. You install a small agent on your server with one curl command. The agent runs pg_dump or mysqldump, encrypts the output with AES-256-GCM using a key that only exists on your server, and uploads it directly to your own S3 or Cloudflare R2 bucket. The control plane at pgarchive.com schedules jobs and monitors runs. It never sees your backup files. It never touches your bucket. It only knows that a job ran and whether it succeeded or failed. The encryption key never leaves your server. I literally cannot read your backups even if I wanted to. Most backup tools that offer a "send to your own S3" feature still route the data through their servers first. The backup hits their infrastructure, then gets forwarded to your bucket. That means they have a copy, even if temporarily. PGArchive never has a copy. The bytes go directly from your server to your storage. There is no hop through our infrastructure. A few things I focused on The agent polls outbound every 30 seconds. No inbound ports, no firewall rules. Works on any VPS, home server, or homelab behind NAT. After every backup the agent runs a real pg_restore against the dump in a Docker container to verify it actually works. Not a file size check — an actual restore. Most backup tools skip this. The agent detects your Postgres version and uses the matching pg_dump binary. No version mismatch errors. What I learned building this Zero-knowledge encryption is straightforward to implement but hard to explain to users. Most people's first question is "what if I lose my encryption key?" The answer is your backups are gone forever. That's the tradeoff for data you control completely. The hardest part wasn't the technical implementation. It was convincing developers who already have a cron job set up that visibility and verified restores are worth $6/month. Free tier: one server, one backup job, daily schedule. No credit card required. Templates let you quickly answer FAQs or store snippets for re-use. as well , this person and/or