Docker 安装 Plausible Analytics 自建网站统计
本文将指导使用 Docker 安装 Plausible Analytics 自建网站统计。
PS:本文同时适用于任何可安装 Docker 的 Linux 发行版。
为什么要自建网站统计?
原因很简单,自己网站的数据当然要自己保管,你希望你网站的数据都被第三方卖给 “所谓的” 大数据分析公司吗?
Plausible Analytics 是一款以隐私保护著称的网站统计软件,经过几个月的试用,基本可以满足所有的需求,可以取代商业化的 Google Analytics 等产品。
安装 Docker 和 Docker Compose
Debian 和 Ubuntu 系统请参考本站教程。
其他 Linux 系统可以使用 Docker 官方的脚本安装 Docker 和 Docker Compose:
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
安装 Plausible Analytics
建议安装在 /opt/plausible
目录:
mkdir -p /opt/plausible
cd /opt/plausible
首先,我们需要建立一个 docker-compose.yaml
文件,请按照实际需求修改参数:
services:
mail:
image: bytemark/smtp
restart: always
plausible_db:
image: postgres:16-alpine
volumes:
- db-data:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=postgres
restart: always
plausible_events_db:
image: clickhouse/clickhouse-server:24.3.3.102-alpine
volumes:
- event-data:/var/lib/clickhouse
- event-logs:/var/log/clickhouse-server
- ./clickhouse/clickhouse-config.xml:/etc/clickhouse-server/config.d/logging.xml:ro
- ./clickhouse/clickhouse-user-config.xml:/etc/clickhouse-server/users.d/logging.xml:ro
ulimits:
nofile:
soft: 262144
hard: 262144
restart: always
plausible:
image: ghcr.io/plausible/community-edition
command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run"
depends_on:
- plausible_db
- plausible_events_db
- mail
- geoip
volumes:
- ./geoip:/geoip:ro
ports:
- 127.0.0.1:8000:8000
env_file:
- plausible-conf.env
restart: always
geoip:
image: maxmindinc/geoipupdate
env_file:
- geoip.env
volumes:
- ./geoip:/usr/share/GeoIP
volumes:
db-data:
driver: local
event-data:
driver: local
geoip:
driver: local
然后我们在相同目录建立一个 geoip
的文件夹和 plausible-conf.env
的文件:
mkdir -p geoip
touch plausible-conf.env
touch geoip.env
修改 plausible-conf.env
,按照官网的教程进行配置,假设你的网址是 https://stat.example.com/
,举例如下:
ADMIN_USER_EMAIL=管理员邮箱
ADMIN_USER_NAME=管理员用户名
ADMIN_USER_PWD=管理员密码
BASE_URL=https://stat.example.com/
SECRET_KEY_BASE=随机 64 个字符
TOTP_VAULT_KEY=随机 32 个字符
MAILER_EMAIL=网站通知邮箱
SMTP_HOST_ADDR=SMTP 主机名
SMTP_HOST_PORT=SMTP 端口
SMTP_USER_NAME=SMTP 用户名
SMTP_USER_PWD=SMTP 密码
DISABLE_REGISTRATION=true
GEOLITE2_COUNTRY_DB=/geoip/GeoLite2-Country.mmdb
SECRET_KEY_BASE
需要一串 64 位的随机字符,可以使用 openssl rand -base64 64
生成。
TOTP_VAULT_KEY
需要一串 32 位的随机字符,可以使用 openssl rand -base64 32
生成。
DISABLE_REGISTRATION
设置 true
即关闭用户注册。
SMTP 可以使用市面上所有的邮件发送产品,或者懒人也可以直接用 Gmail 之类的免费服务,也可以自己搭建 Mailcow 自己用,教程在这儿。
然后我们注册个 Maxmind 帐号,注册成功后在左侧菜单 Account
> Manage License Keys
里点击 Generate new license key
获取一个 License key
并记录 Account ID
和这个 License key
:
然后修改 geoip.env
,并填入如下信息:
GEOIPUPDATE_EDITION_IDS=GeoLite2-Country
GEOIPUPDATE_FREQUENCY=168 # update every 7 days 设置 7 天更新一次 GeoIP 数据库
GEOIPUPDATE_ACCOUNT_ID=你的 Account ID
GEOIPUPDATE_LICENSE_KEY=你的 License Key
然后抓取镜像并启动:
docker compose pull
docker compose up -d
启动完成后即可试用 http://127.0.0.1:8000/
访问 Plausible,如果需要对外进行服务,我们还需要配置 Nginx 反向代理。
设置 Nginx 反代
从 docker-compose.yaml
配置里可以看出,我们监听在本地 8080 端口,此时我们可以用 Nginx 反代并开启 HTTPS,您可以参考本站教程:
然后直接反代本地 8080
端口,参考配置如下:
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
send_timeout 300;
proxy_pass http://127.0.0.1:8000;
location = /live/websocket {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
重启 Nginx 后生效我们即可访问 https://stat.example.com/
配置 Plausible Analytics
访问刚搭建好的 Plausible 并使用配置文件里的管理员邮箱和密码登录 (要使用邮箱登录哦,不是用户名):
登录后新建第一个要统计的网站域名,点击 +Add a website
:
输入要统计的网站域名,选择发送报告的时区,然后点击 Add snippet →
按钮:
然后把统计代码插入你的网页即可进行统计:
更新 Plausible Analytics
万能的 Docker 更新大法:
# 抓取最新的 Docker 镜像
docker compose pull
# 重启所有 Docker 镜像
docker compose up -d
# 清理 Docker 旧容器和残留镜像
docker system prune
备份 Plausible Analytics
其实主要是备份数据库,相关命令如下:
docker exec -t plausible_plausible_db_1 pg_dumpall -c -U postgres | gzip > dump_$(date +"%Y-%m-%d_%H_%M_%S").gz
即可按照当前时间 dump 出 PostgreSQL 数据库并使用 gzip
压缩打包。
迁移 Plausible Analytics
可以参考 Mailcow 的迁移方法。
卸载 Plausible Analytics
docker compose down
rm -rf /opt/plausible
docker image rm postgres:12
docker image rm maxmindinc/geoipupdate:latest
docker image rm plausible/analytics:latest
docker image rm yandex/clickhouse-server:21.3.2.5
docker image rm bytemark/smtp:latest
docker volume rm plausible_db-data
docker volume rm plausible_event-data
WordPress 添加方法
直接修改你使用的主题的 header.php
文件,在 <?php wp_head(); ?>
后面添加统计代码即可。
不想修改主题的也可以直接装官方的插件。
VuePress 添加方法
如果你使用 VuePress v1.x
,那么修改 .vuepress/config.js
文件,在 module.exports
加入:
['script', {}, `
const script = document.createElement('script');
script.async = true;
script.defer = true;
script['data-domain'] = '统计域名';
script.src = 'https://stat.example.com/js/plausible.js';
document.head.appendChild(script);`
],
如果你试用 VuePress v2.x
,那么修改 .vuepress/config.ts
文件,在 export default
加入:
['script', {}, `
const script = document.createElement('script');
script.async = true;
script.defer = true;
script['data-domain'] = '统计域名';
script.src = 'https://stat.example.com/js/plausible.js';
document.head.appendChild(script);`
],
Next.js 添加方法
安装 next-plausible 这个包,然后使用类似如下的代码:
import PlausibleProvider from 'next-plausible'
export default function MyApp({ Component, pageProps }) {
return (
<PlausibleProvider domain="统计域名" customDomain="https://stat.example.com" selfHosted>
<Component {...pageProps} />
</PlausibleProvider>
)
}
更多的添加方法请查看官网的文档。
很多广告屏蔽插件会屏蔽 plausible.js
,此时可以把 plausible.js
替换成 script.js
防止被屏蔽。