Manual method to back up Supabase Docker self-hosted to another server

* 2 principles:

+ Back up the PostgreSQL database, use pg_basebackup 

+ Copy the STORAGE (MINIO) files, keeping the XATTR attributes intact.



A= Main - IP 11.153.1.3; B= Backup - IP 11.153.1.10

 * Step 0: On server A

postgresql  config pg_hba.conf

#!/bin/bash
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    replication     replicator      11.153.1.10/32         md5

Restart postgresql an query this sql:

CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'mypassword';
 * Step 1:

Copy folder docker supabase from A to B



* Step 2: ssh root no password from server B to server A

2.1. On server A

sudo nano /etc/ssh/sshd_config

 Match Address 192.168.1.10
    PermitRootLogin yes
  

Restart service sshd


2.2. On server B

ssh-keygen -t rsa -b 4096

ssh-copy-id root@11.153.1.3


* Step 3: On server B: crontab -e

0 2 * * * /home/B/postgresql_backup_db/backup_and_copy_week.sh

#!/bin/bash
## ENV
export PGPASSWORD="mypassword"

DAY_OF_WEEK=$(date +"%A")
rm -rf /home/B/postgresql_backup_db/$DAY_OF_WEEK
mkdir /home/B/postgresql_backup_db/$DAY_OF_WEEK
pg_basebackup -h "11.153.1.3" -U replicator -D "/home/B/postgresql_backup_db/$DAY_OF_WEEK" -Ft -z -X stream -P

## minio folder rsync keep xattr: rsync -aX
rm -rf /home/B/postgresql_backup_db/storage
rsync -avzXP root@11.153.1.3:/home/A/supabase/docker/volumes/storage/ /home/B/postgresql_backup_db/storage

* Step 4: When need backup, on server B

#!/bin/bash
rm -rf /home/B/supabase/docker/volumes/db/data/
mkdir /home/B/supabase/docker/volumes/db/data/
tar -xzvf /home/B/postgresql_backup_db/Thursday/base.tar.gz -C /home/B/supabase/docker/volumes/db/data/
tar -xzvf /home/B/postgresql_backup_db/Thursday/pg_wal.tar.gz -C /home/B/supabase/docker/volumes/db/data/pg_wal/
# I don't need: touch /home/B/supabase/docker/volumes/db/data/recovery.signal

rm -rf /home/B/supabase/docker/volumes/storage/
# -a keep all meta of file
cp -ra /home/B/postgresql_backup_db/storage /home/B/supabase/docker/volumes/












Comments