feat: Initial commit.
This commit is contained in:
20
LICENSE
20
LICENSE
@@ -1,9 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2025 homelab
|
||||
Copyright (c) 2024 Plausible Analytics
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
94
README.md
94
README.md
@@ -1,3 +1,93 @@
|
||||
# plausible
|
||||
<p align="center">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/plausible/community-edition/refs/heads/v2.1.1/images/logo_dark.svg" width="300">
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/plausible/community-edition/refs/heads/v2.1.1/images/logo_light.svg" width="300">
|
||||
<img src="https://raw.githubusercontent.com/plausible/community-edition/refs/heads/v2.1.1/images/logo_light.svg" width="300">
|
||||
</picture>
|
||||
</p>
|
||||
|
||||
Privacy focused web analytics platform
|
||||
<p align="center">
|
||||
A getting started guide to self-hosting <a href="https://plausible.io/blog/community-edition">Plausible Community Edition</a>
|
||||
</p>
|
||||
|
||||
---
|
||||
|
||||
### 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 v3.0.1 --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.
|
||||
|
||||
> [!NOTE]
|
||||
> Plausible CE is funded by our cloud subscribers.
|
||||
>
|
||||
> If you know someone who might [find Plausible useful](https://plausible.io/?utm_medium=Social&utm_source=GitHub&utm_campaign=readme), we'd appreciate if you'd let them know.
|
||||
|
||||
### 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)
|
||||
|
||||
3
clickhouse/ipv4-only.xml
Normal file
3
clickhouse/ipv4-only.xml
Normal file
@@ -0,0 +1,3 @@
|
||||
<clickhouse>
|
||||
<listen_host>0.0.0.0</listen_host>
|
||||
</clickhouse>
|
||||
28
clickhouse/logs.xml
Normal file
28
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
clickhouse/low-resources.xml
Normal file
23
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>
|
||||
103
compose.yml
Normal file
103
compose.yml
Normal file
@@ -0,0 +1,103 @@
|
||||
services:
|
||||
plausible_db:
|
||||
image: postgres:16-alpine
|
||||
restart: unless-stopped
|
||||
user: 1000:1000
|
||||
volumes:
|
||||
- ${DB_MNT}:/var/lib/postgresql/data
|
||||
- /etc/passwd:/etc/passwd:ro
|
||||
env_file: .env
|
||||
environment:
|
||||
- POSTGRES_PASSWORD=postgres
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
||||
start_period: 1m
|
||||
|
||||
plausible_events_db:
|
||||
image: clickhouse/clickhouse-server:24.12-alpine
|
||||
restart: unless-stopped
|
||||
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
|
||||
# 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
|
||||
- ./clickhouse/low-resources.xml:/etc/clickhouse-server/config.d/low-resources.xml:ro
|
||||
ulimits:
|
||||
nofile:
|
||||
soft: 262144
|
||||
hard: 262144
|
||||
environment:
|
||||
- CLICKHOUSE_SKIP_USER_SETUP=1
|
||||
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:v3.0.1
|
||||
restart: unless-stopped
|
||||
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
|
||||
ports:
|
||||
- 127.0.0.1:${HTTP_PORT}:${HTTP_PORT}
|
||||
environment:
|
||||
- TMPDIR=/var/lib/plausible/tmp
|
||||
# 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
|
||||
- SMTP_HOST_SSL_ENABLED
|
||||
- POSTMARK_API_KEY
|
||||
- MAILGUN_API_KEY
|
||||
- MAILGUN_DOMAIN
|
||||
- MAILGUN_BASE_URI
|
||||
- MANDRILL_API_KEY
|
||||
- SENDGRID_API_KEY
|
||||
|
||||
volumes:
|
||||
event-data:
|
||||
event-logs:
|
||||
plausible-data:
|
||||
7
example.env
Normal file
7
example.env
Normal file
@@ -0,0 +1,7 @@
|
||||
BASE_URL=https://plausible.housh.dev
|
||||
SECRET_KEY=super-secret # generate secret `openssl rand -base64 48`
|
||||
HTTP_PORT=8004
|
||||
MAXMIND_LICENSE_KEY=license-key
|
||||
MAXMIND_EDITION=GeoLite2-City
|
||||
POSTGRES_PASSWORD=super-secret
|
||||
DB_MNT=/mnt
|
||||
Reference in New Issue
Block a user