services: plausible_db: image: postgres:16-alpine restart: always volumes: - db-data:/var/lib/postgresql/data environment: - POSTGRES_PASSWORD=postgres healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] start_interval: 2s start_period: 1m plausible_events_db: image: clickhouse/clickhouse-server:24.3.3.102-alpine restart: always volumes: - event-data:/var/lib/clickhouse - event-logs:/var/log/clickhouse-server - ./clickhouse/logs.xml:/etc/clickhouse-server/config.d/logs.xml:ro # This makes ClickHouse bind to IPv4 only, since Docker doesn't support IPv6 by default. - ./clickhouse/ipv4.xml:/etc/clickhouse-server/config.d/ipv4.xml:ro ulimits: nofile: soft: 262144 hard: 262144 healthcheck: test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:8123/ping || exit 1"] start_interval: 2s start_period: 1m plausible: image: ghcr.io/plausible/community-edition:v2.1.2 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 # Note that setting ports opens firewall for external access. ports: - 80:80 - 443:443 volumes: - plausible-data:/var/lib/plausible environment: - BASE_URL=${BASE_URL} - SECRET_KEY_BASE=${SECRET_KEY_BASE} - HTTP_PORT=80 - HTTPS_PORT=443 volumes: db-data: event-data: event-logs: plausible-data: