Aller au contenu

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