diff --git a/README.md b/README.md index 5a4e81b..b3f8f53 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ * **Status**: 1, alpha * **Image**: [`plausible/analytics`](https://hub.docker.com/plausible/analytics), 4, upstream * **Healthcheck**: -* **Backups**: No +* **Backups**: Yes * **Email**: No * **Tests**: * **SSO**: No diff --git a/abra.sh b/abra.sh index f195dcc..d7c5024 100644 --- a/abra.sh +++ b/abra.sh @@ -1,3 +1,4 @@ export CLICKHOUSE_CONF_VERSION=v2 export CLICKHOUSE_USER_CONF_VERSION=v2 export DB_ENTRYPOINT_VERSION=v1 +export CLICKHOUSE_ENTRYPOINT_VERSION=v1 diff --git a/compose.yml b/compose.yml index 35b4b56..01fef53 100644 --- a/compose.yml +++ b/compose.yml @@ -45,18 +45,37 @@ services: - POSTGRES_DB=plausible networks: - internal + deploy: + labels: + backupbot.backup: "true" + backupbot.backup.pre-hook: sh -c 'pg_dump -U "$$POSTGRES_USER" -Fc "$$POSTGRES_DB" | gzip > "/postgres.dump.gz"' + backupbot.backup.path: "/postgres.dump.gz" + backupbot.backup.post-hook: "rm -f /postgres.dump.gz" + backupbot.restore.post-hook: sh -c 'gzip -d /postgres.dump.gz && pg_restore -U "$$POSTGRES_USER" --dbname="$$PLAUSIBLE_DB" < /postgres.dump && rm /postgres.dump' plausible_events_db: image: clickhouse/clickhouse-server:23.4.2.11-alpine volumes: - event-data:/var/lib/clickhouse + entrypoint: /custom-entrypoint.sh configs: - source: clickhouse-config target: /etc/clickhouse-server/config.d/logging.xml - source: clickhouse-user-config target: /etc/clickhouse-server/users.d/clickhouse-user-config.xml + - source: clickhouse_entrypoint + target: /custom-entrypoint.sh + mode: 0555 networks: - internal + deploy: + labels: + backupbot.backup: "true" + backupbot.backup.pre-hook: clickhouse-backup create events + backupbot.backup.path: "/var/lib/clickhouse/backup/events" + backupbot.backup.post-hook: "rm -rf /var/lib/clickhouse/backup/events" + backupbot.restore.post-hook: clickhouse-backup restore events + backupbot.resoter.post-hook: "rm -rf /var/lib/clickhouse/backup/events" volumes: db-data: @@ -78,3 +97,6 @@ configs: name: ${STACK_NAME}_db_entrypoint_${DB_ENTRYPOINT_VERSION} file: entrypoint.postgres.sh.tmpl template_driver: golang + clickhouse_entrypoint: + name: ${STACK_NAME}_clickhouse_entrypoint_${CLICKHOUSE_ENTRYPOINT_VERSION} + file: entrypoint.clickhouse.sh diff --git a/entrypoint.clickhouse.sh b/entrypoint.clickhouse.sh new file mode 100644 index 0000000..9e54283 --- /dev/null +++ b/entrypoint.clickhouse.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +set -e + +CLICKHOUSE_BACKUP_VERSION=2.4.2 + +ARCH=$(uname -m) +if [[ $ARCH =~ "aarch64" ]]; then + ARCH="arm64" +elif [[ $ARCH =~ "armv5l" ]]; then + ARCH="armv5" +elif [[ $ARCH =~ "armv6l" ]]; then + ARCH="armv6" +elif [[ $ARCH =~ "armv7l" ]]; then + ARCH="armv7" +fi + +wget \ + --quiet \ + --continue \ + --no-clobber \ + --output-document=/tmp/clickhouse-backup.tar.gz \ + "https://github.com/AlexAkulov/clickhouse-backup/releases/download/v${CLICKHOUSE_BACKUP_VERSION}/clickhouse-backup-linux-${ARCH}.tar.gz" 2>/dev/null + +tar -xf /tmp/clickhouse-backup.tar.gz --directory=/usr/local/bin --strip-components=3 + +/entrypoint.sh