generated from ztimson/template
Fixed backups & added replica recovery
All checks were successful
Build and publish / Build Container (push) Successful in 1m22s
All checks were successful
Build and publish / Build Container (push) Successful in 1m22s
This commit is contained in:
13
README.md
13
README.md
@@ -52,11 +52,14 @@ To restore a backup, uncompress it and use the official `mongorestore`
|
|||||||
### Environment Variables
|
### Environment Variables
|
||||||
|
|
||||||
| Variable | Description | Default | Example |
|
| Variable | Description | Default | Example |
|
||||||
|--------------------|--------------------------------|--------------------------|---------------|
|
|------------------------------|--------------------------------------------------|--------------------------|---------------|
|
||||||
| `BACKUP_CRON` | Cron schedule expression | - | `0 */6 * * *` |
|
| `BACKUP_CRON` | Cron schedule expression | | `0 */6 * * *` |
|
||||||
| `BACKUP_DIR` | Directory to store backups | /data/backups | `/backups` |
|
| `BACKUP_DIR` | Directory to store backups | `/data/backups` | `/backups` |
|
||||||
| `BACKUP_DB` | Database that will be backedup | `$MONGO_INITDB_DATABASE` | `admin` | |
|
| `BACKUP_DB` | Database to backup | `$MONGO_INITDB_DATABASE` | `admin` |
|
||||||
| `BACKUP_RETENTION` | Number of backups to keep | - | `7` |
|
| `BACKUP_RETENTION` | Number of backups to keep, defaults to unlimited | | `7` |
|
||||||
|
| `MONGO_INITDB_DATABASE` | Default database name | | `momentum` |
|
||||||
|
| `MONGO_INITDB_ROOT_USERNAME` | Root username for mongodump auth | | `root` |
|
||||||
|
| `MONGO_INITDB_ROOT_PASSWORD` | Root password for mongodump auth | | `secret` |
|
||||||
|
|
||||||
### Built With
|
### Built With
|
||||||
|
|
||||||
|
|||||||
10
backup.sh
10
backup.sh
@@ -1,18 +1,16 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
TIMESTAMP=$(date +%Y-%m-%d_%H-%M-%S)
|
TIMESTAMP=$(date +%Y-%m-%d_%H-%M-%S)
|
||||||
BACKUP_FILE="${MONGO_INITDB_DATABASE}_${TIMESTAMP}.dump.tar.gz"
|
if [[ -z "$BACKUP_DB" ]]; then BACKUP_DB="$MONGO_INITDB_DATABASE"; fi
|
||||||
|
BACKUP_FILE="${BACKUP_DB}_${TIMESTAMP}.dump.tar.gz"
|
||||||
TEMP_DUMP="/tmp/mongo_dump_${TIMESTAMP}"
|
TEMP_DUMP="/tmp/mongo_dump_${TIMESTAMP}"
|
||||||
|
|
||||||
# Create & zip backup
|
|
||||||
mkdir -p "$BACKUP_DIR"
|
mkdir -p "$BACKUP_DIR"
|
||||||
if [[ -z "$BACKUP_DB" ]]; then BACKUP_DB="$MONGO_INITDB_DATABASE"; fi
|
mongodump --host localhost --db "$BACKUP_DB" -u "$MONGO_INITDB_ROOT_USERNAME" -p "$MONGO_INITDB_ROOT_PASSWORD" --out "$TEMP_DUMP"
|
||||||
mongodump --host localhost --db "$BACKUP_DB" -u "$MONGO_INITDB_ROOT_USERNAME" -p "$MONGO_INITDB_ROOT_USERNAME" --out "$TEMP_DUMP"
|
|
||||||
tar -czf "${BACKUP_DIR}/${BACKUP_FILE}" -C "$TEMP_DUMP" .
|
tar -czf "${BACKUP_DIR}/${BACKUP_FILE}" -C "$TEMP_DUMP" .
|
||||||
rm -rf "$TEMP_DUMP"
|
rm -rf "$TEMP_DUMP"
|
||||||
|
|
||||||
# Remove old backups
|
|
||||||
if [[ -n "$BACKUP_RETENTION" ]]; then
|
if [[ -n "$BACKUP_RETENTION" ]]; then
|
||||||
cd "$BACKUP_DIR"
|
cd "$BACKUP_DIR"
|
||||||
ls -1t dump_${MONGO_INITDB_DATABASE}_*.tar.gz | tail -n +$((BACKUP_RETENTION + 1)) | xargs -r rm -f
|
ls -1t ${BACKUP_DB}_*.dump.tar.gz | tail -n +$((BACKUP_RETENTION + 1)) | xargs -r rm -f
|
||||||
fi
|
fi
|
||||||
|
|||||||
13
docker-compose.yml
Normal file
13
docker-compose.yml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
services:
|
||||||
|
db:
|
||||||
|
build: .
|
||||||
|
environment:
|
||||||
|
MONGO_INITDB_DATABASE: momentum
|
||||||
|
MONGO_INITDB_ROOT_USERNAME: root
|
||||||
|
MONGO_INITDB_ROOT_PASSWORD: secret
|
||||||
|
BACKUP_CRON: "0 2 * * *"
|
||||||
|
BACKUP_RETENTION: "7"
|
||||||
|
BACKUP_DIR: /data/backups
|
||||||
|
volumes:
|
||||||
|
- data:/data/db
|
||||||
|
- backups:/data/backups
|
||||||
@@ -1,12 +1,16 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Setup cron job if BACKUP_CRON is set
|
|
||||||
if [ -n "$BACKUP_CRON" ]; then
|
if [ -n "$BACKUP_CRON" ]; then
|
||||||
echo "$BACKUP_CRON /usr/local/bin/backup.sh >> /var/log/mongo-backup.log 2>&1" > /etc/cron.d/mongo-backup
|
env >> /etc/environment
|
||||||
|
echo "$BACKUP_CRON root . /etc/environment; /usr/local/bin/backup >> /var/log/mongo-backup.log 2>&1" > /etc/cron.d/mongo-backup
|
||||||
chmod 0644 /etc/cron.d/mongo-backup
|
chmod 0644 /etc/cron.d/mongo-backup
|
||||||
crontab /etc/cron.d/mongo-backup
|
|
||||||
cron
|
cron
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Execute original mongo entrypoint
|
# Clean up stale locks from unclean shutdown
|
||||||
|
rm -f /data/db/mongod.lock
|
||||||
|
rm -f /data/db/.lock
|
||||||
|
rm -f /data/db/WiredTiger.lock
|
||||||
|
mongod --replSet rs0 --repair
|
||||||
|
|
||||||
exec /usr/local/bin/docker-entrypoint.sh "$@"
|
exec /usr/local/bin/docker-entrypoint.sh "$@"
|
||||||
|
|||||||
Reference in New Issue
Block a user