Aller au contenu

HedgeDoc - Backup / Restore#

Cette page décrit la procédure pour sauvegarder et restaurer le stockage S3 & RDS d'HedgeDoc. Il s'agit d'une procédure manuelle, utile pour créer une sauvegarde avant une opération à risque sur le service ou pour restaurer des données à la suite d'un incident.

Plan de sauvegarde#

La base de données RDS est sauvegardée quotidiennement en HNO. Ces sauvegardes sont accessibles à travers la console Flexible Engine

Homepage > Database > Relational Database Service > Backups

Warning

Le stockage S3 n'est pas sauvegardé automatiquement.

RDS#

La base de données PostgreSQL va permettre de stocker les documents, utilisateurs locaux, sessions, révisions, etc. crées dans HedgeDoc, etc.

Prérequis#

Il faut installer les outils PostgreSQL localement via nix-shell :

nix-env -iA nixpkgs.postgresql_12

Exporter les variables#

Configurer votre environnement (zone, infrastructure, application) :

export ZONE="corp"
export INFRA_ZONE="infra-prd"
export APP="hedgedoc"

Récupérer un token Vault :

# Get Vault token
export VAULT_ADDR="https://vault.${INFRA_ZONE}.caascad.com"
vault token lookup || vault login -method oidc

Récupérer les paramètres de la base RDS :

# Export dump filename
export DUMP_FILE="$(date +%F)_${ZONE}_${APP}.sql"

# Export RDS password
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)"

Connexion vers l'instance RDS#

Pour créer la connexion vers le RDS, il faut passer par le bastion via un tunnel SSH :

ssh -f -N -L "65432:${ADDR_TARGET}:5432" "cloud@bst.${ZONE}.caascad.com"

Sauvegarder la base de données#

Sauvegarder la base de données avec pg_dump :

pg_dump -h 127.0.0.1 -p 65432 -c -O --if-exists -x -U "${APP}" "${APP}" > "${DUMP_FILE}"

Vérifier que la sauvegarde s'est déroulée avec succès :

head -n 2 "${DUMP_FILE}"; tail -n 3 "${DUMP_FILE}"

On devrait avoir un résultat approchant :

# Should return:
# --
# -- PostgreSQL database dump
# -- PostgreSQL database dump complete
# --
#

Restaurer la base de données#

Restaurer le fichier dump SQL sur la base de données :

psql -h 127.0.0.1 -p 65432 -U "${APP}" "${APP}" -f "${DUMP_FILE}"

Warning

Si l'instance RDS ou la base de données a été détruite, il faut impérativement redéployer HedgeDoc via le processus d'installation car le mot de passe de la base aura changé.

Stockage S3#

Le S3 permet simplement de stocker les images.

Prérequis#

Il faut installer le client awscli :

toolbox install awscli

Exporter les variables#

Configurer votre environnement (zone, application) :

export ZONE="corp"
export APP="hedgedoc"

Récupérer un token Vault :

# Get Vault token
export VAULT_ADDR="https://vault.${ZONE}.caascad.com"
vault token lookup || vault login -method oidc

Récupérer la configuration du bucket (Les variables AWS_SECRET_ACCESS_KEY & AWS_ACCESS_KEY_ID vont permettre de configurer awscli) :

# Export AWS credential
export AWS_SECRET_ACCESS_KEY="$(vault read -field=secret_key secret/bucket/${APP})"
export AWS_ACCESS_KEY_ID="$(vault read -field=access_key secret/bucket/${APP})"

# Export Bucket parameters
export ENDPOINT_URL="$(vault read -field=endpoint_url secret/bucket/${APP})"
export BUCKET_NAME="$(vault read -field=bucket_name secret/bucket/${APP})"

Sauvegarde des données du S3#

Sauvegarder les documents téléversé d'HedgeDoc :

aws s3 --endpoint-url ${ENDPOINT_URL} cp --recursive s3://${BUCKET_NAME}/ backup/${APP}

Restauration des données du S3#

Restaurer les données du stockage S3 :

aws s3 --endpoint-url ${ENDPOINT_URL} cp --recursive backup/${APP} s3://${BUCKET_NAME}/