1
0
mirror of https://github.com/bitwarden/server.git synced 2025-05-28 23:04:50 -05:00

DB backups without cron (#608)

* Update backup-db.sh

* Update entrypoint.sh

* Update Dockerfile

* Delete crontab

* Update backup-db.sh

* don't bother with log files

all is already in /var/opt/mssql/log/errorlog

* Use gosu
This commit is contained in:
Mart124 2019-11-25 14:35:52 +01:00 committed by Kyle Spearrin
parent 47bda1e6d0
commit 35a5dd95bb
4 changed files with 22 additions and 19 deletions

View File

@ -4,13 +4,10 @@ LABEL com.bitwarden.product="bitwarden"
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
cron \
gosu \
tzdata \
&& rm -rf /var/lib/apt/lists/*
COPY crontab /etc/cron.d/bitwarden-cron
RUN chmod 0644 /etc/cron.d/bitwarden-cron
COPY backup-db.sql /
COPY backup-db.sh /
COPY entrypoint.sh /
@ -18,6 +15,7 @@ COPY entrypoint.sh /
RUN chmod +x /entrypoint.sh \
&& chmod +x /backup-db.sh
# Does not work unfortunately (https://github.com/bitwarden/server/issues/286)
RUN /opt/mssql/bin/mssql-conf set telemetry.customerfeedback false
HEALTHCHECK --timeout=3s CMD /opt/mssql-tools/bin/sqlcmd \

View File

@ -1,11 +1,20 @@
#!/bin/sh
# Backup timestamp
export now=${1:-$(date +%Y%m%d_%H%M%S)}
while true
do
# Sleep until next day
[ "$1" == "loop" ] && sleep $((24 * 3600 - (`date +%H` * 3600 + `date +%M` * 60 + `date +%S`)))
# Do a new backup
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P ${SA_PASSWORD} -i /backup-db.sql
# Backup timestamp
export now=$(date +%Y%m%d_%H%M%S)
# Delete backup files older than 30 days
grep -B1 "BACKUP DATABASE successfully" /var/opt/mssql/log/errorlog | grep -q _$now.BAK &&
find /etc/bitwarden/mssql/backups/ -mindepth 1 -type f -name '*.BAK' -mtime +32 -delete
# Do a new backup
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P ${SA_PASSWORD} -i /backup-db.sql
# Delete backup files older than 30 days
grep -B1 "BACKUP DATABASE successfully" /var/opt/mssql/log/errorlog | grep -q _$now.BAK &&
find /etc/bitwarden/mssql/backups/ -mindepth 1 -type f -name '*.BAK' -mtime +32 -delete
# Break if called manually (without loop option)
[ "$1" != "loop" ] && break
done

View File

@ -1,3 +0,0 @@
59 23 * * * bitwarden /backup-db.sh >> /var/log/cron.log 2>&1
# An empty line is required at the end of this file for a valid cron file.

View File

@ -42,9 +42,6 @@ fi
# The rest...
# ref: https://stackoverflow.com/a/38850273
touch /var/log/cron.log /etc/crontab /etc/cron.*/*
chown $USERNAME:$GROUPNAME /var/log/cron.log
mkdir -p /etc/bitwarden/mssql/backups
chown -R $USERNAME:$GROUPNAME /etc/bitwarden
mkdir -p /var/opt/mssql/data
@ -52,8 +49,10 @@ chown -R $USERNAME:$GROUPNAME /var/opt/mssql
chown $USERNAME:$GROUPNAME /backup-db.sh
chown $USERNAME:$GROUPNAME /backup-db.sql
# Sounds like gosu keeps env when switching, but of course cron does not
env > /etc/environment
cron
# Launch a loop to backup database on a daily basis
if [ "$BACKUP_DB" != "0" ]
then
gosu $USERNAME:$GROUPNAME /bin/sh -c "/backup-db.sh loop >/dev/null 2>&1 &"
fi
exec gosu $USERNAME:$GROUPNAME /opt/mssql/bin/sqlservr