11 Commits
Author SHA1 Message Date
3wordchant 556faa469e Change version to 1.1.0 2023-08-11 12:13:50 +02:00
javielico 938233815a Merge pull request 'Remove latest to actual version, up on PgSQL, clickhouse to original up-to-date image' (#3) from javielico/plausible:main into main
Reviewed-on: https://git.coopcloud.tech/coop-cloud/plausible/pulls/3
2023-05-29 15:08:15 +00:00
javielico ac767b8b1f Changes to clickhouse logger 2023-05-18 16:35:38 +01:00
javielico 434a72c8a4 Readme update 2023-05-18 16:29:25 +01:00
javielico dff2f148e3 Changed version of Plausible from latest to actual version, upgraded PoSQL and change clickhouse to actual docker image not Yandex 2023-05-18 12:55:16 +01:00
javielico e4ba0a4d47 Merge pull request 'main' (#1) from coop-cloud/plausible:main into main
Reviewed-on: https://git.coopcloud.tech/javielico/plausible/pulls/1
2023-05-18 11:45:41 +00:00
3wordchant 75189920bf Switch to self-hosted stack-ssh-deploy image [mass update] 2023-01-21 11:49:56 -08:00
3wordchant 5a22ef6c66 Fix CI by adding networks: [mass update] 2023-01-20 11:58:41 -08:00
3wordchant 67a77993d9 Automatically generate catalogue on release [mass update]
Re: coop-cloud/recipes-catalogue-json#4
2023-01-20 10:27:12 -08:00
3wordchant 75158b8203 Update abra syntax in examples (finally) [mass update] 2023-01-19 16:02:28 -08:00
3wordchant 22851a7d02 Merge pull request 'Adding two new variables to disable registration and login' (#1) from javielico/plausible:main into main
Reviewed-on: https://git.coopcloud.tech/coop-cloud/plausible/pulls/1
2022-11-11 19:31:43 +00:00
15 changed files with 38 additions and 292 deletions
+1 -1
View File
@@ -45,7 +45,7 @@ steps:
from_secret: drone_abra-bot_token
fork: true
repositories:
- toolshed/auto-recipes-catalogue-json
- coop-cloud/auto-recipes-catalogue-json
trigger:
event: tag
+6 -17
View File
@@ -5,21 +5,10 @@ DOMAIN=plausible.example.com
## Domain aliases
#EXTRA_DOMAINS=', `www.plausible.example.com`'
LETS_ENCRYPT_ENV=production
#LOG_LEVEL=debug
COMPOSE_FILE="compose.yml"
DISABLE_REGISTRATION=true # true or false
# Mail Configuration
#COMPOSE_FILE="$COMPOSE_FILE:compose.mail.yml"
#SECRET_SMTP_PASSWORD_VERSION=v1 # generate=false
#MAILER_ADAPTER=Bamboo.Mua
#MAILER_EMAIL=noreply@example.com
#MAILER_NAME=Noreply
#SMTP_HOST_ADDR=mail.example.com
#SMTP_HOST_PORT=587
#SMTP_USER_NAME=foo
#SMTP_HOST_SSL_ENABLED=false
SECRET_TOTP_VAULT_KEY_VERSION=v1 # length=32 encoding=base64
SECRET_KEY_BASE_VERSION=v1 # length=64
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
+9 -9
View File
@@ -4,13 +4,13 @@
<!-- metadata -->
* **Category**: Apps
* **Status**: 3
* **Status**: 1, alpha
* **Image**: [`plausible/analytics`](https://hub.docker.com/plausible/analytics), 4, upstream
* **Healthcheck**:
* **Backups**: Yes
* **Email**: Yes
* **Tests**: No
* **SSO**: N/A
* **Backups**: No
* **Email**: No
* **Tests**:
* **SSO**: No
<!-- endmetadata -->
## Basic usage
@@ -19,11 +19,11 @@
2. Deploy [`coop-cloud/traefik`]
3. `abra app new ${REPO_NAME} --secrets` (optionally with `--pass` if you'd like
to save secrets in `pass`)
4. `abra app secret insert YOURAPPDOMAIN smtp_password v1` and add your smtp password
5. `abra app config YOURAPPDOMAIN` - be sure to change `$DOMAIN` to something that resolves to
4. `abra app config YOURAPPDOMAIN` - be sure to change `$DOMAIN` to something that resolves to
your Docker swarm box
6. `abra app deploy YOURAPPDOMAIN`
7. Open the configured domain in your browser to finish set-up and create an admin account
5. `abra app deploy YOURAPPDOMAIN`
6. Open the configured domain in your browser to finish set-up
[`abra`]: https://git.coopcloud.tech/coop-cloud/abra
[`coop-cloud/traefik`]: https://git.coopcloud.tech/coop-cloud/traefik
p-cloud/traefik
+2 -6
View File
@@ -1,6 +1,2 @@
export CLICKHOUSE_CONFIG_VERSION=v2
export CLICKHOUSE_USER_CONFIG_VERSION=v2
export CLICKHOUSE_ENTRYPOINT_VERSION=v7
export PG_BACKUP_VERSION=v1
export CLICKHOUSE_BACKUP_VERSION=v1
export PLAUSIBLE_ENTRYPOINT_VERSION=v2
export CLICKHOUSE_CONF_VERSION=v1
export CLICKHOUSE_USER_CONF_VERSION=v2
-30
View File
@@ -1,30 +0,0 @@
#!/bin/bash
set -e
# clickhouse-backup output lives inside the event-data volume (snapshotted via
# backupbot.backup.volumes.event-data.path). Restoring the raw data files under a
# running server is unsafe, so restore performs a logical restore instead.
BACKUP_DIR=/var/lib/clickhouse/backup/events
MIGRATIONS_TSV="$BACKUP_DIR/schema_migrations.tsv"
backup() {
clickhouse-backup create events
# schema_migrations is a TinyLog table — clickhouse-backup only FREEZEs MergeTree
# data, so its rows aren't captured. Export them alongside the backup, else a restore
# leaves the ledger empty and the next boot re-runs every migration (DUPLICATE_COLUMN).
clickhouse-client --query "SELECT * FROM plausible_events_db.schema_migrations FORMAT TSV" > "$MIGRATIONS_TSV"
}
backup_cleanup() {
rm -rf "$BACKUP_DIR"
}
restore() {
clickhouse-backup restore --rm events
clickhouse-client --query "TRUNCATE TABLE plausible_events_db.schema_migrations"
clickhouse-client --query "INSERT INTO plausible_events_db.schema_migrations FORMAT TSV" < "$MIGRATIONS_TSV"
rm -rf "$BACKUP_DIR"
}
"$@"
-21
View File
@@ -1,21 +0,0 @@
---
version: "3.8"
services:
app:
environment:
- MAILER_ADAPTER
- SMTP_HOST_ADDR
- MAILER_EMAIL
- MAILER_NAME
- SMTP_HOST_PORT
- SMTP_USER_NAME
- SMTP_USER_PWD
- SMTP_HOST_SSL_ENABLED
secrets:
- smtp_password
secrets:
smtp_password:
name: ${STACK_NAME}_smtp_password_${SECRET_SMTP_PASSWORD_VERSION}
external: true
+20 -93
View File
@@ -3,110 +3,57 @@ version: "3.8"
services:
app:
image: ghcr.io/plausible/community-edition:v3.2.1
entrypoint: /plausible_entrypoint.sh
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"
depends_on:
- db
- events
- 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}_events:8123/plausible_events_db
- SMTP_HOST_ADDR
- MAILER_EMAIL
- DISABLE_REGISTRATION
- LOG_LEVEL
secrets:
- totp_secret
- key_base
configs:
- source: plausible_entrypoint
target: /plausible_entrypoint.sh
mode: 0555
- DISABLE_AUTH
networks:
- proxy
- internal
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1:8000"]
interval: 15s
timeout: 10s
retries: 10
start_period: 15s
deploy:
restart_policy:
# `any`, not `on-failure`: a restore disrupts postgres under the app and Erlang then
# shuts down gracefully (exit 0), which on-failure treats as done and never restarts.
condition: any
condition: on-failure
labels:
- "traefik.enable=true"
- "traefik.http.services.${STACK_NAME}.loadbalancer.server.port=8000"
- "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=5.1.0+v3.2.1
- coop-cloud.${STACK_NAME}.version=1.1.0+1.5.1
db:
image: pgautoupgrade/pgautoupgrade:18-alpine
image: postgres:13.11-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
configs:
- source: pg_backup
target: /pg_backup.sh
mode: 0555
deploy:
labels:
backupbot.backup: "true"
backupbot.backup.volumes.db-data.path: "postgres.dump.gz"
backupbot.backup.pre-hook: "/pg_backup.sh backup"
backupbot.backup.post-hook: "/pg_backup.sh backup_cleanup"
backupbot.restore: "true"
backupbot.restore.post-hook: "/pg_backup.sh restore"
events:
image: clickhouse/clickhouse-server:24.12-alpine
plausible_events_db:
image: clickhouse/clickhouse-server:23.4.2.11-alpine
volumes:
- event-data:/var/lib/clickhouse
environment:
- CLICKHOUSE_SKIP_USER_SETUP=1
entrypoint: /custom-entrypoint.sh
configs:
- source: clickhouse_config
- source: clickhouse-config
target: /etc/clickhouse-server/config.d/logging.xml
- source: clickhouse_user_config
- source: clickhouse-user-config
target: /etc/clickhouse-server/users.d/clickhouse-user-config.xml
- source: clickhouse_entrypoint
target: /custom-entrypoint.sh
mode: 0555
- source: clickhouse_backup
target: /clickhouse_backup.sh
mode: 0555
networks:
- internal
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1:8123/ping || exit 1"]
interval: 15s
timeout: 10s
retries: 10
start_period: 15s
deploy:
labels:
backupbot.backup: "true"
backupbot.backup.volumes.event-data.path: "backup/events"
backupbot.backup.pre-hook: "/clickhouse_backup.sh backup"
backupbot.backup.post-hook: "/clickhouse_backup.sh backup_cleanup"
backupbot.restore: "true"
backupbot.restore.post-hook: "/clickhouse_backup.sh restore"
volumes:
db-data:
@@ -118,29 +65,9 @@ networks:
internal:
configs:
plausible_entrypoint:
name: ${STACK_NAME}_plausible_entrypoint_${PLAUSIBLE_ENTRYPOINT_VERSION}
file: plausible_entrypoint.sh
clickhouse_config:
name: ${STACK_NAME}_clickhouse_config_${CLICKHOUSE_CONFIG_VERSION}
clickhouse-config:
name: ${STACK_NAME}_clickhouse_config_${CLICKHOUSE_CONF_VERSION}
file: clickhouse-config.xml
clickhouse_user_config:
name: ${STACK_NAME}_clickhouse_user_config_${CLICKHOUSE_USER_CONFIG_VERSION}
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
pg_backup:
name: ${STACK_NAME}_pg_backup_${PG_BACKUP_VERSION}
file: pg_backup.sh
clickhouse_backup:
name: ${STACK_NAME}_clickhouse_backup_${CLICKHOUSE_BACKUP_VERSION}
file: clickhouse_backup.sh
secrets:
totp_secret:
name: ${STACK_NAME}_totp_secret_${SECRET_TOTP_VAULT_KEY_VERSION}
external: true
key_base:
name: ${STACK_NAME}_key_base_${SECRET_KEY_BASE_VERSION}
external: true
-59
View File
@@ -1,59 +0,0 @@
#!/bin/bash
# Install clickhouse-backup (powers this recipe's backup/restore hooks) before starting the
# server. The binary is cached on the persistent volume keyed by version (downloaded at most
# once per app) and fetched with bounded retries + a read timeout; the binary is verified before
# being trusted or cached. If it truly cannot be installed the deploy fails loudly rather than
# silently shipping broken backups.
set -e
CLICKHOUSE_BACKUP_VERSION=2.8.1
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-v${CLICKHOUSE_BACKUP_VERSION}"
BIN=/usr/local/bin/clickhouse-backup
URL="https://github.com/Altinity/clickhouse-backup/releases/download/v${CLICKHOUSE_BACKUP_VERSION}/clickhouse-backup-linux-${ARCH}.tar.gz"
binary_ok() {
"$1" --version >/dev/null 2>&1
}
install_clickhouse_backup() {
mkdir -p "$CACHE_DIR"
if [ -x "$CACHED" ] && binary_ok "$CACHED"; then
cp -f "$CACHED" "$BIN"
echo "clickhouse-backup: using verified cached binary ($CACHED)"
return 0
fi
rm -f "$CACHED" # absent or fails to execute — re-fetch
for attempt in 1 2 3 4 5; do
if wget -T 30 --continue --output-document=/tmp/clickhouse-backup.tar.gz "$URL" \
&& tar -xf /tmp/clickhouse-backup.tar.gz --directory=/usr/local/bin --strip-components=3 \
&& binary_ok "$BIN"; then
cp -f "$BIN" "$CACHED" 2>/dev/null || true
echo "clickhouse-backup: downloaded, verified + cached (attempt ${attempt})"
return 0
fi
echo "clickhouse-backup: fetch attempt ${attempt}/5 failed" >&2
[ "$attempt" -lt 5 ] && sleep $((attempt * 10))
done
echo "clickhouse-backup: could not install after 5 attempts — failing the deploy (without it backup/restore would be silently broken)" >&2
return 1
}
install_clickhouse_backup
exec /entrypoint.sh
-29
View File
@@ -1,29 +0,0 @@
#!/bin/sh
set -e
# The dump lives at the db-data volume root: backup-bot-two v2 snapshots paths inside
# named volumes (backupbot.backup.volumes.db-data.path), not the container root fs.
DUMP=/var/lib/postgresql/data/postgres.dump
backup() {
pg_dump -U "$POSTGRES_USER" -Fc "$POSTGRES_DB" | gzip > "$DUMP.gz"
}
backup_cleanup() {
rm -f "$DUMP.gz"
}
restore() {
gzip -d "$DUMP.gz"
# --if-exists: otherwise DROPs on objects absent from the live db error out and
# pg_restore exits 1, killing the chain and leaving the dump behind.
pg_restore --clean --if-exists -U "$POSTGRES_USER" --dbname="$POSTGRES_DB" < "$DUMP"
rm -f "$DUMP"
# pg_restore --clean recreates objects under the live app, so its pooled connections
# keep stale type-OID caches ('cache lookup failed for type ...' crash loops, e.g.
# Oban). Terminate them so Ecto reconnects fresh.
psql -U "$POSTGRES_USER" -d "$POSTGRES_DB" -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = current_database() AND pid <> pg_backend_pid();"
}
"$@"
-9
View File
@@ -1,9 +0,0 @@
#!/bin/sh
set -e
[ -f /run/secrets/totp_secret ] && export TOTP_VAULT_KEY="$(cat /run/secrets/totp_secret)"
[ -f /run/secrets/key_base ] && export SECRET_KEY_BASE="$(cat /run/secrets/key_base)"
[ -f /run/secrets/smtp_password ] && export SMTP_USER_PWD="$(cat /run/secrets/smtp_password)"
sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run"
-7
View File
@@ -1,7 +0,0 @@
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
View File
@@ -1,8 +0,0 @@
⚠ 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
-1
View File
@@ -1 +0,0 @@
Switch to the new container of the Plausible Community Edition. Two new secrets need to be added. mail support is now available optionally. the clickhouse container was renamed, hopefully this does not lead to hickups.
-1
View File
@@ -1 +0,0 @@
fix smtp separation
-1
View File
@@ -1 +0,0 @@
Major upgrade of plausible version, but should not be breaking