diff --git a/.nix/flake.lock b/.nix/flake.lock index 1058284..2fb1cf9 100644 --- a/.nix/flake.lock +++ b/.nix/flake.lock @@ -5,11 +5,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1689068808, - "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", - "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1692190437, - "narHash": "sha256-yJUZzmzSmDYb9ONPnMQDru66RjZgGQZRvj3tQebkexk=", + "lastModified": 1738297584, + "narHash": "sha256-AYvaFBzt8dU0fcSK2jKD0Vg23K2eIRxfsVXIPCW9a0E=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9b2aa98db6b10503666a50f4eb93b2fc0d57bde5", + "rev": "9189ac18287c599860e878e905da550aa6dec1cd", "type": "github" }, "original": { diff --git a/Dockerfile b/Dockerfile index 1661cea..7431fb8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,14 @@ -FROM kopia/kopia +FROM kopia/kopia:0.19 ENV DEBIAN_FRONTEND=noninteractive -RUN apt-get update && apt-get install -y cron && rm -rf /var/lib/apt/lists/* +RUN apt-get update && apt-get install -y gnupg2 wget lsb-release -ARG KOPIA_CRON_SCHEDULE="*/30 * * * *" +RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list +RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - + +RUN apt-get update && apt-get install -y cron postgresql-client-17 lftp && rm -rf /var/lib/apt/lists/* + +ARG KOPIA_CRON_SCHEDULE ENV KOPIA_CRON_SCHEDULE ${KOPIA_CRON_SCHEDULE} ARG KOPIA_USERNAME @@ -15,6 +20,9 @@ ENV KOPIA_HOSTNAME ${KOPIA_HOSTNAME} ARG KOPIA_PASSWORD ENV KOPIA_PASSWORD ${KOPIA_PASSWORD} +ARG KOPIA_BACKUP_PATH=/backup +ENV KOPIA_BACKUP_PATH ${KOPIA_BACKUP_PATH} + ADD run-backup.sh / ADD entrypoint.sh / diff --git a/build-and-push.sh b/build-and-push.sh index dc606f2..9755429 100755 --- a/build-and-push.sh +++ b/build-and-push.sh @@ -1,9 +1,10 @@ #!/usr/bin/env sh -SKIP=no-commit-to-branch,prettier CI=false npx semantic-release +VERSION="0.15.0" -VERSION=`npx semantic-release --version` +docker login git.molez.org -docker image build --tag git.molez.org/mandlm/kopia:${VERSION} --tag git.molez.org/mandlm/kopia:latest . -docker image push git.molez.org/mandlm/kopia:${VERSION} +docker image build --tag git.molez.org/mandlm/kopia:"${VERSION}" --tag git.molez.org/mandlm/kopia:latest . + +docker image push git.molez.org/mandlm/kopia:"${VERSION}" docker image push git.molez.org/mandlm/kopia:latest diff --git a/entrypoint.sh b/entrypoint.sh index 9fb6c4b..6f688b2 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,19 +1,21 @@ -#!/bin/sh +#!/bin/bash -CRONTAB=/etc/cron.d/kopia-backup +if [[ -z ${KOPIA_CRON_SCHEDULE} ]]; +then + echo "Running in one-shot mode" -echo "Opening kopia repository" + /run-backup.sh +else + CRONTAB=/etc/cron.d/kopia-backup -kopia repository connect filesystem \ - --path /repository \ - --override-hostname ${KOPIA_HOSTNAME} \ - --override-username ${KOPIA_USERNAME} + printenv > /etc/environment -echo "Running cron with schedule ${KOPIA_CRON_SCHEDULE}" + echo "Running cron with schedule ${KOPIA_CRON_SCHEDULE}" -echo "${KOPIA_CRON_SCHEDULE} /run-backup.sh > /var/log/kopia-backup.log 2>&1" > ${CRONTAB} -chmod 0644 ${CRONTAB} -crontab ${CRONTAB} + echo "${KOPIA_CRON_SCHEDULE} /run-backup.sh > /var/log/kopia-backup.log 2>&1" > ${CRONTAB} + chmod 0644 ${CRONTAB} + crontab ${CRONTAB} -touch /var/log/kopia-backup.log -cron && tail -f /var/log/kopia-backup.log + touch /var/log/kopia-backup.log + cron && tail -f /var/log/kopia-backup.log +fi diff --git a/package-lock.json b/package-lock.json index 0b8d4ec..7e6b343 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "kopia", - "version": "0.5.1", + "version": "0.14.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "kopia", - "version": "0.5.1", + "version": "0.14.0", "devDependencies": { "@semantic-release/git": "^10.0.1", "semantic-release": "^21.0.2" diff --git a/package.json b/package.json index ff3b86f..e2046fa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "kopia", - "version": "0.5.1", + "version": "0.14.0", "private": true, "devDependencies": { "@semantic-release/git": "^10.0.1", diff --git a/run-backup.sh b/run-backup.sh index 6629efc..13f6890 100755 --- a/run-backup.sh +++ b/run-backup.sh @@ -1,3 +1,25 @@ -#!/bin/sh +#!/bin/bash -kopia snapshot create /backup +echo "Running backup at $(date)" + +if [[ -v KOPIA_PG_DATABASE ]]; +then + echo "Dumping database ${KOPIA_PG_DATABASE}" + PGPASSWORD=$KOPIA_PG_PASSWORD pg_dump --host=$KOPIA_PG_HOST --username=$KOPIA_PG_USER $KOPIA_PG_DATABASE > /backup/database/$KOPIA_PG_DATABASE.sqldump || exit 1 +fi + +if [[ -v KOPIA_FTP_HOST ]]; +then + echo "Downloading from ftp server ${KOPIA_FTP_HOST}" + + lftp -u "$KOPIA_FTP_USER","$KOPIA_FTP_PASSWORD" -e "set ssl:verify-certificate no; mirror --delete --parallel=4 --use-pget-n=10 / /backup/ftp;" $KOPIA_FTP_HOST || exit 1 +fi + +kopia repository connect filesystem \ + --path /repository \ + --override-hostname ${KOPIA_HOSTNAME} \ + --override-username ${KOPIA_USERNAME} + +kopia snapshot create ${KOPIA_BACKUP_PATH} + +echo "Finished backup at $(date)"