Nextcloud - Backup / Restore#
1. Export les variables d'ENV#
export ZONE="corp"
export INFRA_ZONE="infra-prd"
export APP="nextcloud" # ou "nextcloud-stg"
export DUMP_FILE="$(date +%F)_${ZONE}_${APP}.sql"
# Export RDS password
export VAULT_ADDR="https://vault.${INFRA_ZONE}.caascad.com"
vault token lookup || vault login -method oidc
export PGPASSWORD="$(vault read -field=password secret/zones/fe/${ZONE}/rds/${APP}/db)"
# Export RDS ip
export ADDR_TARGET="$(vault read -field=private_ip secret/zones/fe/${ZONE}/rds/${APP}/db)"
2. Connexion vers l'instance RDS#
Pour créer la connexion vers le RDS, il faut passer par le bastion via un tunnel SSH :
# Tunneling from bastion to RDS instance
ssh -f -N -L "65432:${ADDR_TARGET}:5432" "cloud@bst.${ZONE}.caascad.com"
3. Dump#
# ScaleDown the Nextcloud Pod
kubectl scale deployment nextcloud -n nextcloud --replicas=0
# Dump source database
pg_dump -h 127.0.0.1 -p 65432 -c -O --if-exists -x -U "${APP}" "${APP}" > "${DUMP_FILE}"
# Check
head -n 2 "${DUMP_FILE}"; tail -n 3 "${DUMP_FILE}"; cat "${DUMP_FILE}" | wc -l
# Should return:
# --
# -- PostgreSQL database dump
# -- PostgreSQL database dump complete
# --
#
4. Restore#
# Load to target database
psql -h 127.0.0.1 -p 65432 -U "${APP}" "${APP}" -f "${DUMP_FILE}"
# ScaleUp the Nextcloud Pod
kubectl scale deployment nextcloud -n nextcloud --replicas=1