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 \
|
||||
borgbackup
|
||||
|
||||
# Install packages for mysqldump
|
||||
RUN apt-get install -y mysql-client
|
||||
RUN pip install PyMySql
|
||||
|
||||
# Install cron
|
||||
RUN apt-get install -y cron
|
||||
|
||||
|
|
17
README.md
17
README.md
|
@ -1,7 +1,8 @@
|
|||
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
|
||||
-----
|
||||
|
@ -34,9 +35,21 @@ docker run \
|
|||
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.
|
||||
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
|
||||
|
||||
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 \
|
||||
-e ssh_connection=$SSH_CONNECTION \
|
||||
-e private_key_path=$PRIVATE_KEY_PATH \
|
||||
-e borg_repo_path=$BORG_REPO_PATH \
|
||||
-e borg_repo_name=$BORG_REPO_NAME \
|
||||
-e borg_passphrase=$BORG_PASSPHRASE \
|
||||
-e local_folder=$LOCAL_FOLDER
|
||||
-e "ssh_connection=$SSH_CONNECTION" \
|
||||
-e "private_key_path=$PRIVATE_KEY_PATH" \
|
||||
-e "borg_repo_path=$BORG_REPO_PATH" \
|
||||
-e "borg_repo_name=$BORG_REPO_NAME" \
|
||||
-e "borg_passphrase=$BORG_PASSPHRASE" \
|
||||
-e "local_folder=$LOCAL_FOLDER"
|
||||
|
|
|
@ -14,8 +14,9 @@ if [[ -n "$SSH_KNOWN_HOSTS" ]]; then
|
|||
fi
|
||||
|
||||
# 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/mysql-dump.git /var/mysql-dump-playbook
|
||||
|
||||
# Set borg passphrase env variable
|
||||
if [[ -f /run/secrets/borg_passphrase ]]; then
|
||||
|
@ -26,6 +27,11 @@ elif [[ -z "$BORG_PASSPHRASE" ]]; then
|
|||
exit 1
|
||||
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
|
||||
declare -p | grep -Ev 'BASHOPTS|BASH_VERSINFO|EUID|PPID|SHELLOPTS|UID' > /container.env
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue