mirror of
https://github.com/ViViDboarder/docker-duplicity-cron.git
synced 2024-11-25 03:56:32 +00:00
Initial commit of actual data
This commit is contained in:
parent
8d1f80fa17
commit
c5d673885e
2
.dockerignore
Normal file
2
.dockerignore
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Readme.md
|
||||||
|
docker-compose.yaml
|
27
Dockerfile
Normal file
27
Dockerfile
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
FROM ubuntu:xenial
|
||||||
|
MAINTAINER ViViDboarder <vividboarder@gmail.com>
|
||||||
|
|
||||||
|
RUN apt-get update \
|
||||||
|
&& apt-get install -y software-properties-common python-software-properties \
|
||||||
|
&& add-apt-repository ppa:duplicity-team/ppa \
|
||||||
|
&& apt-get update \
|
||||||
|
&& apt-get install -y duplicity python-setuptools \
|
||||||
|
python-boto python-swiftclient python-pexpect openssh-client \
|
||||||
|
&& rm -rf /var/apt/lists/*
|
||||||
|
|
||||||
|
VOLUME "/root/.cache/duplicity"
|
||||||
|
VOLUME "/backups"
|
||||||
|
|
||||||
|
ENV BACKUP_DEST="file:///backups"
|
||||||
|
ENV BACKUP_NAME="backup"
|
||||||
|
ENV PATH_TO_BACKUP="/data"
|
||||||
|
ENV PASSPHRASE="Correct.Horse.Battery.Staple"
|
||||||
|
|
||||||
|
# Cron schedules
|
||||||
|
ENV CRON_SCHEDULE=""
|
||||||
|
ENV VERIFY_CRON_SCHEDULE=""
|
||||||
|
|
||||||
|
ADD entrypoint.sh /
|
||||||
|
ADD backup.sh /
|
||||||
|
|
||||||
|
ENTRYPOINT [ "/entrypoint.sh" ]
|
39
Readme.md
Normal file
39
Readme.md
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# Duplicity Backup
|
||||||
|
|
||||||
|
## Instructions
|
||||||
|
Mount any directories you'd like to back up as a volume and run
|
||||||
|
|
||||||
|
## Env Variables
|
||||||
|
| Variable | Default | Description |
|
||||||
|
| -------- | ------- | ----------- |
|
||||||
|
|AWS_ACCESS_KEY_ID| |Required for writing to S3|
|
||||||
|
|AWS_DEFAULT_REGION| |Required for writing to S3|
|
||||||
|
|AWS_SECRET_ACCESS_KEY| |Required for writing to S3|
|
||||||
|
|BACKUP_DEST|file:///backups|Destination to store backups (See [duplicity documenation](http://duplicity.nongnu.org/duplicity.1.html#sect7))|
|
||||||
|
|BACKUP_NAME|backup|What the name for the backup should be. If using a single store for multiple backups, make sure this is unique|
|
||||||
|
|CLEANUP_COMMAND| |An optional duplicity command to execute after backups to clean older ones out (eg. "remove-all-but-n-full 2")|
|
||||||
|
|CRON_SCHEDULE| |If you want to backup on a schedule, provide it here. By default we just backup once and exit|
|
||||||
|
|FTP_PASSWORD| |Required if using FTP for backups|
|
||||||
|
|GPG_KEY_ID| |The ID of the key you wish to use. See [Encryption](#encryption) section below|
|
||||||
|
|OPT_ARGUMENTS| |Any additional arguments to provide to the duplicity backup command. These can also be provided as additional arguments via the command line|
|
||||||
|
|PASSPHRASE|Correct.Horse.Battery.Staple|Passphrase to use for GPG|
|
||||||
|
|PATH_TO_BACKUP|/data|The path to the directory you wish to backup. If you want to backup multiple, see the [tip below](#backing-up-more-than-one-source-directory)|
|
||||||
|
|SKIP_ON_START| |Skips backup on start if set to "true"|
|
||||||
|
|VERIFY_CRON_SCHEDULE| |If you want to verify your backups on a schedule, provide it here|
|
||||||
|
|
||||||
|
## Encryption
|
||||||
|
Add a ro mount to your `~/.gnupg` directory and then provide the `GPG_KEY_ID` as an environment variable. The key will be used to sign and encrypt your files before sending to the backup destination.
|
||||||
|
|
||||||
|
Need to generate a key? Install `gnupg` and run `gnupg --gen-key`
|
||||||
|
|
||||||
|
## Tips
|
||||||
|
|
||||||
|
### Backing up more than one source directory
|
||||||
|
Duplicity only accepts one target, however you can refine that selection with `--exclude` and `--include` arguments. The below example shows how this can be used to select multiple backup sources
|
||||||
|
```
|
||||||
|
OPT_ARGUMENTS="--include /home --include /etc --exclude '**'"
|
||||||
|
PATH_TO_BACKUP="/"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Backing up from another container
|
||||||
|
Mount all volumes from your existing container with `--volumes-from` and then back up by providing the paths to those volumes. If there are more than one volumes, you'll want to use the above tip for mulitple backup sources
|
22
backup.sh
Executable file
22
backup.sh
Executable file
@ -0,0 +1,22 @@
|
|||||||
|
#! /bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# If key id is provied add arg
|
||||||
|
if [ -e "$GPG_KEY_ID" ]; then
|
||||||
|
OPT_ARGUMENTS="$OPT_ARGUMENTS --encrypt-sign-key=\"$GPG_KEY_ID\""
|
||||||
|
fi
|
||||||
|
|
||||||
|
duplicity \
|
||||||
|
--allow-source-mismatch \
|
||||||
|
--asynchronous-upload \
|
||||||
|
--log-file /root/duplicity.log \
|
||||||
|
--name $BACKUP_NAME \
|
||||||
|
$OPT_ARGUMENTS \
|
||||||
|
$PATH_TO_BACKUP \
|
||||||
|
$BACKUP_DEST
|
||||||
|
|
||||||
|
if [ -n "$CLEANUP_COMMAND" ]; then
|
||||||
|
duplicity $CLEANUP_COMMAND \
|
||||||
|
--log-file /root/duplicity.log \
|
||||||
|
$BACKUP_DEST
|
||||||
|
fi
|
15
docker-compose.yaml
Normal file
15
docker-compose.yaml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
version: '2'
|
||||||
|
|
||||||
|
services:
|
||||||
|
duplicity:
|
||||||
|
build: .
|
||||||
|
volumes:
|
||||||
|
- ~/.gnupg:/root/.gnupg:ro
|
||||||
|
- ~/my-backups:/backups
|
||||||
|
- ~/my-data:/data:ro
|
||||||
|
environment:
|
||||||
|
GPG_KEY_ID: 2CBD492E
|
||||||
|
PASSPHRASE: Correct.Horse.Battery.Staple
|
||||||
|
CLEANUP_COMMAND: remove-older-than 5m
|
||||||
|
CRON_SCHEDULE: "* * * * *"
|
||||||
|
VERIFY_CRON_SCHEDULE: "* * * * *"
|
40
entrypoint.sh
Executable file
40
entrypoint.sh
Executable file
@ -0,0 +1,40 @@
|
|||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
export OPT_ARGUMENTS="$@"
|
||||||
|
|
||||||
|
if [ "$1" == "bash" ]; then
|
||||||
|
exec "$@"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$SKIP_ON_START" != "true" ]; then
|
||||||
|
/backup.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$CRON_SCHEDULE" ]; then
|
||||||
|
# Export the environment to a file so it can be loaded from cron
|
||||||
|
env | sed 's/^\(.*\)=\(.*\)$/export \1="\2"/g' > /env.sh
|
||||||
|
# Remove some vars we don't want to keep
|
||||||
|
sed -i '/\(HOSTNAME\|affinity\|SHLVL\|PWD\)/d' /env.sh
|
||||||
|
|
||||||
|
# Use bash for cron
|
||||||
|
echo "SHELL=/bin/bash" > /crontab.conf
|
||||||
|
|
||||||
|
# Schedule the backups
|
||||||
|
echo "$CRON_SCHEDULE source /env.sh && /backup.sh 2>> /cron.log" >> /crontab.conf
|
||||||
|
echo "Backups scheduled as $CRON_SCHEDULE"
|
||||||
|
|
||||||
|
if [ -n "$VERIFY_CRON_SCHEDULE" ]; then
|
||||||
|
echo "$VERIFY_CRON_SCHEDULE source /env.sh && duplicity verify $BACKUP_DEST $PATH_TO_BACKUP" >> /crontab.conf
|
||||||
|
echo "Verify scheduled as $VERIFY_CRON_SCHEDULE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add to crontab
|
||||||
|
crontab /crontab.conf
|
||||||
|
|
||||||
|
echo "Starting duplicity cron..."
|
||||||
|
cron
|
||||||
|
|
||||||
|
touch /cron.log /root/duplicity.log
|
||||||
|
tail -f /cron.log /root/duplicity.log
|
||||||
|
fi
|
Loading…
Reference in New Issue
Block a user