public
nobgit
read
NobMail
Based on mailcow: dockerized
Languages
Repository composition by tracked source files.
PHP
49%
JavaScript
35%
HTML
9%
CSS
4%
Shell
2%
Python
1%
Lua
0%
Perl
0%
Ruby
0%
SCSS
0%
Create file
Wiki Documentation
Clone
https://nobgit.com/orgs/nobgit/nobmail.git
ssh://[email protected]:2222/orgs/nobgit/nobmail.git
Commit
[Helper] Some minor improvements
ba246d34
helper-scripts/backup_and_restore.sh | 71 ++++++++++++++++++++++++++++--------
1 file changed, 55 insertions(+), 16 deletions(-)
Diff
diff --git a/helper-scripts/backup_and_restore.sh b/helper-scripts/backup_and_restore.sh
index 707cd131..5f9e863c 100755
--- a/helper-scripts/backup_and_restore.sh
+++ b/helper-scripts/backup_and_restore.sh
@@ -45,13 +45,28 @@ else
exit 1
fi
fi
+
BACKUP_LOCATION=$(echo ${BACKUP_LOCATION} | sed 's#/$##')
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
COMPOSE_FILE=${SCRIPT_DIR}/../docker-compose.yml
+
+if [ ! -f ${COMPOSE_FILE} ]; then
+ echo "Compose file not found"
+ exit 1
+fi
+
echo "Using ${BACKUP_LOCATION} as backup/restore location."
echo
+
source ${SCRIPT_DIR}/../mailcow.conf
-CMPS_PRJ=$(echo $COMPOSE_PROJECT_NAME | tr -cd "[A-Za-z-_]")
+
+if [[ -z ${COMPOSE_PROJECT_NAME} ]]; then
+ echo "Could not determine compose project name"
+ exit 1
+else
+ echo "Found project name ${COMPOSE_PROJECT_NAME}"
+ CMPS_PRJ=$(echo ${COMPOSE_PROJECT_NAME} | tr -cd "[A-Za-z-_]")
+fi
function backup() {
DATE=$(date +"%Y-%m-%d-%H-%M-%S")
@@ -93,18 +108,24 @@ function backup() {
;;&
mysql|all)
SQLIMAGE=$(grep -iEo '(mysql|mariadb)\:.+' ${COMPOSE_FILE})
- docker run --rm \
- --network $(docker network ls -qf name=${CMPS_PRJ}_) \
- -v $(docker volume ls -qf name=${CMPS_PRJ}_mysql-vol-1):/var/lib/mysql/:ro \
- --entrypoint= \
- -v ${BACKUP_LOCATION}/mailcow-${DATE}/mysql:/backup \
- ${SQLIMAGE} /bin/sh -c "mariabackup --host mysql --user root --password ${DBROOT} --backup --rsync --target-dir=/backup"
-
- docker run --rm \
- --network $(docker network ls -qf name=${CMPS_PRJ}_) \
- --entrypoint= \
- -v ${BACKUP_LOCATION}/mailcow-${DATE}/mysql:/backup \
- ${SQLIMAGE} /bin/sh -c "mariabackup --prepare --target-dir=/backup"
+ if [[ -z "${SQLIMAGE}" ]]; then
+ echo "Could not determine SQL image version, skipping backup..."
+ shift
+ continue
+ else
+ echo "Using SQL image ${SQLIMAGE}, starting..."
+ docker run --rm \
+ --network $(docker network ls -qf name=${CMPS_PRJ}_) \
+ -v $(docker volume ls -qf name=${CMPS_PRJ}_mysql-vol-1):/var/lib/mysql/:ro \
+ --entrypoint= \
+ -v ${BACKUP_LOCATION}/mailcow-${DATE}/mysql:/backup \
+ ${SQLIMAGE} /bin/sh -c "mariabackup --host mysql --user root --password ${DBROOT} --backup --rsync --target-dir=/backup"
+ docker run --rm \
+ --network $(docker network ls -qf name=${CMPS_PRJ}_) \
+ --entrypoint= \
+ -v ${BACKUP_LOCATION}/mailcow-${DATE}/mysql:/backup \
+ ${SQLIMAGE} /bin/sh -c "mariabackup --prepare --target-dir=/backup"
+ fi
;;&
--delete-days)
shift
@@ -120,7 +141,10 @@ function backup() {
}
function restore() {
+ echo
+ echo "Stopping watchdog-mailcow..."
docker stop $(docker ps -qf name=watchdog-mailcow)
+ echo
RESTORE_LOCATION="${1}"
shift
while (( "$#" )); do
@@ -178,10 +202,18 @@ function restore() {
;;
mysql)
SQLIMAGE=$(grep -iEo '(mysql|mariadb)\:.+' ${COMPOSE_FILE})
- docker stop $(docker ps -qf name=mysql-mailcow)
+ read -p "mailcow will be stopped and the corresponding mailcow.conf file of the backup will be restored, do you want to proceed? [y|N] " MYSQL_STOP_MAILCOW
+ if [[ ${MYSQL_STOP_MAILCOW,,} =~ ^(yes|y)$ ]]; then
+ echo "Stopping mailcow..."
+ docker-compose down
+ else
+ echo "OK, skipped."
+ shift
+ continue
+ fi
+ #docker stop $(docker ps -qf name=mysql-mailcow)
if [[ -d "${RESTORE_LOCATION}/mysql" ]]; then
docker run --rm \
- --network $(docker network ls -qf name=${CMPS_PRJ}_) \
-v $(docker volume ls -qf name=${CMPS_PRJ}_mysql-vol-1):/var/lib/mysql/:rw \
--entrypoint= \
-v ${RESTORE_LOCATION}/mysql:/backup \
@@ -199,11 +231,18 @@ function restore() {
gunzip < backup/backup_mysql.gz | mysql -uroot && \
mysql -uroot -e SHUTDOWN;"
fi
- docker start $(docker ps -aqf name=mysql-mailcow)
+ echo "Copying mailcow.conf..."
+ mv mailcow.conf mailcow.conf_backup_$(date +"%Y-%m-%d-%H-%M-%S")
+ cp ${RESTORE_LOCATION}/mailcow.conf mailcow.conf
+ echo "Starting mailcow..."
+ docker-compose up -d
+ #docker start $(docker ps -aqf name=mysql-mailcow)
;;
esac
shift
done
+ echo
+ echo "Starting watchdog-mailcow..."
docker start $(docker ps -aqf name=watchdog-mailcow)
}