Backup and restore from prod to other environments

Run these commands wherever production is running.

export WHERE="/"
export DB_NAME="visna_db_new"
export BACKUP="${DB_NAME}_backup.tar.gz"
export SSH_USER="marco"
export TARGET="192.168.40.60"
export RETRIEVERS="retrievers_20250730014908.pkl"

# Backup MongoDB
mongodump --db "$DB_NAME" --out .
tar -czf "$BACKUP" "$DB_NAME/"
scp "$BACKUP" ${SSH_USER}@${TARGET}:/

# Send retrievers file
scp "$RETRIEVERS" ${SSH_USER}@${TARGET}:/

Then run these wherever the container with the target environment is running.

export ENVIRONMENT="sandbox" # sandbox, staging or production
export MONGO_CONTAINER="visna-$ENVIRONMENT-mongodb-1"
export VISNA_CONTAINER="visna-$ENVIRONMENT-visna-1"
export DB_NAME="visna_db_new"
export BACKUP="${DB_NAME}_backup.tar.gz"
export RETRIEVERS="retrievers_20250730014908.pkl"
export USER="mtamassia@isn.edu.au"

# Restore backup
sudo docker cp "$BACKUP" $MONGO_CONTAINER:/
sudo docker exec -it -w / $MONGO_CONTAINER tar -xzf "$BACKUP"
sudo docker exec -it -w / $MONGO_CONTAINER mongorestore --db $DB_NAME --username admin --password password --authenticationDatabase admin "$DB_NAME/"
rm $BACKUP
rm -rf "${DB_NAME}/"

# Restore retrievers file
sudo docker cp "$RETRIEVERS" $VISNA_CONTAINER:/app

# Create user / make admin
sudo docker exec -it -w / $MONGO_CONTAINER mongosh --username admin --password password --authenticationDatabase admin --eval '
db.user.insertOne({
    "userid": "$USER",
    "user_name": "$USER",
    "is_admin": true,
    "tnc_accepted": true
});
' $DB_NAME
sudo docker exec -it -w / $MONGO_CONTAINER mongosh --username admin --password password --authenticationDatabase admin --eval 'db.user.updateOne({user_name: "$USER"}, {$set: {is_admin: true}})' $DB_NAME
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9