Compare commits
3 Commits
6db128c80a
...
cd307aeafd
| Author | SHA1 | Date | |
|---|---|---|---|
| cd307aeafd | |||
| ad09b6c906 | |||
| 6bdf45534f |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
dockerBuildAndPush.sh
|
||||||
14
BackupSideCar.Dockerfile
Normal file
14
BackupSideCar.Dockerfile
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
FROM alpine:3.17
|
||||||
|
|
||||||
|
# Setup correct TZ
|
||||||
|
RUN apk add alpine-conf
|
||||||
|
RUN /sbin/setup-timezone -z UTC
|
||||||
|
|
||||||
|
RUN apk add restic curl
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY ./src/entry.sh /app/
|
||||||
|
COPY ./src/backup.sh /app/
|
||||||
|
|
||||||
|
CMD [ "/bin/sh", "entry.sh" ]
|
||||||
17
README.md
17
README.md
@@ -1,3 +1,20 @@
|
|||||||
# backupsidecar
|
# backupsidecar
|
||||||
|
|
||||||
Backup sidecar that automatically creates backups of one PVC and saves it to another PVC via restic
|
Backup sidecar that automatically creates backups of one PVC and saves it to another PVC via restic
|
||||||
|
|
||||||
|
## Function
|
||||||
|
A cronjob inside the container runs in the configured interval creating the backup and purging old backups.
|
||||||
|
A notification is sent to gotify on completion of the backup or on error of either the backup or purge.
|
||||||
|
|
||||||
|
## Environment Variables
|
||||||
|
| ENV Variable | Required |Description| Example Value
|
||||||
|
|--------------|----------|--------------|-
|
||||||
|
|INTERVAL|yes|cronjob interval string|15 14 * * *|
|
||||||
|
|RESTIC_REPOSITORY|yes|path of the restic repository|/mnt/backups/gitea|
|
||||||
|
|SOURCEDIR |yes|path of the path to backup|/mnt/toBackup/|
|
||||||
|
|KEEPLAST|yes|number of increments to keep (keep in mind that the number of backups to keep correlates with the interval in which they are created) |10|
|
||||||
|
|RESTIC_PASSWORD|yes|password for the restic repository|******|
|
||||||
|
|RUNONSTART|no|set to true to force a backup at the start of the container|true|
|
||||||
|
|GOTIFYHOST|yes|URL of the gotify server (without trailing slash)|https://gotify.example.com|
|
||||||
|
|GOTIFYTOKEN|yes|gotify app token|******|
|
||||||
|
|GOTIFYTOPIC|yes|gotify topic to include in the notification|gotify|
|
||||||
55
example-deployment.yaml
Normal file
55
example-deployment.yaml
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: backup-sidecar
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: backup-sidecar
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: backup-sidecar
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: backup-sidecar
|
||||||
|
image: gitea.t000-n.de/t.behrendt/backupsidecar:latest
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /mnt/toBackup
|
||||||
|
name: data
|
||||||
|
readOnly: true
|
||||||
|
- mountPath: /mnt/backups/gitea
|
||||||
|
name: nfs-backup
|
||||||
|
subPath: gitea
|
||||||
|
env:
|
||||||
|
- name: INTERVAL
|
||||||
|
value: "15 14 * * *"
|
||||||
|
- name: RESTIC_REPOSITORY
|
||||||
|
value: /mnt/backups/gitea
|
||||||
|
- name: SOURCEDIR
|
||||||
|
value: "/mnt/toBackup/"
|
||||||
|
- name: KEEPLAST
|
||||||
|
value: "100"
|
||||||
|
- name: RESTIC_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: restic-credentials
|
||||||
|
key: password
|
||||||
|
- name: RUNONSTART
|
||||||
|
value: "false"
|
||||||
|
- name: GOTIFYHOST
|
||||||
|
value: "https://<gotify-URL>"
|
||||||
|
- name: GOTIFYTOKEN
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: gotify-credentials
|
||||||
|
key: token
|
||||||
|
- name: GOTIFYTOPIC
|
||||||
|
value: "gitea"
|
||||||
|
volumes:
|
||||||
|
- name: data
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: data
|
||||||
|
- name: nfs-backup
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: backup-nfs
|
||||||
40
src/backup.sh
Normal file
40
src/backup.sh
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
GOTIFYURL="$GOTIFYHOST/message?token=$GOTIFYTOKEN"
|
||||||
|
|
||||||
|
echo "$(date +"%Y-%m-%dT%T") - Starting backup"
|
||||||
|
|
||||||
|
restic backup \
|
||||||
|
--verbose \
|
||||||
|
$SOURCEDIR
|
||||||
|
|
||||||
|
RESTIC_BACKUP_RETURN=$?
|
||||||
|
|
||||||
|
if [ $RESTIC_BACKUP_RETURN -eq 0 ]; then
|
||||||
|
MSG_BACKUP_SUCCESS="Backup successful"
|
||||||
|
echo "$(date +"%Y-%m-%dT%T") - $MSG_BACKUP_SUCCESS"
|
||||||
|
curl -s -X POST "$GOTIFYURL" -F "title=$GOTIFYTOPIC" -F "message=$MSG_BACKUP_SUCCESS"
|
||||||
|
else
|
||||||
|
MSG_BACKUP_ERR="Backup failed with error code $RESTIC_BACKUP_RETURN"
|
||||||
|
echo "$(date +"%Y-%m-%dT%T") - MSG_BACKUP_ERR"
|
||||||
|
curl -s -X POST "$GOTIFYURL" -F "title=$GOTIFYTOPIC" -F "message=$MSG_BACKUP_ERR"
|
||||||
|
exit $RESTIC_BACKUP_RETURN
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
MSG_PURGE_START="$(date +"%Y-%m-%dT%T") - Removing old backups"
|
||||||
|
echo $MSG_PURGE_START
|
||||||
|
|
||||||
|
restic forget --keep-last $KEEPLAST --prune
|
||||||
|
RESTIC_PURGE_RETURN=$?
|
||||||
|
|
||||||
|
if [ $RESTIC_PURGE_RETURN -eq 0 ]; then
|
||||||
|
echo "$(date +"%Y-%m-%dT%T") - Purge successful"
|
||||||
|
else
|
||||||
|
MSG_PURGE_ERR="Purge failed with error code $MSG_PURGE_ERR"
|
||||||
|
echo "$(date +"%Y-%m-%dT%T") - $MSG_PURGE_ERR"
|
||||||
|
curl -s -X POST "$GOTIFYURL" -F "title=$GOTIFYTOPIC" -F "message=$MSG_PURGE_ERR"
|
||||||
|
exit $RESTIC_PURGE_RETURN
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$(date +"%Y-%m-%dT%T") - Going back to sleep..."
|
||||||
18
src/entry.sh
Normal file
18
src/entry.sh
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
mkdir /etc/cron.d
|
||||||
|
touch /etc/cron.d/backup
|
||||||
|
echo "$INTERVAL /bin/sh /app/backup.sh" > /etc/cron.d/backup
|
||||||
|
|
||||||
|
# change ownership and make the cron known to crontab
|
||||||
|
chmod 0644 /etc/cron.d/backup && crontab /etc/cron.d/backup
|
||||||
|
|
||||||
|
|
||||||
|
if [ $RUNONSTART = 'true' ]; then
|
||||||
|
echo $(date +"%Y-%m-%dT%T") "- Running initial backup"
|
||||||
|
/bin/sh /app/backup.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Wait until infinity
|
||||||
|
echo $(date +"%Y-%m-%dT%T") "- Starting cron"
|
||||||
|
crond -f
|
||||||
Reference in New Issue
Block a user