· 7 years ago · Feb 20, 2018, 08:08 AM
1#!/bin/bash
2
3set -e
4
5HELPTEXT="usage: $(basename "$0") [dbName] [appName] [s3Bucket] [pathInBucket]"
6
7if [ "$#" -lt 4 ]; then
8 echo "$HELPTEXT"
9 exit
10fi
11
12MONGO_DATABASE="$1" # The database to dump and back up
13APP_NAME="$2" # The name of the app
14S3_BUCKET_NAME="$3" # The bucket
15S3_BUCKET_PATH="$4" # the folder in the bucket
16
17echo "---- Installing pip ----"
18apt-get -qq update && apt-get -qq install python-pip < "/dev/null"
19
20echo "---- Installing s3cmd ----"
21pip install s3cmd
22
23
24echo "---- Configuring s3cmd ----"
25read -p "S3 access key: " ACCESS_KEY
26read -p "S3 secret key: " SECRET_KEY
27
28# password for gpg
29NEW_UUID=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)
30
31# run configure command and feed it with the values we gathered
32s3cmd --configure << EOT
33$ACCESS_KEY
34$SECRET_KEY
35eu-central-1
36
37
38$NEW_UUID
39
40Y
41
42Y
43Y
44EOT
45
46echo "---- Creating backup directory and backup script ----"
47
48BACKUP_DIR="backups"
49SCRIPT_NAME="mongo-backup.sh"
50
51mkdir -p $BACKUP_DIR
52
53cat <<EOT > $BACKUP_DIR/$SCRIPT_NAME
54#!/bin/bash
55PATH=/usr/local/bin:/usr/bin:/bin
56
57
58MONGO_HOST="127.0.0.1"
59MONGO_PORT="27017"
60BACKUPS_DIR="$PWD/$BACKUP_DIR/$APP_NAME"
61TIMESTAMP=\$(date +%F-%H%M)
62BACKUP_NAME="$APP_NAME-\$TIMESTAMP.archive.gzip"
63
64# Create dump
65echo "dumping mongodb"
66mongodump -h \$MONGO_HOST:\$MONGO_PORT -d $MONGO_DATABASE --gzip --archive=\$BACKUP_NAME 2>&1 >> /var/log/mongodb/mongodump.log
67
68# Create backup directory
69mkdir -p \$BACKUPS_DIR
70# Rename dump
71mv \$BACKUP_NAME \$BACKUPS_DIR/\$BACKUP_NAME
72# Compress database dump
73
74# Upload to S3
75s3cmd -c $HOME/.s3cfg put \$BACKUPS_DIR/\$BACKUP_NAME s3://$S3_BUCKET_NAME/$S3_BUCKET_PATH/\$BACKUP_NAME
76
77# Clean up
78rm -rf \$BACKUPS_DIR
79EOT
80
81chmod a+x $BACKUP_DIR/$SCRIPT_NAME
82
83echo "---- Setting up cronjob ----"
84
85# Write out current crontab
86(crontab -l 2>/dev/null ; echo "00 03 * * * /bin/bash $PWD/$BACKUP_DIR/$SCRIPT_NAME" | sort | uniq) | crontab -