From 622c84c6be57cc2c63b68ac95afb42e704dfa9d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1rcio=20Fernandes?= Date: Sun, 4 May 2025 00:48:13 +0000 Subject: [PATCH] migrate borg backups to ssh backup services --- README.md | 29 +++++++++++++------------ backups/borgbackup-offsite-cronjob.yaml | 12 ++++++---- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index fef5a9a..136683b 100644 --- a/README.md +++ b/README.md @@ -5,18 +5,19 @@ Welcome to public repository of my [Git Server](https://git.limbosolutions.com) Using [gitea](https://git.limbosolutions.com/kb/gitea) as git server. - [Setup](#setup) - - [kubernetes Namespace](#kubernetes-namespace) - - [Add Help Chart](#add-help-chart) - - [Update Helm charts](#update-helm-charts) - - [Install / Update](#install--update) - - [ssh ingress](#ssh-ingress) + - [kubernetes Namespace](#kubernetes-namespace) + - [Add Help Chart](#add-help-chart) + - [Update Helm charts](#update-helm-charts) + - [Install / Update](#install--update) + - [ssh ingress](#ssh-ingress) + - [Backups](#backups) - - [secrets](#secrets) - - [Proxmox Backup Server (kubernetes cron job)](#proxmox-backup-server-kubernetes-cron-job) - - [Borg and Offsite sync (kubernetes cron job)](#borg-and-offsite-sync-kubernetes-cron-job) - - [borgbackup sidekick](#borgbackup-sidekick) - - [Create borgbackup-sidekick pod](#create-borgbackup-sidekick-pod) - - [Remove borgbackup-sidekick pod](#remove-borgbackup-sidekick-pod) + - [secrets](#secrets) + - [Proxmox Backup Server (kubernetes cron job)](#proxmox-backup-server-kubernetes-cron-job) + - [Borg and Offsite sync (kubernetes cron job)](#borg-and-offsite-sync-kubernetes-cron-job) + - [borgbackup sidekick](#borgbackup-sidekick) + - [Create borgbackup-sidekick pod](#create-borgbackup-sidekick-pod) + - [Remove borgbackup-sidekick pod](#remove-borgbackup-sidekick-pod) ## Setup @@ -63,7 +64,7 @@ kubectl apply -f ./gitea/ssh-ingress.yaml ### secrets -``` bash +```bash set -a source ./backups/.env set +a @@ -72,8 +73,8 @@ envsubst < ./backups/gitea-backup-secrets.yaml | kubectl apply -n git-limbosolut SSH_ID_RSA=$(echo -n "$SSH_ID_RSA" | base64 -w 0) BORG_KEY_FILE=$(echo -n "$BORG_KEY_FILE" | base64 -w 0) -kubectl patch secret gitea-backup-secret --patch "{\"data\":{\"SSH_ID_RSA\":\"$SSH_ID_RSA\"}}" -kubectl patch secret gitea-backup-secret --patch "{\"data\":{\"BORG_KEY_FILE\":\"$BORG_KEY_FILE\"}}" +kubectl patch secret gitea-backup-secret --patch "{\"data\":{\"SSH_ID_RSA\":\"$SSH_ID_RSA\"}}" -n git-limbosolutions-com +kubectl patch secret gitea-backup-secret --patch "{\"data\":{\"BORG_KEY_FILE\":\"$BORG_KEY_FILE\"}}" -n git-limbosolutions-com ``` ### Proxmox Backup Server (kubernetes cron job) diff --git a/backups/borgbackup-offsite-cronjob.yaml b/backups/borgbackup-offsite-cronjob.yaml index a3a7a0b..2179dd2 100644 --- a/backups/borgbackup-offsite-cronjob.yaml +++ b/backups/borgbackup-offsite-cronjob.yaml @@ -61,7 +61,7 @@ spec: - name: REPO_SYNC_MAX_SIZE - value: "4294967296" # 4GB + value: "6442450944" # 6GB - name: BORG_KEY_FILE value: /root/.borg/key @@ -73,6 +73,10 @@ spec: SCRIPT_START_TIME=$(date +%s) + # while true; do + # sleep 5 + # done + borg create ${BORG_REPO}::postgresql-export-$(date +%Y%m%d%H%M%S) /data/postgresql-export borg create ${BORG_REPO}::gitea-data-$(date +%Y%m%d%H%M%S) /data/gitea-data @@ -83,16 +87,16 @@ spec: borg compact ${BORG_REPO} # check repo size - REPO_SIZE_IN_BYTES=$(${BORG_RSH} mf@backupsrv01.dev.lan "du -b ~/borg-repos/git.limbosolutions.com --max-depth=0 | cut -f1 ") + REPO_SIZE_IN_BYTES=$(${BORG_RSH} mf@backupsrv01.dev.lan -p 2222 "du -b ~/borg-repos/git.limbosolutions.com -d 0 | cut -f1 ") echo "Repository size: $((REPO_SIZE_IN_BYTES / 1024 / 1024)) MB" if [ $REPO_SIZE_IN_BYTES -gt $REPO_SYNC_MAX_SIZE ]; then \ - echo 'Repository size exceeds $REPO_SYNC_MAX_SIZE'; + echo "ERROR: Repository size exceeds $REPO_SYNC_MAX_SIZE"; exit 1; else # Repository size is within limits for offsite sync # ssh to backup server and enforce rclone to onedrive - ${BORG_RSH} mf@backupsrv01.dev.lan \ + ${BORG_RSH} mf@backupsrv01.dev.lan -p 2222 \ "rclone sync ~/borg-repos/git.limbosolutions.com mf.onedrive:.backups/git.limbosolutions.com/borg" && \ SCRIPT_DURATION=$(($(date +%s) - SCRIPT_START_TIME)) && \ echo "INFO: Finished Backup of git.limbosolutions.com (offsite) ($((SCRIPT_DURATION / 60 / 60)):$((SCRIPT_DURATION / 60)):$((SCRIPT_DURATION % 60))) "