diff --git a/Compose/matrix/crond/.dockerignore b/Compose/matrix/crond/.dockerignore new file mode 100644 index 0000000000000000000000000000000000000000..93f29ef32f38a162dbfb387e72cddecf712abd36 --- /dev/null +++ b/Compose/matrix/crond/.dockerignore @@ -0,0 +1,3 @@ +* +!backup +!crontab diff --git a/Compose/matrix/crond/Dockerfile b/Compose/matrix/crond/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..006a75ebbcd51b5a684cc3308492ff4cef2b171f --- /dev/null +++ b/Compose/matrix/crond/Dockerfile @@ -0,0 +1,13 @@ + +# hadolint ignore=DL3006 +FROM registry.shore.co.il/cron as supersonic +# hadolint ignore=DL3002 +USER root +# hadolint ignore=DL3018 +RUN apk add --update --no-cache \ + docker-cli \ + findutils \ + ; +COPY --chown=root:root backup /usr/local/bin/ +COPY --chown=root:root restore /usr/local/bin/ +VOLUME /var/backups diff --git a/Compose/matrix/crond/README.md b/Compose/matrix/crond/README.md new file mode 100644 index 0000000000000000000000000000000000000000..c612af35729a8e2f301ffb4fdce95518f0de46b5 --- /dev/null +++ b/Compose/matrix/crond/README.md @@ -0,0 +1,5 @@ +# crond + +Runs background jobs for the Matrix server. The jobs are: + +- Postgres DB backup. diff --git a/Compose/matrix/crond/backup b/Compose/matrix/crond/backup new file mode 100755 index 0000000000000000000000000000000000000000..e338f791456beb5755e255551d1b2e7e8fa0d6c9 --- /dev/null +++ b/Compose/matrix/crond/backup @@ -0,0 +1,7 @@ +#!/bin/sh +set -eu + +now="$(date --utc -Iseconds)" +dest="/var/backups/${now}.sql.zstd" +mkdir --parents "$(dirname "$dest")" +docker exec matrix-postgres-1 backup > "$dest" diff --git a/Compose/matrix/crond/crontab b/Compose/matrix/crond/crontab new file mode 100644 index 0000000000000000000000000000000000000000..2aac7acbbf45c5f238468504963c625c587c1b03 --- /dev/null +++ b/Compose/matrix/crond/crontab @@ -0,0 +1,2 @@ +@weekly backup || wget --spider https://notify.shore.co.il/send?message=Matrix%20DB%20backup%20failed. +@daily find /var/backups -atime +18 -delete diff --git a/Compose/matrix/docker-compose.yaml b/Compose/matrix/docker-compose.yaml index c955fded15207a4b821ae4dc9ce63342c64ed559..88f8a8644641b1b6758274b99d86e1aef2765ca5 100644 --- a/Compose/matrix/docker-compose.yaml +++ b/Compose/matrix/docker-compose.yaml @@ -2,6 +2,16 @@ version: '3.5' services: + cron: + build: + context: crond/ + depends_on: + - postgres + restart: always + volumes: + - /run/docker.sock:/run/docker.sock + - /var/backups/matrix:/var/backups + postgres: environment: POSTGRES_DB: &postgres_db synapse @@ -39,6 +49,8 @@ services: volumes: data: + labels: + snapshot: 'true' postgres: _run_slapd: external: true