Add Plausible container
This commit is contained in:
parent
1ea9c2693f
commit
fbb9037617
5 changed files with 231 additions and 0 deletions
55
plausible/.env-example
Normal file
55
plausible/.env-example
Normal 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
|
3
plausible/data/clickhouse/ipv4-only.xml
Normal file
3
plausible/data/clickhouse/ipv4-only.xml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
<clickhouse>
|
||||||
|
<listen_host>0.0.0.0</listen_host>
|
||||||
|
</clickhouse>
|
28
plausible/data/clickhouse/logs.xml
Normal file
28
plausible/data/clickhouse/logs.xml
Normal 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>
|
23
plausible/data/clickhouse/low-resources.xml
Normal file
23
plausible/data/clickhouse/low-resources.xml
Normal 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>
|
122
plausible/docker-compose.yml
Normal file
122
plausible/docker-compose.yml
Normal 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:
|
||||||
|
|
Loading…
Add table
Reference in a new issue