23 Commits

Author SHA1 Message Date
Tobias Kaupat
daf520b039 Update Dockerfile 2019-02-06 12:27:52 +01:00
Tobias Kaupat
ac17d10585 Update README.md
document AWS S3 parameters
2019-02-06 11:33:15 +01:00
Tobias Kaupat
4130af9540 Update backup.sh
log restic repository and AWS ID
2019-02-06 11:20:16 +01:00
Sergei Silnov
f500b08d94 Update to version 0.9.3 2018-10-22 22:44:44 +02:00
Tobias Kaupat
fa45e05b19 Update README.md 2018-07-01 20:24:48 +02:00
Tobias Kaupat
527ba2dd4f Merge pull request #19 from NickBusey/master
Fixing default cron value
2018-07-01 20:16:44 +02:00
Nick Busey
effd03a102 Fixing cron 2018-06-20 15:43:55 -06:00
Tobias Kaupat
a6a6570d78 Merge pull request #16 from KalleDK/patch-1
Update Dockerfile
2018-06-05 20:06:08 +02:00
Kalle Møller
d9246419f9 Update Dockerfile
No reason to run an update when cache wouldn't be used anyways
2018-06-05 17:36:15 +02:00
Tobias Kaupat
9a3bf04654 Merge pull request #13 from mulmschneider/patch-1
Fix typo in variable name
2018-02-26 17:07:21 +01:00
Martin Ulmschneider
1b2d36f3c4 Fix typo in variable name
VERION->VERSION
2018-02-24 23:16:21 +01:00
Tobias Kaupat
bb10ca8b31 Merge pull request #12 from xoes/master
Some Improvements (from my Point of View)
2018-02-12 14:53:55 +01:00
David Arnold
f081131560 [FIX] get root cert into the busybox 2018-02-11 16:50:04 -05:00
David Arnold
0eb6656705 [FIX] use BusyBox with glibc for the remaining dynamically linked libs 2018-02-11 16:50:04 -05:00
David Arnold
918b7f656a [IMP] kill service if sync fails
This, used in combination with a scheduler, clearly marks "problem" to the
cluster operator
2018-02-11 16:50:04 -05:00
David Arnold
3b400123d3 [REF] base on busybox 2018-02-11 16:50:04 -05:00
David Arnold
bf045a4be3 [CLEAN] bakcup is already git update-index --chmod=+xed 2018-02-11 16:50:04 -05:00
David Arnold
9e028df9a7 [IMP] implement two stage build 2018-02-11 12:17:53 -05:00
Tobias Kaupat
d896924040 Merge pull request #11 from stas2k/master
Update to latest golang, add RESTIC_JOB_ARGS
2018-02-04 15:06:07 +01:00
Stas
d0cea127a5 add RESTIC_JOB_ARGS env variable to specify extra restic options 2018-02-03 21:51:17 +01:00
Stas
013efd00a9 clatify container UTC time zone 2018-02-03 21:48:38 +01:00
Stas
bb1d2e202b update to latest golang base 2018-02-03 21:44:02 +01:00
Tobias Kaupat
e5f81c232e Update backup.sh 2018-01-29 22:31:36 +01:00
4 changed files with 33 additions and 19 deletions

View File

@@ -1,36 +1,36 @@
FROM golang:1.7-alpine
MAINTAINER info@lobaro.com
FROM alpine as certs
RUN apk add --no-cache ca-certificates
RUN echo http://nl.alpinelinux.org/alpine/v3.4/community >> /etc/apk/repositories
RUN apk add --no-cache git nfs-utils openssh fuse
RUN git clone https://github.com/restic/restic \
&& cd restic \
&& go run build.go \
&& cp restic /usr/local/bin/
RUN apk del git
RUN mkdir /mnt/restic
FROM busybox:glibc
COPY --from=certs /etc/ssl/certs /etc/ssl/certs
# Get restic executable
ENV RESTIC_VERSION=0.9.4
ADD https://github.com/restic/restic/releases/download/v${RESTIC_VERSION}/restic_${RESTIC_VERSION}_linux_amd64.bz2 /
RUN bzip2 -d restic_${RESTIC_VERSION}_linux_amd64.bz2 && mv restic_${RESTIC_VERSION}_linux_amd64 /bin/restic && chmod +x /bin/restic
RUN mkdir -p /mnt/restic /var/spool/cron/crontabs /var/log
ENV RESTIC_REPOSITORY=/mnt/restic
ENV RESTIC_PASSWORD=""
ENV RESTIC_TAG=""
ENV NFS_TARGET=""
# By default backup every 6 hours
ENV BACKUP_CRON="* */6 * * *"
ENV BACKUP_CRON="0 */6 * * *"
ENV RESTIC_FORGET_ARGS=""
ENV RESTIC_JOB_ARGS=""
# /data is the dir where you have to put the data to be backed up
VOLUME /data
COPY backup.sh /bin/backup
RUN chmod +x /bin/backup
COPY entry.sh /entry.sh
RUN touch /var/log/cron.log
WORKDIR "/"
#ENTRYPOINT ["ls"]
ENTRYPOINT ["/entry.sh"]

View File

@@ -19,6 +19,8 @@ Latest (experimental)
docker pull lobaro/restic-backup-docker
```
Please don't hesitate to report any issue you find. **Thanks.**
# Test the container
Clone this repository
@@ -66,12 +68,15 @@ The container is setup by setting [environment variables](https://docs.docker.co
## Environment variables
* `RESTIC_REPOSITORY` - the location of the restic repository. Default `/mnt/restic`
* `RESTIC_REPOSITORY` - the location of the restic repository. Default `/mnt/restic`. For S3: `s3:https://s3.amazonaws.com/BUCKET_NAME`
* `RESTIC_PASSWORD` - the password for the restic repository. Will also be used for restic init during first start when the repository is not initialized.
* `RESTIC_TAG` - Optional. To tag the images created by the container.
* `NFS_TARGET` - Optional. If set the given NFS is mounted, i.e. `mount -o nolock -v ${NFS_TARGET} /mnt/restic`. `RESTIC_REPOSITORY` must remain it's default value!
* `BACKUP_CRON` - A cron expression to run the backup. Default: `* */6 * * *` aka every 6 hours.
* `BACKUP_CRON` - A cron expression to run the backup. Note: cron daemon uses UTC time zone. Default: `0 */6 * * *` aka every 6 hours.
* `RESTIC_FORGET_ARGS` - Optional. Only if specified `restic forget` is run with the given arguments after each backup. Example value: `-e "RESTIC_FORGET_ARGS=--prune --keep-last 10 --keep-hourly 24 --keep-daily 7 --keep-weekly 52 --keep-monthly 120 --keep-yearly 100"`
* `RESTIC_JOB_ARGS` - Optional. Allows to specify extra arguments to the back up job such as limiting bandwith with `--limit-upload` or excluding file masks with `--exclude`.
* `AWS_ACCESS_KEY_ID` - Optional. When using restic with AWS S3 storage.
* `AWS_SECRET_ACCESS_KEY` - Optional. When using restic with AWS S3 storage.
## Volumes

9
backup.sh Normal file → Executable file
View File

@@ -17,10 +17,12 @@ echo "Starting Backup at $(date)" >> ${lastLogfile}
logLast "BACKUP_CRON: ${BACKUP_CRON}"
logLast "RESTIC_TAG: ${RESTIC_TAG}"
logLast "RESTIC_FORGET_ARGS: ${RESTIC_FORGET_ARGS}"
logLast "RESTIC_JOB_ARGS: ${RESTIC_JOB_ARGS}"
logLast "RESTIC_REPOSITORY: ${RESTIC_REPOSITORY}"
logLast "AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}"
# Do not save full backup log to logfile but to backup-last.log
restic backup /data --tag=${RESTIC_TAG?"Missing environment variable RESTIC_TAG"} >> ${lastLogfile} 2>&1
restic backup /data ${RESTIC_JOB_ARGS} --tag=${RESTIC_TAG?"Missing environment variable RESTIC_TAG"} >> ${lastLogfile} 2>&1
rc=$?
logLast "Finished backup at $(date)"
if [[ $rc == 0 ]]; then
@@ -29,6 +31,7 @@ else
echo "Backup Failed with Status ${rc}"
restic unlock
copyErrorLog
kill 1
fi
if [ -n "${RESTIC_FORGET_ARGS}" ]; then
@@ -46,4 +49,4 @@ if [ -n "${RESTIC_FORGET_ARGS}" ]; then
fi
end=`date +%s`
echo "Finished Backup at $(date +"%Y-%m-%d %H:%M:%S") after $((end-start)) sconds"
echo "Finished Backup at $(date +"%Y-%m-%d %H:%M:%S") after $((end-start)) seconds"

View File

@@ -3,6 +3,12 @@ set -e
echo "Starting container ..."
RESTIC_CMD=restic
if [ -n "${ROOT_CERT}" ]; then
RESTIC_CMD="${RESTIC_CMD} --cert ${ROOT_CERT}"
fi
if [ -n "${NFS_TARGET}" ]; then
echo "Mounting NFS based on NFS_TARGET: ${NFS_TARGET}"
mount -o nolock -v ${NFS_TARGET} /mnt/restic