kopia lustrzana https://github.com/Ovski4/docker-borgbackup-cron
Add support for mysql dumps
rodzic
6c295c60d7
commit
3770ad6443
|
@ -11,6 +11,10 @@ RUN apt-get install -y \
|
||||||
build-essential \
|
build-essential \
|
||||||
borgbackup
|
borgbackup
|
||||||
|
|
||||||
|
# Install packages for mysqldump
|
||||||
|
RUN apt-get install -y mysql-client
|
||||||
|
RUN pip install PyMySql
|
||||||
|
|
||||||
# Install cron
|
# Install cron
|
||||||
RUN apt-get install -y cron
|
RUN apt-get install -y cron
|
||||||
|
|
||||||
|
|
17
README.md
17
README.md
|
@ -1,7 +1,8 @@
|
||||||
Borg backup cron
|
Borg backup cron
|
||||||
=================
|
=================
|
||||||
|
|
||||||
A docker image to backup periodically a folder using borg
|
A docker image to backup periodically a folder using borg.
|
||||||
|
Additionnally this image can dump a mysql database in the same folder beforehand.
|
||||||
|
|
||||||
Build
|
Build
|
||||||
-----
|
-----
|
||||||
|
@ -34,9 +35,21 @@ docker run \
|
||||||
ovski/borgbackup-cron
|
ovski/borgbackup-cron
|
||||||
```
|
```
|
||||||
|
|
||||||
|
With mysql dump
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run \
|
||||||
|
# ... other options
|
||||||
|
-e MYSQL_USER=/var/folder_to_backup \
|
||||||
|
-e MYSQL_DATABASE=/var/folder_to_backup \
|
||||||
|
-e MYSQL_PASSWORD=/var/folder_to_backup \
|
||||||
|
ovski/borgbackup-cron
|
||||||
|
```
|
||||||
|
|
||||||
You can also use secrets in a stack to store sensitive information.
|
You can also use secrets in a stack to store sensitive information.
|
||||||
Instead of specifiying environment variables, create the following secrets in /var/secrets (default location):
|
Instead of specifiying environment variables, create the following secrets in /var/secrets (default location):
|
||||||
|
|
||||||
```
|
```
|
||||||
/run/secrets/borg_passphrase
|
/run/secrets/borg_passphrase instead of BORG_PASSPHRASE
|
||||||
|
/run/secrets/db_password instead of MYSQL_PASSWORD
|
||||||
```
|
```
|
||||||
|
|
|
@ -1,9 +1,19 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [[ ! -z "$MYSQL_USER" && ! -z "$MYSQL_DATABASE" && ! -z "$MYSQL_PASSWORD" ]]; then
|
||||||
|
ansible-playbook /var/mysql-dump-playbook/main.yml \
|
||||||
|
-e "mysql_dumps_target_folder=$LOCAL_FOLDER/mysql_dumps" \
|
||||||
|
-e "prune=yes" \
|
||||||
|
-e "db_user=$MYSQL_USER" \
|
||||||
|
-e "db_password=$MYSQL_PASSWORD" \
|
||||||
|
-e "db_host=mysql" \
|
||||||
|
-e "db_name=$MYSQL_DATABASE"
|
||||||
|
fi
|
||||||
|
|
||||||
ansible-playbook /var/borg-backup-playbook/main.yml \
|
ansible-playbook /var/borg-backup-playbook/main.yml \
|
||||||
-e ssh_connection=$SSH_CONNECTION \
|
-e "ssh_connection=$SSH_CONNECTION" \
|
||||||
-e private_key_path=$PRIVATE_KEY_PATH \
|
-e "private_key_path=$PRIVATE_KEY_PATH" \
|
||||||
-e borg_repo_path=$BORG_REPO_PATH \
|
-e "borg_repo_path=$BORG_REPO_PATH" \
|
||||||
-e borg_repo_name=$BORG_REPO_NAME \
|
-e "borg_repo_name=$BORG_REPO_NAME" \
|
||||||
-e borg_passphrase=$BORG_PASSPHRASE \
|
-e "borg_passphrase=$BORG_PASSPHRASE" \
|
||||||
-e local_folder=$LOCAL_FOLDER
|
-e "local_folder=$LOCAL_FOLDER"
|
||||||
|
|
|
@ -14,8 +14,9 @@ if [[ -n "$SSH_KNOWN_HOSTS" ]]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Clone ansible playbooks
|
# Clone ansible playbooks
|
||||||
echo "Cloning ansible gitlab repository"
|
echo "Cloning ansible gitlab repositories"
|
||||||
git clone https://gitlab.com/ovski-projects/infra/ansible-playbooks/borg-backup.git /var/borg-backup-playbook
|
git clone https://gitlab.com/ovski-projects/infra/ansible-playbooks/borg-backup.git /var/borg-backup-playbook
|
||||||
|
git clone https://gitlab.com/ovski-projects/infra/ansible-playbooks/mysql-dump.git /var/mysql-dump-playbook
|
||||||
|
|
||||||
# Set borg passphrase env variable
|
# Set borg passphrase env variable
|
||||||
if [[ -f /run/secrets/borg_passphrase ]]; then
|
if [[ -f /run/secrets/borg_passphrase ]]; then
|
||||||
|
@ -26,6 +27,11 @@ elif [[ -z "$BORG_PASSPHRASE" ]]; then
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ -f /run/secrets/db_password ]]; then
|
||||||
|
echo "Setting MYSQL_PASSWORD env variable from secret"
|
||||||
|
export MYSQL_PASSWORD=$(cat /run/secrets/db_password)
|
||||||
|
fi
|
||||||
|
|
||||||
# Make env variables accessible in crontab
|
# Make env variables accessible in crontab
|
||||||
declare -p | grep -Ev 'BASHOPTS|BASH_VERSINFO|EUID|PPID|SHELLOPTS|UID' > /container.env
|
declare -p | grep -Ev 'BASHOPTS|BASH_VERSINFO|EUID|PPID|SHELLOPTS|UID' > /container.env
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue