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