Backup: Add optional MariaDB (#706)

This commit is contained in:
d11n 2022-10-18 20:33:15 +02:00 committed by GitHub
parent b944945fb2
commit 592210e941
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 93 additions and 26 deletions

View File

@ -28,10 +28,10 @@ fi
. "$BASH_PROFILE_SCRIPT" . "$BASH_PROFILE_SCRIPT"
docker_dir=$(docker volume inspect generated_btcpay_datadir --format="{{.Mountpoint}}" | sed -e "s%/volumes/.*%%g") docker_dir=$(docker volume inspect generated_btcpay_datadir --format="{{.Mountpoint}}" | sed -e "s%/volumes/.*%%g")
dbdump_name=postgres.sql.gz postgres_dump_name=postgres.sql.gz
btcpay_dir="$BTCPAY_BASE_DIRECTORY/btcpayserver-docker" btcpay_dir="$BTCPAY_BASE_DIRECTORY/btcpayserver-docker"
backup_dir="$docker_dir/volumes/backup_datadir/_data" backup_dir="$docker_dir/volumes/backup_datadir/_data"
dbdump_path="$docker_dir/$dbdump_name" postgres_dump_path="$docker_dir/$postgres_dump_name"
backup_path="$backup_dir/backup.tar.gz" backup_path="$backup_dir/backup.tar.gz"
# ensure backup dir exists # ensure backup dir exists
@ -42,31 +42,50 @@ fi
cd $btcpay_dir cd $btcpay_dir
. helpers.sh . helpers.sh
dbcontainer=$(docker ps -a -q -f "name=postgres_1") # Postgres database
if [ -z "$dbcontainer" ]; then postgres_container=$(docker ps -a -q -f "name=postgres_1")
if [ -z "$postgres_container" ]; then
printf "\n" printf "\n"
echo " Database container is not up and running. Starting BTCPay Server …" echo " Postgres container is not up and running. Starting BTCPay Server …"
docker volume create generated_postgres_datadir docker volume create generated_postgres_datadir
docker-compose -f $BTCPAY_DOCKER_COMPOSE up -d postgres docker-compose -f $BTCPAY_DOCKER_COMPOSE up -d postgres
printf "\n" printf "\n"
dbcontainer=$(docker ps -a -q -f "name=postgres_1") postgres_container=$(docker ps -a -q -f "name=postgres_1")
if [ -z "$dbcontainer" ]; then if [ -z "$postgres_container" ]; then
echo "🚨 Database container could not be started or found." echo "🚨 Postgres container could not be started or found."
exit 1 exit 1
fi fi
fi fi
printf "\n" printf "\n"
echo " Dumping database …" echo " Dumping Postgres database …"
{ {
docker exec $dbcontainer pg_dumpall -c -U postgres | gzip > $dbdump_path docker exec $postgres_container pg_dumpall -c -U postgres | gzip > $postgres_dump_path
echo "✅ Database dump done." echo "✅ Postgres database dump done."
} || { } || {
echo "🚨 Dumping failed. Please check the error message above." echo "🚨 Dumping Postgres database failed. Please check the error message above."
exit 1 exit 1
} }
# Optional: MariaDB database
mariadb_container=$(docker ps -a -q -f "name=mariadb_1")
if [ ! -z "$mariadb_container" ]; then
mariadb_dump_name=mariadb.sql.gz
mariadb_dump_path="$docker_dir/$mariadb_dump_name"
# MariaDB container exists and is running - dump it
printf "\n"
echo " Dumping MariaDB database …"
{
docker exec $mariadb_container mysqldump -u root -pwordpressdb -A --add-drop-database | gzip > $mariadb_dump_path
echo "✅ MariaDB database dump done."
} || {
echo "🚨 Dumping MariaDB database failed. Please check the error message above."
exit 1
}
fi
# BTCPay Server backup
printf "\n Stopping BTCPay Server …\n\n" printf "\n Stopping BTCPay Server …\n\n"
btcpay_down btcpay_down
@ -85,12 +104,13 @@ echo " Archiving files in $(pwd)…"
--exclude="volumes/generated_litecoin_datadir/_data/chainstate" \ --exclude="volumes/generated_litecoin_datadir/_data/chainstate" \
--exclude="volumes/generated_litecoin_datadir/_data/indexes" \ --exclude="volumes/generated_litecoin_datadir/_data/indexes" \
--exclude="volumes/generated_litecoin_datadir/_data/debug.log" \ --exclude="volumes/generated_litecoin_datadir/_data/debug.log" \
--exclude="volumes/generated_mariadb_datadir" \
--exclude="volumes/generated_postgres_datadir" \ --exclude="volumes/generated_postgres_datadir" \
--exclude="volumes/generated_electrumx_datadir" \ --exclude="volumes/generated_electrumx_datadir" \
--exclude="volumes/generated_lnd_bitcoin_datadir/_data/data/graph" \ --exclude="volumes/generated_lnd_bitcoin_datadir/_data/data/graph" \
--exclude="volumes/generated_clightning_bitcoin_datadir/_data/lightning-rpc" \ --exclude="volumes/generated_clightning_bitcoin_datadir/_data/lightning-rpc" \
--exclude="**/logs/*" \ --exclude="**/logs/*" \
-cvzf $backup_path $dbdump_name volumes/generated_* -cvzf $backup_path $postgres_dump_name $mariadb_dump_name volumes/generated_*
echo "✅ Archive done." echo "✅ Archive done."
if [ ! -z "$BTCPAY_BACKUP_PASSPHRASE" ]; then if [ ! -z "$BTCPAY_BACKUP_PASSPHRASE" ]; then
@ -122,6 +142,6 @@ cd $btcpay_dir
btcpay_up btcpay_up
printf "\n Cleaning up …\n\n" printf "\n Cleaning up …\n\n"
rm $dbdump_path rm $postgres_dump_path
printf "✅ Backup done => $backup_path\n\n" printf "✅ Backup done => $backup_path\n\n"

View File

@ -28,7 +28,7 @@ fi
# preparation # preparation
docker_dir=$(docker volume inspect generated_btcpay_datadir --format="{{.Mountpoint}}" | sed -e "s%/volumes/.*%%g") docker_dir=$(docker volume inspect generated_btcpay_datadir --format="{{.Mountpoint}}" | sed -e "s%/volumes/.*%%g")
restore_dir="$docker_dir/volumes/backup_datadir/_data/restore" restore_dir="$docker_dir/volumes/backup_datadir/_data/restore"
dbdump_name=postgres.sql.gz postgres_dump_name=postgres.sql.gz
btcpay_dir="$BTCPAY_BASE_DIRECTORY/btcpayserver-docker" btcpay_dir="$BTCPAY_BASE_DIRECTORY/btcpayserver-docker"
# ensure clean restore dir # ensure clean restore dir
@ -54,8 +54,8 @@ echo " Extracting files in $(pwd) …"
tar -xvf $backup_path -C $restore_dir tar -xvf $backup_path -C $restore_dir
# basic control checks # basic control checks
if [ ! -f "$dbdump_name" ]; then if [ ! -f "$postgres_dump_name" ]; then
printf "\n🚨 $dbdump_name does not exist.\n\n" printf "\n🚨 $postgres_dump_name does not exist.\n\n"
exit 1 exit 1
fi fi
@ -64,6 +64,10 @@ if [ ! -d "volumes" ]; then
exit 1 exit 1
fi fi
if [ -f "mariadb.sql.gz" ]; then
mariadb_dump_name=mariadb.sql.gz
fi
cd $btcpay_dir cd $btcpay_dir
. helpers.sh . helpers.sh
@ -82,6 +86,9 @@ cd $restore_dir
cp -r volumes/* $docker_dir/volumes/ cp -r volumes/* $docker_dir/volumes/
# ensure datadirs excluded in backup exist # ensure datadirs excluded in backup exist
mkdir -p $docker_dir/volumes/generated_postgres_datadir/_data mkdir -p $docker_dir/volumes/generated_postgres_datadir/_data
if [ ! -z "$mariadb_dump_name" ]; then
mkdir -p $docker_dir/volumes/generated_mariadb_datadir/_data
fi
echo "✅ Volume restore done." echo "✅ Volume restore done."
} || { } || {
echo "🚨 Restoring volumes failed. Please check the error message above." echo "🚨 Restoring volumes failed. Please check the error message above."
@ -91,40 +98,80 @@ cd $restore_dir
exit 1 exit 1
} }
# Start Postgres database
{ {
printf "\n Starting database container …\n" printf "\n Starting Postgres database container …\n"
docker-compose -f $BTCPAY_DOCKER_COMPOSE up -d postgres docker-compose -f $BTCPAY_DOCKER_COMPOSE up -d postgres
sleep 10 sleep 10
dbcontainer=$(docker ps -a -q -f "name=postgres") postgres_container=$(docker ps -a -q -f "name=postgres_1")
if [ -z "$dbcontainer" ]; then if [ -z "$postgres_container" ]; then
echo "🚨 Database container could not be started or found." echo "🚨 Postgres database container could not be started or found."
printf "\n Restarting BTCPay Server …\n\n" printf "\n Restarting BTCPay Server …\n\n"
cd $btcpay_dir cd $btcpay_dir
btcpay_up btcpay_up
exit 1 exit 1
fi fi
} || { } || {
echo "🚨 Starting database container failed. Please check the error message above." echo "🚨 Starting Postgres database container failed. Please check the error message above."
printf "\n Restarting BTCPay Server …\n\n" printf "\n Restarting BTCPay Server …\n\n"
cd $btcpay_dir cd $btcpay_dir
btcpay_up btcpay_up
exit 1 exit 1
} }
# Optional: Start MariaDB database
if [ ! -z "$mariadb_dump_name" ]; then
{
printf "\n Starting MariaDB database container …\n"
docker-compose -f $BTCPAY_DOCKER_COMPOSE up -d mariadb
sleep 10
mariadb_container=$(docker ps -a -q -f "name=mariadb_1")
if [ -z "$mariadb_container" ]; then
echo "🚨 MariaDB database container could not be started or found."
printf "\n Restarting BTCPay Server …\n\n"
cd $btcpay_dir
btcpay_up
exit 1
fi
} || {
echo "🚨 Starting MariaDB database container failed. Please check the error message above."
printf "\n Restarting BTCPay Server …\n\n"
cd $btcpay_dir
btcpay_up
exit 1
}
fi
cd $restore_dir cd $restore_dir
# Postgres database
{ {
printf "\n Restoring database …" printf "\n Restoring Postgres database …"
gunzip -c $dbdump_name | docker exec -i $dbcontainer psql -U postgres postgres -a gunzip -c $postgres_dump_name | docker exec -i $postgres_container psql -U postgres postgres
echo "✅ Database restore done." echo "✅ Postgres database restore done."
} || { } || {
echo "🚨 Restoring database failed. Please check the error message above." echo "🚨 Restoring Postgres database failed. Please check the error message above."
printf "\n Restarting BTCPay Server …\n\n" printf "\n Restarting BTCPay Server …\n\n"
cd $btcpay_dir cd $btcpay_dir
btcpay_up btcpay_up
exit 1 exit 1
} }
# Optional: MariaDB database
if [ ! -z "$mariadb_dump_name" ]; then
{
printf "\n Restoring MariaDB database …"
gunzip -c $mariadb_dump_name | docker exec -i $mariadb_container mysql -u root -pwordpressdb
printf "\n✅ MariaDB database restore done."
} || {
echo "🚨 Restoring MariaDB database failed. Please check the error message above."
printf "\n Restarting BTCPay Server …\n\n"
cd $btcpay_dir
btcpay_up
exit 1
}
fi
printf "\n Restarting BTCPay Server …\n\n" printf "\n Restarting BTCPay Server …\n\n"
cd $btcpay_dir cd $btcpay_dir
btcpay_up btcpay_up