Skip to content

Commit e5e0b4f

Browse files
committed
Update wsc-backup-cronjob.yaml
add cleanup and ssh/sftp remote backup
1 parent 74d4b67 commit e5e0b4f

File tree

1 file changed

+78
-12
lines changed

1 file changed

+78
-12
lines changed

examples/fpm-nginx-dhi-k8s/wsc-backup-cronjob.yaml

Lines changed: 78 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
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
---
@@ -82,6 +81,46 @@ spec:
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

87126
apiVersion: 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

Comments
 (0)