Add Plausible container

This commit is contained in:
Kevin Heyer 2025-03-22 06:49:53 +00:00
parent 1ea9c2693f
commit fbb9037617
5 changed files with 231 additions and 0 deletions

55
plausible/.env-example Normal file
View file

@ -0,0 +1,55 @@
# Postgres version for the Plausible database
PLAUSIBLE_POSTGRES_VERSION=16
# Password for the PostgreSQL database
PLAUSIBLE_POSTGRES_PASSWORD=your_postgres_password_here
# Clickhouse version for the Plausible events database
PLAUSIBLE_CLICKHOUSE_VERSION=24.3.3.102-alpine
# Version of Plausible Community Edition
PLAUSIBLE_VERSION=v2.1.5
# Domain for Plausible instance
PLAUSIBLE_DOMAIN=plausible.example.com
# Secret key base for Plausible instance (set to a secure random string)
# Generate with echo "PLAUSIBLE_SECRET_KEY_BASE=$(openssl rand -base64 48)"
PLAUSIBLE_SECRET_KEY_BASE=your_secure_secret_key_base_here
# Temporary directory for Plausible
TMPDIR=/var/lib/plausible/tmp
#################################
# Following fields are optional #
#################################
# Configuration for databases
#DATABASE_URL=postgres://postgres:${PLAUSIBLE_POSTGRES_PASSWORD}@plausible-db:5432/plausible
#CLICKHOUSE_DATABASE_URL=clickhouse://plausible-events:9000/plausible_events
# Google OAuth credentials
#GOOGLE_CLIENT_ID=your_google_client_id_here
#GOOGLE_CLIENT_SECRET=your_google_client_secret_here
# Geolocation configuration (Optional)
#IP_GEOLOCATION_DB=path_to_geolocation_db
#GEONAMES_SOURCE_FILE=path_to_geonames_file
#MAXMIND_LICENSE_KEY=your_maxmind_license_key_here
#MAXMIND_EDITION=your_maxmind_edition_here
# Email configuration (choose one of the email adapters)
#MAILER_ADAPTER=smtp # Options: smtp, sendgrid, postmark, mandrill, mailgun
#MAILER_EMAIL=your_email_here
#MAILER_NAME="Your Name or Company"
#SMTP_HOST_ADDR=smtp.yourmailserver.com
#SMTP_HOST_PORT=587
#SMTP_USER_NAME=your_smtp_username_here
#SMTP_USER_PWD=your_smtp_password_here
#SMTP_HOST_SSL_ENABLED=true
#POSTMARK_API_KEY=your_postmark_api_key_here
#MAILGUN_API_KEY=your_mailgun_api_key_here
#MAILGUN_DOMAIN=your_mailgun_domain_here
#MAILGUN_BASE_URI=https://api.mailgun.net
#MANDRILL_API_KEY=your_mandrill_api_key_here
#SENDGRID_API_KEY=your_sendgrid_api_key_here

View file

@ -0,0 +1,3 @@
<clickhouse>
<listen_host>0.0.0.0</listen_host>
</clickhouse>

View file

@ -0,0 +1,28 @@
<clickhouse>
<logger>
<level>warning</level>
<console>true</console>
</logger>
<query_log replace="1">
<database>system</database>
<table>query_log</table>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
<engine>
ENGINE = MergeTree
PARTITION BY event_date
ORDER BY (event_time)
TTL event_date + interval 30 day
SETTINGS ttl_only_drop_parts=1
</engine>
</query_log>
<!-- Stops unnecessary logging -->
<metric_log remove="remove" />
<asynchronous_metric_log remove="remove" />
<query_thread_log remove="remove" />
<text_log remove="remove" />
<trace_log remove="remove" />
<session_log remove="remove" />
<part_log remove="remove" />
</clickhouse>

View file

@ -0,0 +1,23 @@
<!-- https://clickhouse.com/docs/en/operations/tips#using-less-than-16gb-of-ram -->
<clickhouse>
<!--
https://clickhouse.com/docs/en/operations/server-configuration-parameters/settings#mark_cache_size -->
<mark_cache_size>524288000</mark_cache_size>
<profile>
<default>
<!-- https://clickhouse.com/docs/en/operations/settings/settings#max_threads -->
<max_threads>1</max_threads>
<!-- https://clickhouse.com/docs/en/operations/settings/settings#max_block_size -->
<max_block_size>8192</max_block_size>
<!-- https://clickhouse.com/docs/en/operations/settings/settings#max_download_threads -->
<max_download_threads>1</max_download_threads>
<!--
https://clickhouse.com/docs/en/operations/settings/settings#input_format_parallel_parsing -->
<input_format_parallel_parsing>0</input_format_parallel_parsing>
<!--
https://clickhouse.com/docs/en/operations/settings/settings#output_format_parallel_formatting -->
<output_format_parallel_formatting>0</output_format_parallel_formatting>
</default>
</profile>
</clickhouse>

View file

@ -0,0 +1,122 @@
services:
plausible_db:
image: postgres:${PLAUSIBLE_POSTGRES_VERSION:-16}
container_name: plausible-db
restart: always
networks:
- plausible
volumes:
- db-data:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=${PLAUSIBLE_POSTGRES_PASSWORD:?error}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
start_period: 1m
plausible_events_db:
image: clickhouse/clickhouse-server:${PLAUSIBLE_CLICKHOUSE_VERSION:-24.3.3.102-alpine}
container_name: plausible-events
restart: always
networks:
- plausible
volumes:
- event-data:/var/lib/clickhouse
- event-logs:/var/log/clickhouse-server
- ./data/clickhouse/logs.xml:/etc/clickhouse-server/config.d/logs.xml:ro
# This makes ClickHouse bind to IPv4 only, since Docker doesn't enable IPv6 in bridge networks by default.
# Fixes "Listen [::]:9000 failed: Address family for hostname not supported" warnings.
- ./data/clickhouse/ipv4-only.xml:/etc/clickhouse-server/config.d/ipv4-only.xml:ro
# This makes ClickHouse consume less resources, which is useful for small setups.
# https://clickhouse.com/docs/en/operations/tips#using-less-than-16gb-of-ram
- ./data/clickhouse/low-resources.xml:/etc/clickhouse-server/config.d/low-resources.xml:ro
ulimits:
nofile:
soft: 262144
hard: 262144
healthcheck:
test: ["CMD-SHELL", "wget --no-verbose --tries=1 -O - http://127.0.0.1:8123/ping || exit 1"]
start_period: 1m
plausible:
image: ghcr.io/plausible/community-edition:${PLAUSIBLE_VERSION:-v2.1.5}
container_name: plausible
restart: always
command: sh -c "/entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run"
depends_on:
plausible_db:
condition: service_healthy
plausible_events_db:
condition: service_healthy
networks:
- traefik
- plausible
volumes:
- plausible:/var/lib/plausible
ulimits:
nofile:
soft: 65535
hard: 65535
environment:
- TMPDIR
# required: https://github.com/plausible/community-edition/wiki/configuration#required
- BASE_URL=https://${PLAUSIBLE_DOMAIN}
- SECRET_KEY_BASE=${PLAUSIBLE_SECRET_KEY_BASE}
# optional: https://github.com/plausible/community-edition/wiki/configuration#optional
# registration: https://github.com/plausible/community-edition/wiki/configuration#registration
- TOTP_VAULT_KEY
- DISABLE_REGISTRATION
- ENABLE_EMAIL_VERIFICATION
# web: https://github.com/plausible/community-edition/wiki/configuration#web
- HTTP_PORT
- HTTPS_PORT
# databases: https://github.com/plausible/community-edition/wiki/configuration#database
- DATABASE_URL
- CLICKHOUSE_DATABASE_URL
# Google: https://github.com/plausible/community-edition/wiki/configuration#google
- GOOGLE_CLIENT_ID
- GOOGLE_CLIENT_SECRET
# geolocation: https://github.com/plausible/community-edition/wiki/configuration#ip-geolocation
- IP_GEOLOCATION_DB
- GEONAMES_SOURCE_FILE
- MAXMIND_LICENSE_KEY
- MAXMIND_EDITION
# email: https://github.com/plausible/community-edition/wiki/configuration#email
- MAILER_ADAPTER
- MAILER_EMAIL
- MAILER_NAME
- SMTP_HOST_ADDR
- SMTP_HOST_PORT
- SMTP_USER_NAME
- SMTP_USER_PWD
- SMTP_HOST_SSL_ENABLED
- POSTMARK_API_KEY
- MAILGUN_API_KEY
- MAILGUN_DOMAIN
- MAILGUN_BASE_URI
- MANDRILL_API_KEY
- SENDGRID_API_KEY
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik"
- "traefik.http.routers.plausible.entrypoints=http"
- "traefik.http.routers.plausible.rule=Host(`${PLAUSIBLE_DOMAIN:?error}`)"
- "traefik.http.middlewares.plausible-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.plausible.middlewares=plausible-https-redirect"
- "traefik.http.routers.plausible-secure.entrypoints=https"
- "traefik.http.routers.plausible-secure.rule=Host(`${PLAUSIBLE_DOMAIN:?error}`)"
- "traefik.http.routers.plausible-secure.tls=true"
- "traefik.http.routers.plausible-secure.service=plausible"
- "traefik.http.services.plausible.loadbalancer.server.port=8080"
networks:
traefik:
external: true
plausible:
driver: bridge
volumes:
db-data:
event-data:
event-logs:
plausible: