-
Notifications
You must be signed in to change notification settings - Fork 1
/
backup-plausible.sh
executable file
·90 lines (75 loc) · 2.38 KB
/
backup-plausible.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/bin/sh
# TODO
# See https://stackoverflow.com/questions/29832037/how-to-get-script-directory-in-posix-sh
. "$(dirname "$0")/common.sh"
##################################################
# Backup Plausible Postgres database.
# Globals:
# PLAUSIBLE_BACKUP_DIR
# PLAUSIBLE_DB
# POSTGRES_LABEL
# POSTGRES_NAMESPACE
# Arguments:
# None
##################################################
backup_postgres() {
echo "Backing up Postgres ..."
pod=$(get_pod_name "${POSTGRES_LABEL}" "${POSTGRES_NAMESPACE}")
kubectl exec -i -n "${POSTGRES_NAMESPACE}" "$pod" -- \
pg_dump -Fc "${PLAUSIBLE_DB}" >"${PLAUSIBLE_BACKUP_DIR}/$(date +%y%m%d)-postgres-${PLAUSIBLE_DB}.dump"
}
##################################################
# Backup Plausible ClickHouse event database.
# Globals:
# PLAUSIBLE_BACKUP_DIR
# PLAUSIBLE_EVENT_DATA_LABEL
# PLAUSIBLE_NAMESPACE
# Arguments:
# None
##################################################
backup_clickhouse() {
echo "Backing up ClickHouse ..."
mkdir -p "${PLAUSIBLE_BACKUP_DIR}"
install_clickhouse_backup
backup_name=$(date +%y%m%d)-clickhouse
echo "Creating backup ${backup_name} ..."
pod=$(get_pod_name "${PLAUSIBLE_EVENT_DATA_LABEL}" "${PLAUSIBLE_NAMESPACE}")
kubectl exec -i -n "${PLAUSIBLE_NAMESPACE}" "$pod" -- \
clickhouse-backup create "${backup_name}"
tmp="${PLAUSIBLE_BACKUP_DIR}/tmp"
pod_path="${PLAUSIBLE_NAMESPACE}/${pod}:/var/lib/clickhouse/backup/${backup_name}"
echo "Copying ${pod_path} to ${tmp} ..."
kubectl cp "${pod_path}" "${tmp}"
backup_destination_path="${PLAUSIBLE_BACKUP_DIR}/${backup_name}.tar.gz"
echo "Compressing ${backup_destination_path} to ${tmp} ..."
tar -zcf "${backup_destination_path}" -C "${tmp}" .
echo "Cleaning up ..."
rm -rf "${tmp}"
kubectl exec -i -n "${PLAUSIBLE_NAMESPACE}" "$pod" -- \
clickhouse-backup delete local "${backup_name}"
}
##################################################
# Main function of script.
# Globals:
# PLAUSIBLE_BACKUP_DIR
# Arguments:
# None
##################################################
main() {
echo "Backing up Plausible ..."
if ! backup_postgres; then
echo "Postgres backup failed." >&2
success=false
fi
if ! backup_clickhouse; then
echo "ClickHouse backup failed." >&2
success=false
fi
if [ "${success}" = false ]; then
exit 1
fi
cleanup "${PLAUSIBLE_BACKUP_DIR}" 60
echo "Success."
}
# Entrypoint
main