11# WSC Backup Cronjob for Database and Files with simple Shell-Script
22#
3- # Requirements: kubectl, jq, tar, gzip, mariadb-connector-c, mariadb-client (mysql-client)
3+ # Requirements: kubectl, jq, tar, gzip, mariadb-connector-c, mariadb-client (mysql-client), openssh-client + sshpass
44#
55# Docs (WSC Backup):
66# * https://manual.woltlab.com/en/backup/
77# * https://manual.woltlab.com/de/backup/
88#
99# NOTE:
10- # * The script below is just an example . Adapt it to your requirements and TEST backup and recovery!!
10+ # * The script below is just an EXAMPLE . Adapt it to your requirements and TEST backup and recovery!!
1111# * NO guarantee!
12- # * This script does NOT make remote backups! (via SSH/SFTP, ...)
1312#
1413
1514---
8281 requests :
8382 storage : 20Gi
8483
84+ # ---
85+ #
86+ # apiVersion: v1
87+ # kind: ConfigMap
88+ # metadata:
89+ # name: wsc-backup-env-config
90+ # namespace: wsc
91+ # labels:
92+ # app.kubernetes.io/name: wsc-backup
93+ # app.kubernetes.io/component: cronjob
94+ # app.kubernetes.io/part-of: wsc
95+ # data:
96+ # # Backup CleanUp
97+ # BACKUP_CLEANUP_ENABLED: "0"
98+ # BACKUP_CLEANUP_DAYS: "14"
99+ # # Backup to Remote Storage (SSH/SFTP)
100+ # SSH_ENABLED: "0"
101+ # SSH_HOST: ""
102+ # SSH_PORT: "22"
103+ # SSH_BACKUP_PATH: "./"
104+ #
105+ # ---
106+ #
107+ # # when you want using "data" instead "stringData" then ...
108+ # # convert string to base64 in Linux: "echo -n 'value' | base64"
109+ #
110+ # apiVersion: v1
111+ # kind: Secret
112+ # metadata:
113+ # name: wsc-backup-env-secret
114+ # namespace: wsc
115+ # labels:
116+ # app.kubernetes.io/name: wsc-backup
117+ # app.kubernetes.io/component: cronjob
118+ # app.kubernetes.io/part-of: wsc
119+ # stringData:
120+ # # Backup to Remote Storage (SSH/SFTP)
121+ # SSH_USERNAME: ""
122+ # SSH_PASSWORD: ""
123+
85124---
86125
87126apiVersion : batch/v1
@@ -130,13 +169,13 @@ spec:
130169 - /bin/sh
131170 - -c
132171 - " sleep 5; exit 0"
133- # envFrom:
134- # - configMapRef:
135- # name: wsc-backup-env-config
136- # optional: true
137- # - secretRef:
138- # name: wsc-backup-env-secret
139- # optional: true
172+ envFrom :
173+ - configMapRef :
174+ name : wsc-backup-env-config
175+ optional : true
176+ - secretRef :
177+ name : wsc-backup-env-secret
178+ optional : true
140179 env :
141180 - name : NAMESPACE
142181 valueFrom :
@@ -197,7 +236,7 @@ data:
197236 backup-script.sh : |-
198237 #!/bin/sh
199238
200- # Requirements: kubectl, jq, tar, gzip, mariadb-connector-c, mariadb-client (mysql-client)
239+ # Requirements: kubectl, jq, tar, gzip, mariadb-connector-c, mariadb-client (mysql-client), openssh-client + sshpass
201240
202241 set -eu
203242
@@ -220,6 +259,17 @@ data:
220259 # Webserver / Files
221260 : "${WEB_CONTAINER_HELPER_NAME:="helper"}" # WEB Container Helper Name (with shell and tar/gzip and access to webfolder)
222261 : "${WEB_CONTAINER_HELPER_BACKUP_PATH:="/data"}" # WEB Container Helper Backup Path
262+ # Backup CleanUp
263+ : "${BACKUP_CLEANUP_ENABLED:=0}"
264+ : "${BACKUP_CLEANUP_DAYS:=30}"
265+ # Backup to Remote Storage (SSH/SFTP)
266+ : "${SSH_ENABLED:="0"}" # Enabled SSH/SFTP Backup, default: 0 for disabled
267+ : "${SSH_HOST:=""}" # SSH Host, example: u123456.your-storagebox.de
268+ : "${SSH_PORT:="22"}" # SSH Port (default: 22)
269+ : "${SSH_USERNAME:=""}" # SSH Username, example: u123456-sub11
270+ : "${SSH_PASSWORD:=""}" # SSH Password
271+ : "${SSH_BACKUP_PATH:="./"}" # SSH Backup Path Remote
272+
223273
224274 # -----------------------------------------------------
225275
@@ -281,9 +331,25 @@ data:
281331 echo ">> WARNING: Files Backup process is skipped!"
282332 fi
283333
284- # list backups
334+ # list local backups
285335 echo ">> list ${BACKUP_PATH_LOCAL}"
286336 ls -lahR ${BACKUP_PATH_LOCAL}
337+
338+ if [ "$(find "${BACKUP_PATH_LOCAL}" -type f -name "wsc_backup_${BACKUP_DATE}*.gz" -print 2>/dev/null)" -a "$SSH_ENABLED" -eq "1" -a -n "$SSH_HOST" -a -n "$SSH_PORT" -a -n "$SSH_USERNAME" -a -n "$SSH_PASSWORD" -a -n "$SSH_BACKUP_PATH" ]; then
339+ echo ">> Copy wsc_backup_${BACKUP_DATE}*.gz files to ${SSH_HOST} ..."
340+ SSH_VERIFY_HOST_KEY_STRING="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -q"
341+ sshpass -p "${SSH_PASSWORD}" sftp -P ${SSH_PORT} ${SSH_VERIFY_HOST_KEY_STRING} -r ${SSH_USERNAME}@${SSH_HOST}:${SSH_BACKUP_PATH} << SFTPCOMMANDS
342+ put ${BACKUP_PATH_LOCAL}/wsc_backup_${BACKUP_DATE}*
343+ SFTPCOMMANDS
344+ fi
345+
346+ if [ "$BACKUP_CLEANUP_ENABLED" -eq "1" -a "$BACKUP_CLEANUP_DAYS" -ge 0 ]; then
347+ echo ">> Backups older than $BACKUP_CLEANUP_DAYS days will be deleted ..."
348+ find "$BACKUP_PATH_LOCAL" -type f -mtime +"$BACKUP_CLEANUP_DAYS" -print -delete
349+ # list local backups
350+ echo ">> list ${BACKUP_PATH_LOCAL} after CleanUp"
351+ ls -lahR ${BACKUP_PATH_LOCAL}
352+ fi
287353
288354 # exec CMD
289355 echo ">> exec CMD: \"$@\""
0 commit comments