kit/other_scripts/nextcloud-sync.sh

87 lines
2.6 KiB
Bash
Executable File

#!/bin/bash
# Run this script with "(sudo) bash <filename> <args>".
#
# 0 2 * * * bash /root/nextcloud-sync.sh | tee /var/log/nextcloud.log > /dev/null 2>&1
# Exit on error.
#set -eux # debug on
set -e
# Timestamp
DATE_STAMP=$(date '+%s')
############ REMOTE
# Host must have SSH keys setup.
# Must have access to the below paths & access to the database.
SSH_REMOTE_HOST='host'
SSH_REMOTE_USER='root'
# The user to run the _REMOTE_ nextcloud install uses.
# For running commands etc.
NEXTCLOUD_REMOTE_USER='nextcloud'
NEXTCLOUD_REMOTE_DATABASE_NAME='nextcloud'
# Paths.
PHP_REMOTE_BIN='php'
NEXTCLOUD_REMOTE_FILE_DATA='/nextcloud/data'
NEXTCLOUD_REMOTE_FILE_ROOT='/var/www/nextcloud/htdocs'
REMOTE_NC_MAINTENANCE_ON="ssh $SSH_REMOTE_USER@$SSH_REMOTE_HOST sudo -u $NEXTCLOUD_REMOTE_USER $PHP_REMOTE_BIN $NEXTCLOUD_REMOTE_FILE_ROOT/occ maintenance:mode --on"
REMOTE_NC_MAINTENANCE_OFF="ssh $SSH_REMOTE_USER@$SSH_REMOTE_HOST sudo -u $NEXTCLOUD_REMOTE_USER $PHP_REMOTE_BIN $NEXTCLOUD_REMOTE_FILE_ROOT/occ maintenance:mode --off"
REMOTE_DB_CREATE_DUMP="ssh $SSH_REMOTE_USER@$SSH_REMOTE_HOST mysqldump --single-transaction $NEXTCLOUD_REMOTE_DATABASE_NAME > /tmp/nextcloud-$DATE_STAMP.sql"
############ LOCAL
NEXTCLOUD_USER='nextcloud'
NEXTCLOUD_DATABASE_NAME='nextcloud'
# Paths.
PHP_BIN='php'
NEXTCLOUD_FILE_DATA='/nextcloud/data'
NEXTCLOUD_FILE_ROOT='/var/www/nextcloud/htdocs'
NC_MAINTENANCE_ON="sudo -u $NEXTCLOUD_USER $PHP_BIN $NEXTCLOUD_FILE_ROOT/occ maintenance:mode --on"
NC_MAINTENANCE_OFF="sudo -u $NEXTCLOUD_USER $PHP_BIN $NEXTCLOUD_FILE_ROOT/occ maintenance:mode --off"
GET_DB_DUMP_FROM_REMOTE="rsync --progress -Aavx $SSH_REMOTE_USER@$SSH_REMOTE_HOST:/tmp/nextcloud-$DATE_STAMP.sql /tmp/nextcloud-$DATE_STAMP.sql"
GET_DATA_FILES_FROM_REMOTE="rsync --progress -Aavx $SSH_REMOTE_USER@$SSH_REMOTE_HOST:$NEXTCLOUD_REMOTE_FILE_DATA/. $NEXTCLOUD_FILE_DATA"
GET_NC_FILES_FROM_REMOTE="rsync --progress -Aavx $SSH_REMOTE_USER@$SSH_REMOTE_HOST:$NEXTCLOUD_REMOTE_FILE_ROOT/. $NEXTCLOUD_FILE_ROOT"
#########
# Enable remote MAINTENANCE mode.
${REMOTE_NC_MAINTENANCE_ON}
# Make remote dump.
${REMOTE_DB_CREATE_DUMP}
# Enable local MAINTENANCE mode.
${NC_MAINTENANCE_ON}
# Sync nc files.
${GET_NC_FILES_FROM_REMOTE}
# Sync files.
${GET_DATA_FILES_FROM_REMOTE}
# Get database dump.
${GET_DB_DUMP_FROM_REMOTE}
# Disable remote MAINTENANCE mode.
${REMOTE_NC_MAINTENANCE_OFF}
# Restore database dump.
# You can't script this due to the redirection.
mysql $NEXTCLOUD_DATABASE_NAME < /tmp/nextcloud-$DATE_STAMP.sql && rm /tmp/nextcloud-$DATE_STAMP.sql
# Disable local MAINTENANCE mode.
${NC_MAINTENANCE_OFF}
echo "$DATE_STAMP OK" >> /var/log/nc-sync.log