Aller au contenu

Rocket.Chat - Backup / Restore#

Cette page décrit la procédure pour sauvegarder et restaurer le stockage S3 & la base MongoDB.

Plan de sauvegarde#

La base de données MongoDB est sauvegardée quotidiennement en HNO via Velero avec le plugin Restic.

Warning

Le stockage S3 n'est pas sauvegardé automatiquement.

Base de données MongoDB#

La base de données MongoDB va permettre de stocker les messages, utilisateurs, canaux de discussion, etc.

Prérequis#

Il faut installer le client velero :

toolbox install velero

Exporter les variables#

Configurer votre environnement (zone, application) :

export ZONE="corp"
export APP="rocketchat"
kswitch ${ZONE}

Sauvegarder la base de données#

Il est possible de déclencher manuellement une sauvegarde en s'appuyant sur le modèle de sauvegarde existant rocketchat-daily-schedule et sur le client Velero :

velero backup create --from-schedule rocketchat-daily-schedule

Une tâche de sauvegarde est ainsi créée, suffixée avec le timestamp relatif à l'heure de début de cette sauvegarde, par exemple rocketchat-daily-schedule-20230309160101

Surveiller l'avancement de la sauvegarde :

watch -n 2 'velero backup get rocketchat-daily-schedule-<TIMESTAMP>'

Une fois la tâche terminée, vérifier le rapport de sauvegarde :

velero backup describe rocketchat-daily-schedule-<TIMESTAMP> --details

Cette sauvegarde sera conservée pendant la durée de TTL (par ex 168h soit 7 jours).

Restaurer la base de données#

Supprimer l'application Rocket.Chat et sa base de données :

kubectl delete ns ${APP}

Lister les sauvegardes disponibles :

velero backup get | grep ${APP}
rocketchat-daily-schedule-20230302134804    Completed   0    0    2023-03-02 14:48:04 +0100 CET   6d    default   <none>
rocketchat-daily-schedule-20230301134802    Completed   0    0    2023-03-01 14:48:02 +0100 CET   5d    default   <none>
rocketchat-daily-schedule-20230301090050    Completed   0    3    2023-03-01 10:00:50 +0100 CET   5d    default   <none>
rocketchat-daily-schedule-20230228133524    Completed   0    0    2023-02-28 14:35:24 +0100 CET   4d    default   <none>
rocketchat-daily-schedule-20230228020023    Completed   0    0    2023-02-28 03:00:23 +0100 CET   4d    default   <none>
rocketchat-daily-schedule-20230227151022    Completed   0    0    2023-02-27 16:10:22 +0100 CET   4d    default   <none>
rocketchat-daily-schedule-20230227020022    Completed   0    0    2023-02-27 03:00:22 +0100 CET   3d    default   <none>
rocketchat-daily-schedule-20230226020021    Completed   0    0    2023-02-26 03:00:21 +0100 CET   2d    default   <none>
rocketchat-daily-schedule-20230225020020    Completed   0    0    2023-02-25 03:00:20 +0100 CET   1d    default   <none>
rocketchat-daily-schedule-20230224020019    Completed   0    0    2023-02-24 03:00:19 +0100 CET   11h   default   <none>

Choisir la sauvegarde que l'on souhaite restaurer :

export RC_BACKUP="rocketchat-daily-schedule-<TIMESTAMP>"

Restaurer des données :

velero restore create --from-backup "${RC_BACKUP}"

Vérifier l’état d’avancement de la restauration :

velero restore describe "${RC_BACKUP}" --details

Vérifier que les pods se sont bien recréés :

kubectl get all -n ${APP}

Normalement les pods rocketchat-mongodb-x sont coincés dans l’état init et rocketchat-rocketchat-xxxxx en crash loop backoff. Il manque une configmap pour le démarrage des pods MongoDB. Pour la créer il faut d’abord se positionner dans caascad/terraform/envs-ng.

nix-shell
cd contexts/pf
trackbone plan -z ${ZONE} -c ${APP}

Réappliquer le déploiement via trackbone pour recréer la configmap manquante :

trackbone apply -z ${ZONE} -c ${APP}

Après quelques instants vérifier que les pods sont bien à l'état running :

kubectl get pod -n ${APP}

Stockage S3#

Le S3 permet simplement de stocker les images et fichiers. La procédure manuelle décrite ci-dessous est 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.

Prérequis#

Il faut installer le client awscli :

toolbox install awscli

Exporter les variables#

Configurer votre environnement (zone, application) :

export ZONE="corp"
export APP="rocketchat"

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 données Rocket.Chat :

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}/