Best self-hosted backup solution through Docker?

I run my homeserver on Ubuntu 22.04 LTS and all software I run is containerized in Docker. What would you recommend for a backup solution for critical folders? I’d like to keep it containerized if possible.

I have around ~100G now, but that’ll keep on increasing. I’d prefer weekly/fortnightly backups.

I run Duplicati now (encrypting my content and storing it in Backblaze B2), but I’ve heard it can be kinda unreliable, especially due to DB corruption. People recommend Duplicacy a lot, but it’s a paid subscription, and I really don’t want a subscription. I might be willing to pay for a one-time purchase, though.

I’ve been looking at Kopia and Borg for now, but I’d be curious about what all of you (undoubtedly more knowledgable than me) think.

Would appreciate advice on this!

… especially due to DB corruption…

I assume you mean sqlite and similar randomly written files end up not self-consistent when sequentially copied in the middle of the write.

Are you using timeshift or snapper ? … if backup from a (at the time read only) snapshot, everything in that snapshot would be consistent and you can use whatever software solution you want.

Personally, I upload whole system snapshots into rclone (sometimes incremental, sometimes everything), but I don’t backup large replaceable media.

I don’t really do much container-wise for backups.

1 Like

There’s a couple different options you have depending on your needs.

Stop services, dump the data, copy the dump to offsite.

Heavily in-flight data (I.E cannot stop service):

  • real time replication
  • filesystem level snapshots
  • if running under a hypervisor, perform entire disk snapshots

Seeing as how you just run the one server the simplest thing I can think of that would maintain data consistency is to write a bash script, called via cron, to stop containers, backup the data to a tarball, start services, and then rclone the tarball.

1 Like

for SQL database backups, I typically backup the db dumps, usually on a crontab. Whatever the command is for your db type, there’s usually a “dump” command that can spit out raw SQL and/or csv formatted outputs.

not exactly what i think you wanted but maybe worth considering

also with Django in particular there’s extra JSON format dumping available via django itself in case you are using that