added postgress support
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Djeeberjr 2022-03-20 21:06:53 +01:00
parent 92a0ea8f77
commit 505d6d4d44
4 changed files with 61 additions and 4 deletions

View File

@ -1,6 +1,6 @@
FROM restic/restic FROM restic/restic
RUN apk add --no-cache mysql-client rclone bash fuse RUN apk add --no-cache mysql-client rclone bash fuse postgresql-client
RUN mkdir /app && mkdir /config RUN mkdir /app && mkdir /config

View File

@ -1,12 +1,16 @@
Use [restic](https://restic.net/) together with rclone for a poor mans backup solution. Use [restic](https://restic.net/) together with rclone for a poor mans backup solution.
# Configuration
Environment variables: Environment variables:
`RCLONE_REMOTE` remote for rclone e.g. `gdrive:/backup` `RCLONE_REMOTE` remote for rclone e.g. `gdrive:/backup`
`RCLONE_CONFIG` file path for the rclone config file e.g. `/config/rclone.conf` `RCLONE_CONFIG` file path for the rclone config file e.g. `/config/rclone.conf`
`ENC_PASSWORD` or `ENC_PASSWORD_FILE` password for the repo `RESTIC_PASSWORD` or `RESTIC_PASSWORD_FILE` password for the repo
`RCLONE_CONFIG_FILE` content of the rclone config.
For the database: For the database:
@ -18,4 +22,44 @@ For the database:
`MYSQL_PASSWORD` or `MYSQL_PASSWORD_FILE` `MYSQL_PASSWORD` or `MYSQL_PASSWORD_FILE`
`POSTGRES_DUMP_DB` all databases comma sperated: `db1,db2`
`POSTGRES_HOST`
`POSTGRES_USERNAME`
`POSTGRES_PASSWORD` or `POSTGRES_PASSWORD_FILE`
Use the `/app/init.sh` script to init a new remote. Use the `/app/init.sh` script to init a new remote.
# Directorys
`/config` Contains the rclone config.
`/backup` Contains the mounted volumes as read only
`/restore` Contains volumes to restore
# Usage
Here is an example of the script i use to backup my volumes:
```sh
#!/usr/bin/env sh
set -e
# get all volumes with the "backup.enable" lable on it
BACKUP_VOL=$(docker volume ls --filter "label=backup.enable" --format '-v {{ .Name }}:/backup/{{ .Name }}:ro ')
docker run \
--rm \
-e "RCLONE_REMOTE=gdrive:/backup" \
-e "RCLONE_CONFIG=/config/rclone.conf" \
-e "ENC_PASSWORD=MyPassword" \
-e "MYSQL_USERNAME=root" \
-e "MYSQL_PASSWORD=dbPassword" \
-e "MYSQL_DUMP_DB=db1,db2" \
-e "MYSQL_HOST=databaseHost" \
--network "dbNet" \
-v "/var/docker/backup:/config" \
$BACKUP_VOL \
djeeberjr/backup
```

View File

@ -9,7 +9,13 @@ mkdir -p /backup/sqlDump
for db in $(echo "$MYSQL_DUMP_DB" | sed 's/,/\n/g') for db in $(echo "$MYSQL_DUMP_DB" | sed 's/,/\n/g')
do do
echo "Dumping db: $db" echo "Dumping db: $db"
mysqldump --compact -P 3306 --host "$MYSQL_HOST" -u "$MYSQL_USERNAME" "-p$MYSQL_PASSWORD_ACTUAL" "$db" > "/backup/sqlDump/$db.sql" mysqldump --compact -P 3306 --host "$MYSQL_HOST" -u "$MYSQL_USERNAME" "-p$MYSQL_PASSWORD_ACTUAL" "$db" > "/backup/sqlDump/$db-mysql.sql"
done
for db in $(echo "$POSTGRES_DUMP_DB" | sed 's/,/\n/g')
do
echo "Dumping db: $db"
pg_dump -U "$POSTGRES_USERNAME" --host "$POSTGRES_HOST" "$db" > "/backup/sqlDump/$db-postgres.sql"
done done
restic --verbose backup "/backup" restic --verbose backup "/backup"

View File

@ -31,7 +31,14 @@ elif [ -n "${MYSQL_PASSWORD_FILE}" ]; then
MYSQL_PASSWORD_ACTUAL=$(cat "$MYSQL_PASSWORD_FILE") MYSQL_PASSWORD_ACTUAL=$(cat "$MYSQL_PASSWORD_FILE")
fi fi
if [ -n "$POSTGRES_PASSWORD" ];then
PGPASSWORD="$POSTGRES_PASSWORD"
elif [ -n "$POSTGRES_PASSWORD_FILE" ]; then
PGPASSWORD=$(cat "$POSTGRES_PASSWORD_FILE")
fi
export RCLONE_REMOTE export RCLONE_REMOTE
export RESTIC_PASSWORD export RESTIC_PASSWORD
export MYSQL_PASSWORD_ACTUAL export MYSQL_PASSWORD_ACTUAL
export RESTIC_REPOSITORY export RESTIC_REPOSITORY
export PGPASSWORD