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:
parent
47bda1e6d0
commit
35a5dd95bb
@ -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 \
|
||||
|
@ -1,7 +1,12 @@
|
||||
#!/bin/sh
|
||||
|
||||
while true
|
||||
do
|
||||
# Sleep until next day
|
||||
[ "$1" == "loop" ] && sleep $((24 * 3600 - (`date +%H` * 3600 + `date +%M` * 60 + `date +%S`)))
|
||||
|
||||
# Backup timestamp
|
||||
export now=${1:-$(date +%Y%m%d_%H%M%S)}
|
||||
export now=$(date +%Y%m%d_%H%M%S)
|
||||
|
||||
# Do a new backup
|
||||
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P ${SA_PASSWORD} -i /backup-db.sql
|
||||
@ -9,3 +14,7 @@ export now=${1:-$(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
|
||||
|
||||
# Break if called manually (without loop option)
|
||||
[ "$1" != "loop" ] && break
|
||||
done
|
||||
|
@ -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.
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user