本文将指导如何在 Debian 11 下使用 Docker 安装 Plausible Analytics 自建网站统计。
PS:本文同时适用于任何可安装 Docker 的 Linux 发行版。
为什么要自建网站统计?
原因很简单,自己网站的数据当然要自己保管,你希望你网站的数据都被第三方卖给「所谓的」大数据分析公司吗?
Plausible Analytics 是一款以隐私保护著称的网站统计软件,经过几个月的试用,基本可以满足所有的需求,可以取代商业化的 Google Analytics 等产品。
安装 Plausible Analytics
建议安装在 /opt/plausible 目录:
| 12
 
 | mkdir -p /opt/plausiblecd /opt/plausible
 
 | 
首先,我们需要建立一个 docker-compose.yaml 文件,请按照实际需求修改参数:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 
 | version: "3.8"services:
 mail:
 image: bytemark/smtp
 restart: always
 
 plausible_db:
 image: postgres:12
 volumes:
 - db-data:/var/lib/postgresql/data
 environment:
 - POSTGRES_PASSWORD=postgres
 restart: always
 
 plausible_events_db:
 image: yandex/clickhouse-server:21.3.2.5
 volumes:
 - event-data:/var/lib/clickhouse
 - ./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: plausible/analytics:latest
 command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh db init-admin && /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 的文件:
| 12
 3
 
 | mkdir -p geoiptouch plausible-conf.env
 touch geoip.env
 
 | 
修改 plausible-conf.env,按照官网的教程进行配置,假设你的网址是 https://stat.example.com/,举例如下:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 
 | ADMIN_USER_EMAIL=管理员邮箱ADMIN_USER_NAME=管理员用户名
 ADMIN_USER_PWD=管理员密码
 BASE_URL=https://stat.example.com/
 SECRET_KEY_BASE=随机字符
 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 或者 pwgen 64 生成。
DISABLE_REGISTRATION 设置 true 即关闭用户注册。
SMTP 可以使用市面上所有的邮件发送产品,或者懒人也可以直接用 Gmail 之类的免费服务
然后我们注册个 Maxmind 帐号,注册成功后在左侧菜单 Account > Manage License Keys 里点击 Generate new license key 获取一个 License key 并记录 Account ID 和这个 License key:


然后修改 geoip.env,并填入如下信息:
| 12
 3
 4
 
 | GEOIPUPDATE_EDITION_IDS=GeoLite2-CountryGEOIPUPDATE_FREQUENCY=168
 GEOIPUPDATE_ACCOUNT_ID=你的 Account ID
 GEOIPUPDATE_LICENSE_KEY=你的 License Key
 
 | 
然后抓取镜像并启动:
| 12
 
 | docker-compose pulldocker-compose up -d
 
 | 

启动完成后即可试用 http://127.0.0.1:8000/ 访问 Plausible,如果需要对外进行服务,我们还需要配置 Nginx 反向代理。
设置 Nginx 反代
从 docker-compose.yaml 配置里可以看出,我们监听在本地 8080 端口,此时我们可以用 Nginx 反代并开启 HTTPS,您可以参考本站教程:
然后直接反代本地 8080 端口,参考配置如下:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 
 | 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;
 }
 
 | 
重启 Nginx 后生效我们即可访问 https://stat.example.com/
配置 Plausible Analytics
访问刚搭建好的 Plausible 并使用配置文件里的管理员邮箱和密码登录(要使用邮箱登录哦,不是用户名):

登录后新建第一个要统计的网站域名,点击 +Add a website:

输入要统计的网站域名,选择发送报告的时区,然后点击 Add snippet → 按钮:

然后把统计代码插入你的网页即可进行统计:

更新 Plausible Analytics
万能的 Docker 更新大法:
| 12
 3
 4
 5
 6
 
 | docker-compose pull
 
 docker-compose up -d
 
 docker system prune
 
 | 
备份 Plausible Analytics
其实主要是备份数据库,相关命令如下:
| 1
 | 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
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | docker-compose downrm -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 加入:
| 12
 3
 4
 5
 6
 7
 8
 
 | ['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 加入:
| 12
 3
 4
 5
 6
 7
 8
 
 | ['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 这个包,然后使用类似如下的代码:
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | import PlausibleProvider from 'next-plausible'
 export default function MyApp({ Component, pageProps }) {
 return (
 <PlausibleProvider domain="统计域名" customDomain="https://stat.example.com" selfHosted>
 <Component {...pageProps} />
 </PlausibleProvider>
 )
 }
 
 | 
更多的添加方法请查看官网的文档。