Skip to content

Instantly share code, notes, and snippets.

@Bouni
Last active March 19, 2024 13:12
Show Gist options
  • Save Bouni/3d2f722245b876a00252893c5ff2c35a to your computer and use it in GitHub Desktop.
Save Bouni/3d2f722245b876a00252893c5ff2c35a to your computer and use it in GitHub Desktop.
Transfer Nextcloud data to new server
#!/bin/sh
NEW_HOST=new_server
TARGET_FOLDER=/opt/docker/cloud/transfer/
MYSQL_USER=nextcloud
MYSQL_PW=my_secure_db_pw
DATE=`date +"%Y%m%d"`
echo Start tranfering Nextcloud data to new host $NEW_HOST
echo 1. Set Nextcloud instance into maintenance mode
docker exec -u www-data nextcloud php occ maintenance:mode --on
echo 2. Wait 6-7 minutes according to https://docs.nextcloud.com/server/latest/admin_manual/maintenance/migrating.html
spin='⣾⣽⣻⢿⡿⣟⣯⣷'
for i in {1..3600}; do
j=$(( (i+1) %8 ))
e=$((i/10))
t=360
printf "\r${spin:$j:1} | $e/$t"
sleep .1
done
echo " "
echo 3. Stopping Nextcloud app and Nginx webserver
docker stop nextcloud nginx
echo 4. Clear tranfer folder
rm -rf transfer
mkdir transfer
echo 5. Backup SQL database
docker exec mariadb mysqldump --single-transaction --default-character-set=utf8mb4 -h localhost -u $MYSQL_USER -p$MYSQL_PW nextcloud > transfer/db_dump_nextcloud_$DATE.sql
echo 6. Copy DB backup to new host
ssh $NEW_HOST mkdir -p $TARGET_FOLDER
rsync -Aavxh --progress --stats transfer/db_dump_nextcloud_$DATE.sql $NEW_HOST:$TARGET_FOLDER
if [[ $1 != "db-only" ]]; then
echo 7. Backup nextcloud data
rsync -Aavxht --progress --stats nextcloud/config $NEW_HOST:$TARGET_FOLDER
rsync -Aavxht --progress --stats nextcloud/data $NEW_HOST:$TARGET_FOLDER
fi
echo 8. Start old nextcloud
docker start nextcloud nginx
echo 9. Disable maintenance mode
docker exec -u www-data nextcloud php occ maintenance:mode --off
echo 10. Done!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment