From bd9987a124c54a1a7f019c1592a9d03584de638f Mon Sep 17 00:00:00 2001 From: 10 <10@users.noreply.gitlab.com> Date: Fri, 16 Nov 2018 01:39:51 +0100 Subject: [PATCH] initial commit --- .gitlab-ci.yml | 23 +++++++++++++++++++++++ Dockerfile | 15 +++++++++++++++ README.md | 22 ++++++++++++++++++++++ backup.sh | 9 +++++++++ start.sh | 28 ++++++++++++++++++++++++++++ 5 files changed, 97 insertions(+) create mode 100644 .gitlab-ci.yml create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 backup.sh create mode 100644 start.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..20d2935 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,23 @@ +tages: + - build:docker + +variables: + IMAGE_NAME: "$CI_REGISTRY_IMAGE/bw_backup" + +.docker_login: &docker_login + docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY + +.docker_build_template: &docker_build + stage: build:docker + image: docker:latest + services: + - docker:dind + tags: + - shared + +build: + <<: *docker_build + script: + - *docker_login + - docker build --pull -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" . + - docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..bf9b543 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +FROM alpine:latest + +RUN apk add --update \ + sqlite + +COPY start.sh backup.sh / + +ENV DB_FILE /data/db.sqlite3 +ENV BACKUP_FILE /data/db-backup.sqlite3 +ENV CRON_TIME "* * * * *" + +RUN chmod 700 /start.sh /backup.sh + +CMD /start.sh + diff --git a/README.md b/README.md new file mode 100644 index 0000000..1d87655 --- /dev/null +++ b/README.md @@ -0,0 +1,22 @@ +# bitwarden_rs Backup +--- + +Docker Containers for bitwarden_rs Backup. + +## Usage +```sh +docker run --name bitwarden_backup --volumes-from=bitwarden registry.gitlab.com/1o/bitwarden_rs-backup:bw-backup +``` + +Example for hourly backups +``` +docker run --name bitwarden_backup --volumes-from=bitwarden -e CRON_TIME="0 * * * *" registry.gitlab.com/1o/bitwarden_rs-backup:bw-backup +``` + +## Environment variables +| ENV | Description | +| ----- | ----- | +| DB_FILE | Path to the Bitwarden sqlite3 database | +| BACKUP_FILE | Path to the desired backup location | +| CRON_TIME | Cronjob format "Minute Hour Day_of_month Month_of_year Day_of_week Year" | + diff --git a/backup.sh b/backup.sh new file mode 100644 index 0000000..c4843e8 --- /dev/null +++ b/backup.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +/usr/bin/sqlite3 $DB_FILE ".backup $BACKUP_FILE" +if [ $? -eq 0 ] +then + echo "$(date) - Backup successfull" +else + echo "$(date) - Backup unsuccessfull" +fi diff --git a/start.sh b/start.sh new file mode 100644 index 0000000..c3c9e17 --- /dev/null +++ b/start.sh @@ -0,0 +1,28 @@ +#!/bin/sh + +DB_FILE=$DB_FILE +BACKUP_FILE=$BACKUP_FILE +CRON_TIME=$CRON_TIME +BACKUP_CMD=/backup.sh #'/usr/bin/sqlite3 '"$DB_FILE"' ".backup '"$BACKUP_FILE"'"' +CRONFILE=/etc/crontabs/root +LOGFILE=/var/log/backup.log + +if [ ! -e "$DB_FILE" ] +then + echo "Database $DB_FILE not found!\nPlease check if you mounted the bitwarden_rs volume with '--volumes-from=bitwarden'"! + exit 1; +fi + +if [ $(grep -c "$BACKUP_CMD" "$CRONFILE") -eq 0 ] +then + echo "$CRON_TIME $BACKUP_CMD >> $LOGFILE" >> "$CRONFILE" +fi + +pgrep crond > /dev/null 2>&1 +if [ $? -ne 0 ] +then + /usr/sbin/crond -L /var/log/cron.log +fi + +echo "$(date) - Container started" > "$LOGFILE" +tail -F "$LOGFILE"