Merge branch 'master' into master

This commit is contained in:
Max Konrädi
2025-04-23 14:48:20 +02:00
committed by GitHub
6 changed files with 86 additions and 6 deletions

View File

@@ -72,6 +72,7 @@ jobs:
uses: docker/build-push-action@v6
with:
context: .
platforms: linux/amd64,linux/arm64,linux/arm/v7
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

View File

@@ -2,6 +2,10 @@
## Unreleased
### Added
* Option to set the target folder backup
* Multi-platform image build
## v1.3.2 (restic 0.16.0)
### Changed

View File

@@ -1,12 +1,21 @@
FROM alpine:latest as rclone
FROM --platform=$TARGETPLATFORM docker.io/alpine:latest as rclone
ARG TARGETPLATFORM
RUN apk add wget
# Get rclone executable
ADD https://downloads.rclone.org/rclone-current-linux-amd64.zip /
RUN unzip rclone-current-linux-amd64.zip && mv rclone-*-linux-amd64/rclone /bin/rclone && chmod +x /bin/rclone
RUN if [ "$TARGETPLATFORM" = "linux/amd64" ]; then \
wget https://downloads.rclone.org/rclone-current-linux-amd64.zip && unzip rclone-current-linux-amd64.zip && mv rclone-*-linux-amd64/rclone /bin/rclone && chmod +x /bin/rclone; \
elif [ "$TARGETPLATFORM" = "linux/arm64" ]; then \
wget https://downloads.rclone.org/rclone-current-linux-arm64.zip && unzip rclone-current-linux-arm64.zip && mv rclone-*-linux-arm64/rclone /bin/rclone && chmod +x /bin/rclone; \
elif [ "$TARGETPLATFORM" = "linux/arm/v7" ]; then \
wget https://downloads.rclone.org/rclone-current-linux-arm-v7.zip && unzip rclone-current-linux-arm-v7.zip && mv rclone-*-linux-arm-v7/rclone /bin/rclone && chmod +x /bin/rclone; \
fi
FROM restic/restic:0.18.0
RUN apk add --update --no-cache curl mailx
FROM docker.io/restic/restic:0.18.0
RUN apk add --update --no-cache curl mailx shadow
COPY --from=rclone /bin/rclone /bin/rclone
@@ -35,6 +44,7 @@ ENV OS_PASSWORD=""
ENV OS_REGION_NAME=""
ENV OS_INTERFACE=""
ENV OS_IDENTITY_API_VERSION=3
ENV BACKUP_SOURCES=""
# openshift fix
RUN mkdir /.cache && \

58
Dockerfile.arm64 Normal file
View File

@@ -0,0 +1,58 @@
FROM docker.io/alpine:latest as rclone
# Get rclone executable
ADD https://downloads.rclone.org/rclone-current-linux-arm64.zip /
RUN unzip rclone-current-linux-arm64.zip && mv rclone-*-linux-arm64/rclone /bin/rclone && chmod +x /bin/rclone
FROM docker.io/restic/restic:0.18.0
RUN apk add --update --no-cache curl mailx shadow
COPY --from=rclone /bin/rclone /bin/rclone
RUN \
mkdir -p /mnt/restic /var/spool/cron/crontabs /var/log; \
touch /var/log/cron.log;
ENV RESTIC_REPOSITORY=/mnt/restic
ENV RESTIC_PASSWORD=""
ENV RESTIC_TAG=""
ENV NFS_TARGET=""
ENV BACKUP_CRON="0 */6 * * *"
ENV CHECK_CRON=""
ENV RESTIC_INIT_ARGS=""
ENV RESTIC_FORGET_ARGS=""
ENV RESTIC_JOB_ARGS=""
ENV RESTIC_DATA_SUBSET=""
ENV MAILX_ARGS=""
ENV OS_AUTH_URL=""
ENV OS_PROJECT_ID=""
ENV OS_PROJECT_NAME=""
ENV OS_USER_DOMAIN_NAME="Default"
ENV OS_PROJECT_DOMAIN_ID="default"
ENV OS_USERNAME=""
ENV OS_PASSWORD=""
ENV OS_REGION_NAME=""
ENV OS_INTERFACE=""
ENV OS_IDENTITY_API_VERSION=3
# openshift fix
RUN mkdir /.cache && \
chgrp -R 0 /.cache && \
chmod -R g=u /.cache && \
chgrp -R 0 /mnt && \
chmod -R g=u /mnt && \
chgrp -R 0 /var/spool/cron/crontabs/root && \
chmod -R g=u /var/spool/cron/crontabs/root && \
chgrp -R 0 /var/log/cron.log && \
chmod -R g=u /var/log/cron.log
# /data is the dir where you have to put the data to be backed up
VOLUME /data
COPY backup.sh /bin/backup
COPY check.sh /bin/check
COPY entry.sh /entry.sh
ENTRYPOINT ["/entry.sh"]
CMD ["tail","-fn0","/var/log/cron.log"]

View File

@@ -142,6 +142,7 @@ The container is set up by setting [environment variables](https://docs.docker.c
* `OS_REGION_NAME` - Optional. When using restic with OpenStack Swift container.
* `OS_INTERFACE` - Optional. When using restic with OpenStack Swift container.
* `OS_IDENTITY_API_VERSION` - Optional. When using restic with OpenStack Swift container.
* `BACKUP_SOURCES` - Optional. Set the folder that will be backed up.
## Volumes

View File

@@ -4,6 +4,12 @@ lastLogfile="/var/log/backup-last.log"
lastMailLogfile="/var/log/mail-last.log"
lastMicrosoftTeamsLogfile="/var/log/microsoft-teams-last.log"
if [ -n "$BACKUP_SOURCES" ]; then
backupSources="$BACKUP_SOURCES"
else
backupSources="/data"
fi
copyErrorLog() {
cp ${lastLogfile} /var/log/backup-error-last.log
}
@@ -31,7 +37,7 @@ 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 ${RESTIC_JOB_ARGS} --tag=${RESTIC_TAG?"Missing environment variable RESTIC_TAG"} >> ${lastLogfile} 2>&1
restic backup ${backupSources} ${RESTIC_JOB_ARGS} --tag=${RESTIC_TAG?"Missing environment variable RESTIC_TAG"} >> ${lastLogfile} 2>&1
backupRC=$?
logLast "Finished backup at $(date)"
if [[ $backupRC == 0 ]]; then