# ignore: true # documentation: https://plausible.io/docs/self-hosting # slogan: "Plausible Analytics is a simple, open-source, lightweight (< 1 KB) and privacy-friendly web analytics alternative to Google Analytics." # tags: analytics, privacy, google, alternative # port: 8000 services: plausible: image: "ghcr.io/plausible/community-edition:v2.1.4" command: 'sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run"' environment: - SERVICE_FQDN_PLAUSIBLE - DATABASE_URL=postgres://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@plausible-db:5432/${POSTGRES_DB:-plausible-db} - CLICKHOUSE_DATABASE_URL=http://plausible-events-db:8123/plausible_events_db - BASE_URL=${SERVICE_FQDN_PLAUSIBLE} - SECRET_KEY_BASE=${SERVICE_BASE64_64_PLAUSIBLE} - TOTP_VAULT_KEY=${SERVICE_REALBASE64_32_TOTP} depends_on: plausible-db: condition: service_healthy plausible-events-db: condition: service_healthy mail: condition: service_healthy healthcheck: test: [ "CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1:8000/api/health", ] interval: 10s timeout: 5s retries: 5 start_period: 45s mail: image: bytemark/smtp platform: linux/amd64 healthcheck: test: ["CMD-SHELL", "bash -c ':> /dev/tcp/127.0.0.1/25' || exit 1"] interval: 5s timeout: 10s retries: 20 plausible-db: image: "postgres:16-alpine" volumes: - plausible-postgres-data:/var/lib/postgresql/data environment: - POSTGRES_DB=${POSTGRES_DB:-plausible-db} - POSTGRES_USER=${SERVICE_USER_POSTGRES} - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES} healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s timeout: 20s retries: 10 plausible-events-db: image: "clickhouse/clickhouse-server:24.3.3.102-alpine" volumes: - plausible-events-data:/var/lib/clickhouse - type: bind source: ./clickhouse/clickhouse-config.xml target: /etc/clickhouse-server/config.d/logging.xml read_only: true content: "00" - type: bind source: ./clickhouse/clickhouse-user-config.xml target: /etc/clickhouse-server/users.d/logging.xml read_only: true content: 'warningtrue' 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: 30s