From 249b22d338a746462febb880873bafcc1678a48c Mon Sep 17 00:00:00 2001 From: ruslandoga <67764432+ruslandoga@users.noreply.github.com> Date: Wed, 25 Sep 2024 19:59:25 +0700 Subject: [PATCH] v2.1.2 --- .gitignore | 6 +++ README.md | 88 +++++++++++++++++++++++++++++++++++++++ clickhouse/ipv4-only.xml | 3 ++ clickhouse/logs.xml | 36 ++++++++++++++++ compose.yml | 90 ++++++++++++++++++++++++++++++++++++++++ 5 files changed, 223 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 clickhouse/ipv4-only.xml create mode 100644 clickhouse/logs.xml create mode 100644 compose.yml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ca850f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +* +!compose.yml +!clickhouse/logs.xml +!clickhouse/ipv4-only.xml +!README.md +!.gitignore diff --git a/README.md b/README.md new file mode 100644 index 0000000..08e640e --- /dev/null +++ b/README.md @@ -0,0 +1,88 @@ +

+ + + + + +

+ +

+ A getting started guide to self-hosting Plausible Community Edition +

+ +--- + +### Prerequisites + +- **[Docker](https://docs.docker.com/engine/install/)** and **[Docker Compose](https://docs.docker.com/compose/install/)** must be installed on your machine. +- **CPU** must support **SSE 4.2** or **NEON** instruction set or higher (required by ClickHouse). +- At least **2 GB of RAM** is recommended for running ClickHouse and Plausible without fear of OOMs. + +### Quick start + +1. Clone this repository: + + ```console + $ git clone -b v2.1.2 --single-branch https://github.com/plausible/community-edition plausible-ce + Cloning into 'plausible-ce'... + remote: Enumerating objects: 13, done. + remote: Counting objects: 100% (10/10), done. + remote: Compressing objects: 100% (9/9), done. + remote: Total 13 (delta 0), reused 7 (delta 0), pack-reused 3 (from 1) + Receiving objects: 100% (13/13), done. + + $ cd plausible-ce + + $ ls -1 + README.md + clickhouse/ + compose.yml + ``` + +1. Create and configure your [environment](https://docs.docker.com/compose/environment-variables/) file: + + ```console + $ touch .env + $ echo "BASE_URL=https://plausible.example.com" >> .env + $ echo "SECRET_KEY_BASE=$(openssl rand -base64 48)" >> .env + + $ cat .env + BASE_URL=https://plausible.example.com + SECRET_KEY_BASE=As0fZsJlUpuFYSthRjT5Yflg/NlxkFKPRro72xMLXF8yInZ60s6xGGXYVqml+XN1 + ``` + + Make sure `$BASE_URL` is set to the actual domain where you plan to host the service. The domain must have a DNS entry pointing to your server for proper resolution and automatic Let's Encrypt TLS certificate issuance. More on that in the next step. + +1. Expose Plausible server to the web with a [compose override file:](https://github.com/plausible/community-edition/wiki/compose-override) + + ```sh + $ echo "HTTP_PORT=80" >> .env + $ echo "HTTPS_PORT=443" >> .env + + $ cat > compose.override.yml << EOF + services: + plausible: + ports: + - 80:80 + - 443:443 + EOF + ``` + + Setting `HTTP_PORT=80` and `HTTPS_PORT=443` enables automatic Let's Encrypt TLS certificate issuance. You might want to choose different values if, for example, you plan to run Plausible behind [a reverse proxy.](https://github.com/plausible/community-edition/wiki/reverse-proxy) + +1. Start the services with Docker Compose: + + ```console + $ docker compose up -d + ``` + +1. Visit your instance at `$BASE_URL` and create the first user. + +### Wiki + +For more information on installation, upgrades, configuration, and integrations please see our [wiki.](https://github.com/plausible/community-edition/wiki) + +### Contact + +- For release announcements please go to [GitHub releases.](https://github.com/plausible/analytics/releases) +- For a question or advice please go to [GitHub discussions.](https://github.com/plausible/analytics/discussions/categories/self-hosted-support) diff --git a/clickhouse/ipv4-only.xml b/clickhouse/ipv4-only.xml new file mode 100644 index 0000000..7eb0a5c --- /dev/null +++ b/clickhouse/ipv4-only.xml @@ -0,0 +1,3 @@ + + 0.0.0.0 + diff --git a/clickhouse/logs.xml b/clickhouse/logs.xml new file mode 100644 index 0000000..0eac674 --- /dev/null +++ b/clickhouse/logs.xml @@ -0,0 +1,36 @@ + + + warning + true + + + + system + query_log
+ 7500 + + ENGINE = MergeTree + PARTITION BY event_date + ORDER BY (event_time) + TTL event_date + interval 30 day + SETTINGS ttl_only_drop_parts=1 + +
+ + + event_date + event_date + INTERVAL 30 DAY DELETE + + + + event_date + event_date + INTERVAL 30 DAY DELETE + + + + + + + + +
diff --git a/compose.yml b/compose.yml new file mode 100644 index 0000000..0e785d8 --- /dev/null +++ b/compose.yml @@ -0,0 +1,90 @@ +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 enable IPv6 in bridge networks by default. + # Fixes "Listen [::]:9000 failed: Address family for hostname not supported" warnings. + - ./clickhouse/ipv4-only.xml:/etc/clickhouse-server/config.d/ipv4-only.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 + volumes: + - plausible-data:/var/lib/plausible + ulimits: + nofile: + soft: 65535 + hard: 65535 + environment: + # required: https://github.com/plausible/community-edition/wiki/configuration#required + - BASE_URL=${BASE_URL} + - SECRET_KEY_BASE=${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 + - POSTMARK_API_KEY + - MAILGUN_API_KEY + - MAILGUN_DOMAIN + - MAILGUN_BASE_URI + - MANDRILL_API_KEY + - SENDGRID_API_KEY + +volumes: + db-data: + event-data: + event-logs: + plausible-data: