From 7962a77e8b011ea6f63d8d134147b4a83762630f Mon Sep 17 00:00:00 2001 From: ViViDboarder Date: Sun, 12 Aug 2018 13:29:04 -0700 Subject: [PATCH] Getting better Dropping platform Dockerfiles --- Dockerfile.raspbian | 50 -------------------------------- Dockerfile.ubuntu | 27 ----------------- Makefile | 8 ++--- Readme.md | 34 +++++++--------------- backup.sh | 3 +- docker-compose.yaml | 4 +-- tests/docker-compose-test-s3.yml | 2 +- 7 files changed, 19 insertions(+), 109 deletions(-) delete mode 100644 Dockerfile.raspbian delete mode 100644 Dockerfile.ubuntu diff --git a/Dockerfile.raspbian b/Dockerfile.raspbian deleted file mode 100644 index 2a8e190..0000000 --- a/Dockerfile.raspbian +++ /dev/null @@ -1,50 +0,0 @@ -FROM resin/rpi-raspbian:jessie -MAINTAINER ViViDboarder - -RUN [ "cross-build-start" ] - -RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - cron \ - duplicity \ - lftp \ - ncftp \ - openssh-client \ - python-cloudfiles \ - python-gdata \ - python-oauthlib \ - python-paramiko \ - python-pexpect \ - python-pip \ - python-setuptools \ - python-urllib3 \ - rsync \ - tahoe-lafs \ - && pip install -U boto b2 \ - && apt-get remove -y python-pip \ - && apt-get install -y --no-install-recommends \ - python-swiftclient \ - && rm -rf /var/apt/lists/* - -RUN [ "cross-build-end" ] - -VOLUME /root/.cache/duplicity -VOLUME /backups -VOLUME /var/lock/duplicity - -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 FULL_CRON_SCHEDULE="" -ENV VERIFY_CRON_SCHEDULE="" - -ADD backup.sh / -ADD restore.sh / -ADD start.sh / -ADD verify.sh / - -CMD [ "/start.sh" ] diff --git a/Dockerfile.ubuntu b/Dockerfile.ubuntu deleted file mode 100644 index 9b7bf4f..0000000 --- a/Dockerfile.ubuntu +++ /dev/null @@ -1,27 +0,0 @@ -FROM ubuntu:artful -MAINTAINER ViViDboarder - -RUN apt-get update \ - && apt-get install -y --no-install-recommends \ - cron \ - restic \ - && apt-get clean \ - && rm -rf /var/apt/lists/* - -VOLUME /root/.cache/restic -VOLUME /backups - -ENV BACKUP_DEST="/backups" -ENV BACKUP_NAME="backup" -ENV PATH_TO_BACKUP="/data" - -# Cron schedules -ENV CRON_SCHEDULE="" -ENV VERIFY_CRON_SCHEDULE="" - -ADD backup.sh / -ADD restore.sh / -ADD start.sh / -ADD verify.sh / - -CMD [ "/start.sh" ] diff --git a/Makefile b/Makefile index 1d5e732..52a8284 100644 --- a/Makefile +++ b/Makefile @@ -8,18 +8,18 @@ test: test-x86 .PHONY: build-x86 build-x86: - docker build -f ./Dockerfile.ubuntu -t $(DOCKER_TAG):ubuntu . + docker build -f ./Dockerfile -t $(DOCKER_TAG) --platform linux . .PHONY: build-arm build-arm: - docker build -f ./Dockerfile.raspbian -t $(DOCKER_TAG):raspbian . + docker build -f ./Dockerfile -t $(DOCKER_TAG) --platform arm . .PHONY: build-all build-all: build-x86 build-arm .PHONY: test-x86 test-x86: build-x86 - cd tests && ./test.sh $(DOCKER_TAG):ubuntu + cd tests && ./test.sh $(DOCKER_TAG) .PHONY: test-arm test-arm: build-arm @@ -41,7 +41,7 @@ test-s3-all: test-s3-x86 test-s3-arm .PHONY: shell-x86 shell-x86: build-x86 - docker run --rm -it $(DOCKER_TAG):ubuntu bash + docker run --rm -it $(DOCKER_TAG) bash .PHONY: shell-arm shell-arm: build-arm diff --git a/Readme.md b/Readme.md index 0a0d63e..de59cac 100644 --- a/Readme.md +++ b/Readme.md @@ -8,37 +8,25 @@ 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|/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")| +|AWS_ACCESS_KEY_ID| |Required for writing to S3 or Minio| +|AWS_SECRET_ACCESS_KEY| |Required for writing to S3 or Minio| +|B2_ACCOUNT_ID| |Required for writing to B2| +|B2_ACCOUNT_KEY| |Required for writing to B2| +|BACKUP_DEST|/backups|Destination to store backups (See [restic documenation](https://restic.readthedocs.io/en/latest/030_preparing_a_new_repo.html))| +|CLEANUP_COMMAND| |Optional restic arguments for `forget` to execute after backups to clean older ones out (eg. "--prune --keep-last 2"). See [forget](https://restic.readthedocs.io/en/latest/060_forget.html)| |CRON_SCHEDULE| |If you want to periodic incremental backups on a schedule, provide it here. By default we just backup once and exit| -|FTP_PASSWORD| |Used to provide passwords for some backends. May not work without an attached TTY| |FULL_CRON_SCHEDULE| |If you want to periodic full backups on a schedule, provide it here. This requires an incremental cron schedule too| -|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| -|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)| +|OPT_ARGUMENTS| |Any additional arguments to provide to the restic command| +|RESTIC_PASSWORD| |Passphrase to use for encryption| +|PATH_TO_BACKUP|/data|The path to the directory you wish to backup| |RESTORE_ON_EMPTY_START| |Set this to "true" and if the `$PATH_TO_BACKUP` is empty, it will restore the latest backup. This can be used for auto recovery from lost data| |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| ## Tips -### Missing dependencies? -Please file a ticket! Duplicity supports a ton of backends and I haven't had a chance to validate that all dependencies are present in the image. If something is missing, let me know and I'll add it - -### Getting complains about no terminal for askpass? -Instead of using `FTP_PASSWORD`, add the password to the endpoint url - -### 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="/" -``` +## Hostnames +Hostname is used for identifying what you are backing up. You may want to specify this on your container. ### 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 diff --git a/backup.sh b/backup.sh index c456f34..adf7ab7 100755 --- a/backup.sh +++ b/backup.sh @@ -5,8 +5,7 @@ restic \ -r $BACKUP_DEST \ $OPT_ARGUMENTS \ backup \ - $PATH_TO_BACKUP \ - --tag $BACKUP_NAME \ + $PATH_TO_BACKUP if [ -n "$CLEANUP_COMMAND" ]; then restic \ diff --git a/docker-compose.yaml b/docker-compose.yaml index 56b2c1f..e2a43fb 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,9 +1,9 @@ version: '2' services: - duplicity: + restic: build: context: . - dockerfile: Dockerfile.ubuntu + dockerfile: Dockerfile volumes: - ./my-backups:/backups - ./my-data:/data:ro diff --git a/tests/docker-compose-test-s3.yml b/tests/docker-compose-test-s3.yml index 27cffb0..931a4ff 100644 --- a/tests/docker-compose-test-s3.yml +++ b/tests/docker-compose-test-s3.yml @@ -3,7 +3,7 @@ services: restic: build: context: .. - dockerfile: Dockerfile.${DOCKER_BASE} + dockerfile: Dockerfile entrypoint: "bash" command: "-c 'sleep 2 && /test.sh'" hostname: itest