Is there any way to restore your site from backup in the terminal?

Ecco lo script funzionante che uso per ripristinare prod su dev e test:

#!/bin/sh
set +x
set -e
# This script restore the latest productive backup to the test/dev environment
CONTAINER_NAME=app-test
LATEST_BACKUP=$(mc ls s3/backup-prod/default | tail -n 1 | cut -d ' ' -f 5)
mc cp s3/backup-prod/default/${LATEST_BACKUP} /tmp
# ensure /var/www/discourse/public/backups/default/ exists with the proper ownership
docker exec -i ${CONTAINER_NAME} sh -c "mkdir -p /var/www/discourse/public/backups/default/ && chown -R discourse:www-data /var/www/discourse/public/backups/default/"
cat /tmp/${LATEST_BACKUP} | docker exec -i ${CONTAINER_NAME} sh -c "cat - > /var/www/discourse/public/backups/default/${LATEST_BACKUP}"
docker exec -i ${CONTAINER_NAME} sh -x << EOF
discourse enable_restore
rails runner "SiteSetting.set('backup_location', 'local')"
discourse restore ${LATEST_BACKUP}
discourse disable_restore
rm -f /var/www/discourse/public/backups/default/${LATEST_BACKUP}
EOF
# rebuild container
cd /var/lib/discourse/discourse_docker
stdbuf -oL -eL ./launcher rebuild ${CONTAINER_NAME} 2>&1 | sed 's/DISCOURSE_google_oauth2_client_secret=[^ ]*/DISCOURSE_google_oauth2_client_secret=***REDACTED***/g'
cd -
rm -f /tmp/${LATEST_BACKUP}

Mancava rails runner "SiteSetting.set('backup_location', 'local')" e questo impediva il ripristino dal tarball di backup.

Si noti che l’output dello script launcher ha dovuto essere redatto poiché avrebbe rivelato segreti nel suo output, specialmente quando eseguito tramite un lavoro CI/CD visibile.