Skip to content

Commit 5a8584b

Browse files
authored
Improve volume handling and file permissions (#2)
* Use /opt/backup * Switch back to root
1 parent fc07cb8 commit 5a8584b

5 files changed

Lines changed: 24 additions & 19 deletions

File tree

Dockerfile

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,25 @@ RUN addgroup -S backup && adduser -D -H -G backup backup
1414
RUN apk add --no-cache --update busybox-suid mysql-client libcap && \
1515
setcap cap_setgid=ep /bin/busybox
1616

17-
COPY --chown=backup:backup *.sh /opt/
17+
COPY *.sh /opt/
1818

1919
RUN rm -f /var/spool/cron/crontabs/root && \
2020
chmod +x /opt/entrypoint.sh && \
2121
chmod +x /opt/backup.sh && \
22+
chown backup:backup /opt/backup.sh && \
2223
mkdir /var/log/cron/ && \
23-
mkdir -p /home/backup/backups && \
24+
mkdir -p /home/backup && \
2425
chown -R backup:backup /home/backup && \
2526
chown -R backup:backup /var/log/cron/ && \
2627
touch /var/spool/cron/crontabs/backup && \
2728
chgrp backup /var/spool/cron/crontabs/backup && \
28-
chmod g+rw /var/spool/cron/crontabs/backup
29+
chmod g+rw /var/spool/cron/crontabs/backup && \
30+
mkdir -p /opt/backup && \
31+
chown -R backup:backup /opt/backup
2932

30-
USER backup
33+
VOLUME /opt/backup
3134

32-
VOLUME /home/backup/backups
35+
USER root
3336

3437
ENTRYPOINT ["/opt/entrypoint.sh"]
3538

backup.sh

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,16 @@ DB_PORT=${DB_PORT:-3306}
55

66
echo "backup: starting backup script"
77

8-
mysqldump -u"${DB_USER}" -p"${DB_PASSWORD}" \
8+
/usr/bin/mysqldump -u"${DB_USER}" -p"${DB_PASSWORD}" \
99
--databases "${DB_DATABASE}" \
1010
--host "${DB_HOST}" --port "${DB_PORT}" \
1111
--single-transaction --quick --skip-lock-tables \
12-
--no-create-db --disable-keys --extended-insert > "/home/backup/backups/${DB_DATABASE}.sql"
12+
--no-create-db --disable-keys --extended-insert 2>>/dev/stdout > "/opt/backup/${DB_DATABASE}.sql"
13+
14+
ret=$?
15+
if [ $ret -eq 0 ]; then
16+
echo "backup: backup written in /opt/backup/${DB_DATABASE}.sql"
17+
else
18+
echo "backup: backup NOT PERFORMED, mysqldump exit code ${ret}"
19+
fi
1320

14-
echo "backup: backup written in /home/backup/backups/${DB_DATABASE}.sql"

docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,4 @@ services:
3131
networks:
3232
- internal
3333
volumes:
34-
- "/home/backup/backups"
34+
- "/opt/backup"

entrypoint.sh

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@ CRON_LOG_LEVEL=${CRON_LOG_LEVEL:-2}
66

77
# TODO: check if required variables ${DB_USER} ${DB_PASSWORD} ${DB_DATABASE} ${DB_HOST} are configured
88

9-
if [ ! -d "/home/backup/backups/" ]; then
10-
mkdir -p "/home/backup/backups/"
11-
fi
12-
13-
chown -R backup /home/backup/backups/ && \
14-
echo "${CRON_SCHEDULE} /opt/backup.sh >> /dev/stdout 2>&1" > /var/spool/cron/crontabs/backup && \
15-
crond -f -l "${CRON_LOG_LEVEL}" -L /dev/stdout
9+
chown -R backup /opt/backup && \
10+
echo "${CRON_SCHEDULE} /opt/backup.sh >> /dev/stdout 2>&1" > /var/spool/cron/crontabs/root && \
11+
crond -f -l "${CRON_LOG_LEVEL}" -d "${CRON_LOG_LEVEL}" -L /dev/stdout

readme.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ The best way run it is with Docker Compose:
2222
DB_USER: "### Replace With Database User ###"
2323
DB_PASSWORD: "### Replace With Database Password ###"
2424
volumes:
25-
- "/home/backup/backups"
25+
- "/opt/backup"
2626
```
2727
2828
> Don't forget to add the database as a dependant service and place it in the
@@ -41,8 +41,8 @@ database:
4141
- `DB_USER`: The user that can access the database
4242
- `DB_PASSWORD`: The password to access the database
4343

44-
The database dump will be created at 11.02pm each day
45-
in the `/home/backup/backups/` folder. Filename will be `{DB_DATABASE}.sql`.
44+
The database dump will be created at 11.02pm UTC each day
45+
in the `/opt/backup/` folder. Filename will be `{DB_DATABASE}.sql`.
4646

4747
> The backup schedule is [configurable](#backup-schedule), 11.02pm is just a default value.
4848

0 commit comments

Comments
 (0)