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 \
|
RUN apt-get update \
|
||||||
&& apt-get install -y --no-install-recommends \
|
&& apt-get install -y --no-install-recommends \
|
||||||
cron \
|
|
||||||
gosu \
|
gosu \
|
||||||
tzdata \
|
tzdata \
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
&& 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.sql /
|
||||||
COPY backup-db.sh /
|
COPY backup-db.sh /
|
||||||
COPY entrypoint.sh /
|
COPY entrypoint.sh /
|
||||||
@ -18,6 +15,7 @@ COPY entrypoint.sh /
|
|||||||
RUN chmod +x /entrypoint.sh \
|
RUN chmod +x /entrypoint.sh \
|
||||||
&& chmod +x /backup-db.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
|
RUN /opt/mssql/bin/mssql-conf set telemetry.customerfeedback false
|
||||||
|
|
||||||
HEALTHCHECK --timeout=3s CMD /opt/mssql-tools/bin/sqlcmd \
|
HEALTHCHECK --timeout=3s CMD /opt/mssql-tools/bin/sqlcmd \
|
||||||
|
@ -1,11 +1,20 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# Backup timestamp
|
while true
|
||||||
export now=${1:-$(date +%Y%m%d_%H%M%S)}
|
do
|
||||||
|
# Sleep until next day
|
||||||
|
[ "$1" == "loop" ] && sleep $((24 * 3600 - (`date +%H` * 3600 + `date +%M` * 60 + `date +%S`)))
|
||||||
|
|
||||||
# Do a new backup
|
# Backup timestamp
|
||||||
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P ${SA_PASSWORD} -i /backup-db.sql
|
export now=$(date +%Y%m%d_%H%M%S)
|
||||||
|
|
||||||
# Delete backup files older than 30 days
|
# Do a new backup
|
||||||
grep -B1 "BACKUP DATABASE successfully" /var/opt/mssql/log/errorlog | grep -q _$now.BAK &&
|
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P ${SA_PASSWORD} -i /backup-db.sql
|
||||||
find /etc/bitwarden/mssql/backups/ -mindepth 1 -type f -name '*.BAK' -mtime +32 -delete
|
|
||||||
|
# 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...
|
# 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
|
mkdir -p /etc/bitwarden/mssql/backups
|
||||||
chown -R $USERNAME:$GROUPNAME /etc/bitwarden
|
chown -R $USERNAME:$GROUPNAME /etc/bitwarden
|
||||||
mkdir -p /var/opt/mssql/data
|
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.sh
|
||||||
chown $USERNAME:$GROUPNAME /backup-db.sql
|
chown $USERNAME:$GROUPNAME /backup-db.sql
|
||||||
|
|
||||||
# Sounds like gosu keeps env when switching, but of course cron does not
|
# Launch a loop to backup database on a daily basis
|
||||||
env > /etc/environment
|
if [ "$BACKUP_DB" != "0" ]
|
||||||
cron
|
then
|
||||||
|
gosu $USERNAME:$GROUPNAME /bin/sh -c "/backup-db.sh loop >/dev/null 2>&1 &"
|
||||||
|
fi
|
||||||
|
|
||||||
exec gosu $USERNAME:$GROUPNAME /opt/mssql/bin/sqlservr
|
exec gosu $USERNAME:$GROUPNAME /opt/mssql/bin/sqlservr
|
||||||
|
Loading…
x
Reference in New Issue
Block a user