25 Commits

Author SHA1 Message Date
09730b0e7c feat(db): use pgautoupgrade instead of custom pg_upgrade entrypoint
Some checks failed
cc-ci/testme cc-ci: failure
Replace the hand-rolled entrypoint.postgres.sh.tmpl (which apt-installed
the old PG binaries and ran initdb + pg_upgrade --link by hand) with the
pgautoupgrade/pgautoupgrade:18-alpine image, matching the other recipes.
PGDATA is pinned to the legacy /var/lib/postgresql/data so the existing
cluster on the volume is upgraded in place rather than re-initialised.
Drops the db_entrypoint config and DB_ENTRYPOINT_VERSION.
2026-06-09 15:18:11 +00:00
2ab49fab62 fix(clickhouse): require backup tool — abort if fetch fails after retries
Some checks failed
cc-ci/testme cc-ci: failure
Make the clickhouse-backup install REQUIRED: if it cannot be fetched
after all retries the entrypoint aborts (non-zero exit, set -e) and
clickhouse-server is not started, so the deploy fails loudly rather than
coming up without backup/restore capability.
2026-06-09 15:10:07 +00:00
71234e23e0 chore: upgrade to 4.0.0+v2.0.0
Some checks failed
cc-ci/testme cc-ci: failure
2026-06-05 05:36:21 +00:00
fbe0475ddb chore: upgrade to 4.0.0+v2.0.0
Some checks failed
cc-ci/testme cc-ci: failure
2026-06-05 05:05:50 +00:00
ca89e2024e chore: upgrade to 4.0.0+v2.0.0
Some checks failed
cc-ci/testme cc-ci: failure
2026-06-05 04:36:59 +00:00
0b08d7ed11 chore: upgrade to 4.0.0+v2.1.5
Some checks failed
cc-ci/testme cc-ci: failure
2026-06-02 06:50:21 +00:00
d063f0136e chore: upgrade to 4.0.0+v2.1.5
Some checks failed
cc-ci/testme cc-ci: failure
2026-06-02 05:38:09 +00:00
da159375d8 Update .drone.yml 2025-01-08 10:09:13 -08:00
f83774500d Remove swapfile 2024-05-03 09:10:11 +00:00
71dfab1129 Merge pull request 'fix backup and restore when database was already created' (#5) from p4u1/plausible:fix-backup-restore into main
Reviewed-on: https://git.coopcloud.tech/coop-cloud/plausible/pulls/5
2024-04-06 18:08:54 +00:00
2330e73915 SMTP settings incl now 2024-03-05 10:45:49 -05:00
bdc6e77e40 fix backup and restore 2023-11-11 13:18:40 +01:00
3wc
b26d957cad Add scary release note warning 2023-11-09 20:35:00 +00:00
3wc
4a70aadfb4 chore: publish 3.0.1+v2.0.0 release 2023-11-09 20:31:44 +00:00
3wc
6c73753dc3 Add x86_64 support 2023-11-09 20:27:10 +00:00
3wc
1a29f24eba chore: publish 3.0.0+v2.0.0 release 2023-11-09 19:20:28 +00:00
a30993cdb1 Merge pull request 'add backup labels for postgres and clickhouse' (#4) from p4u1/plausible:backup into main
Reviewed-on: https://git.coopcloud.tech/coop-cloud/plausible/pulls/4
2023-11-09 19:18:58 +00:00
b72203b089 add backup labels for postgres and clickhouse 2023-11-09 11:17:45 +01:00
3wc
7fa53d58eb Rename release note to make it actually work 2023-08-11 12:26:19 +02:00
3wc
c5b29affd8 chore: publish 2.0.0+v1.5.1 release 2023-08-11 12:15:40 +02:00
3wc
ee337feaea Custom postgres entrypoint to handle major upgrades..
..appropriated from the coop-cloud/outline recipe.
2023-08-11 12:15:23 +02:00
3wc
276f4f6933 Remove admin user stuff..
..it's done on first launch now
2023-08-11 12:15:23 +02:00
3wc
f5f1bdd5eb Remove deprecated init-admin from startup command 2023-08-11 12:15:23 +02:00
fa5e91fc33 Changes to clickhouse logger 2023-08-11 12:15:23 +02:00
013352258b Readme update 2023-08-11 12:15:23 +02:00
9 changed files with 130 additions and 18 deletions

View File

@ -45,7 +45,7 @@ steps:
from_secret: drone_abra-bot_token
fork: true
repositories:
- coop-cloud/auto-recipes-catalogue-json
- toolshed/auto-recipes-catalogue-json
trigger:
event: tag

View File

@ -6,9 +6,6 @@ DOMAIN=plausible.example.com
#EXTRA_DOMAINS=', `www.plausible.example.com`'
LETS_ENCRYPT_ENV=production
ADMIN_USER_EMAIL=replace-me
ADMIN_USER_NAME=replace-me
ADMIN_USER_PWD=replace-me
SECRET_KEY_BASE=replace-me
DISABLE_AUTH=replace-me # true or false
DISABLE_REGISTRATION=replace-me # true or false

View File

@ -1,16 +1,16 @@
# plausible
TODO
*Status:* Work in progress
<!-- metadata -->
* **Category**: Apps
* **Status**: 1, alpha
* **Image**: [`plausible/analytics`](https://hub.docker.com/plausible/analytics), 4, upstream
* **Healthcheck**:
* **Backups**:
* **Email**:
* **Backups**: Yes
* **Email**: No
* **Tests**:
* **SSO**:
* **SSO**: No
<!-- endmetadata -->
## Basic usage

View File

@ -1,2 +1,3 @@
export CLICKHOUSE_CONF_VERSION=v1
export CLICKHOUSE_CONF_VERSION=v2
export CLICKHOUSE_USER_CONF_VERSION=v2
export CLICKHOUSE_ENTRYPOINT_VERSION=v3

View File

@ -1,4 +1,4 @@
<yandex>
<clickhouse>
<logger>
<level>warning</level>
<console>true</console>
@ -11,5 +11,5 @@
<trace_log remove="remove"/>
<metric_log remove="remove"/>
<asynchronous_metric_log remove="remove"/>
</yandex>
</clickhouse>

View File

@ -3,20 +3,22 @@ version: "3.8"
services:
app:
image: plausible/analytics:v1.5.1
command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh db init-admin && /entrypoint.sh run"
image: plausible/analytics:v2.0.0
command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run"
depends_on:
- db
- events_db
environment:
- BASE_URL=https://$DOMAIN
- ADMIN_USER_EMAIL
- ADMIN_USER_NAME
- ADMIN_USER_PWD
- SECRET_KEY_BASE
- DATABASE_URL=postgres://plausible:plausible@${STACK_NAME}_db:5432/plausible
- CLICKHOUSE_DATABASE_URL=http://${STACK_NAME}_plausible_events_db:8123/plausible_events_db
- SMTP_HOST_ADDR
- MAILER_EMAIL
- SMTP_HOST_PORT
- SMTP_USER_NAME
- SMTP_USER_PWD
- SMTP_HOST_SSL_ENABLED
- DISABLE_REGISTRATION
- DISABLE_AUTH
networks:
@ -31,29 +33,56 @@ services:
- "traefik.http.routers.${STACK_NAME}.rule=Host(`${DOMAIN}`${EXTRA_DOMAINS})"
- "traefik.http.routers.${STACK_NAME}.entrypoints=web-secure"
- "traefik.http.routers.${STACK_NAME}.tls.certresolver=${LETS_ENCRYPT_ENV}"
- coop-cloud.${STACK_NAME}.version=1.1.0+1.5.1
- coop-cloud.${STACK_NAME}.version=4.0.0+v2.0.0
db:
image: postgres:13.11-alpine
image: pgautoupgrade/pgautoupgrade:18-alpine
volumes:
- db-data:/var/lib/postgresql/data
environment:
# pin legacy PGDATA so the existing cluster on the volume is upgraded in place, not re-init'd
- PGDATA=/var/lib/postgresql/data
- POSTGRES_USER=plausible
- POSTGRES_PASSWORD=plausible
- POSTGRES_DB=plausible
networks:
- internal
healthcheck:
test: ["CMD-SHELL", "pg_isready -U plausible -d plausible"]
interval: 5s
timeout: 5s
retries: 60
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: "true"
backupbot.restore.post-hook: sh -c 'gzip -d /postgres.dump.gz && pg_restore --clean -U "$$POSTGRES_USER" --dbname="$$PLAUSIBLE_DB" < /postgres.dump && rm -f /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: "true"
backupbot.restore.post-hook: clickhouse-backup restore --rm events && rm -rf /var/lib/clickhouse/backup/events"
volumes:
db-data:
@ -71,3 +100,6 @@ configs:
clickhouse-user-config:
name: ${STACK_NAME}_clickhouse_user_config_${CLICKHOUSE_USER_CONF_VERSION}
file: clickhouse-user-config.xml
clickhouse_entrypoint:
name: ${STACK_NAME}_clickhouse_entrypoint_${CLICKHOUSE_ENTRYPOINT_VERSION}
file: entrypoint.clickhouse.sh

67
entrypoint.clickhouse.sh Normal file
View File

@ -0,0 +1,67 @@
#!/bin/bash
# clickhouse entrypoint (cc-ci Q4.7b hardening — recipe-PR for recipe-maintainers/plausible).
#
# clickhouse-backup is the BACKUP tool (backupbot pre/post-hooks: `clickhouse-backup create/restore`).
# It is NOT required for clickhouse-SERVER (`/entrypoint.sh`) to run. The published recipe fetched it
# with `set -ex` + a single silenced no-retry wget to ephemeral /tmp, so ANY transient failure of the
# 22 MB GitHub download (rate-limit / network) exited the container BEFORE the server started → swarm
# restarted it → re-downloaded → amplified the throttle → crash-loop → deploy timeout (cc-ci Q4.7).
#
# Hardening (no behaviour change when the download succeeds first try):
# - cache the binary on the PERSISTENT clickhouse data volume (/var/lib/clickhouse) so it is fetched
# at most once and reused on every container restart (no re-download amplification);
# - retry with backoff to ride out transient GitHub failures;
# - un-silenced so a failure is diagnosable in `docker service logs`.
#
# Policy: clickhouse-backup is REQUIRED. If it cannot be installed after all retries the entrypoint
# aborts (non-zero exit) and the server is NOT started — we deliberately fail the deploy loudly rather
# than come up silently without backup/restore capability.
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"
elif [[ $ARCH =~ "x86_64" ]]; then
ARCH="amd64"
fi
CACHE_DIR=/var/lib/clickhouse/.ccci-bin
CACHED="${CACHE_DIR}/clickhouse-backup"
BIN=/usr/local/bin/clickhouse-backup
URL="https://github.com/AlexAkulov/clickhouse-backup/releases/download/v${CLICKHOUSE_BACKUP_VERSION}/clickhouse-backup-linux-${ARCH}.tar.gz"
install_clickhouse_backup() {
mkdir -p "$CACHE_DIR"
if [ -x "$CACHED" ]; then
cp -f "$CACHED" "$BIN"
echo "clickhouse-backup: restored from persistent cache ($CACHED)"
return 0
fi
for attempt in 1 2 3 4 5; do
if wget --continue --output-document=/tmp/clickhouse-backup.tar.gz "$URL" \
&& tar -xf /tmp/clickhouse-backup.tar.gz --directory=/usr/local/bin --strip-components=3; then
cp -f "$BIN" "$CACHED" 2>/dev/null || true
echo "clickhouse-backup: downloaded + cached (attempt ${attempt})"
return 0
fi
echo "clickhouse-backup: fetch attempt ${attempt} failed; backing off $((attempt * 10))s" >&2
sleep $((attempt * 10))
done
echo "clickhouse-backup: fetch FAILED after all retries — aborting; clickhouse-server will NOT start (backup tool is required)" >&2
return 1
}
# Required: if the backup tool cannot be installed after retries, abort (set -e) so the deploy fails
# loudly instead of coming up without backup/restore capability.
install_clickhouse_backup
exec /entrypoint.sh

7
release/2.0.0+v1.5.1 Normal file
View File

@ -0,0 +1,7 @@
If you're upgrading from a pre-release version, there will be a major Postgresql
version upgrade -- this should happen automatically, but **please take a
backup**, at least of the `<stack_name>_db` volume, if not all the data volumes,
before the upgrade.
If you haven't taken a backup already, it's probably safest to bail using
Ctrl+C, take the backup, and re-run your `upgrade` / `deploy` command.

8
release/3.0.0+v2.0.0 Normal file
View File

@ -0,0 +1,8 @@
⚠ WARNING! ⚠
This major version upgrade of Plausible requires running a manual data migration
-- otherwise you'll see all historical data disappear (don't worry, it's
"probably" still there).
Take a manual docker volume backup, then see here, and strap in:
https://github.com/plausible/analytics/discussions/3132