本文將指導如何在 Debian 11 下使用 Docker 安裝 Plausible Analytics 自建網站統計。
PS:本文同時適用於任何可安裝 Docker 的 Linux 發行版。
為什麼要自建網站統計?#
原因很簡單,自己網站的數據當然要自己保管,你希望你網站的數據都被第三方賣給「所謂的」大數據分析公司嗎?
Plausible Analytics 是一款以隱私保護著稱的網站統計軟體,經過幾個月的試用,基本可以滿足所有的需求,可以取代商業化的 Google Analytics 等產品。
安裝 Plausible Analytics#
建議安裝在 /opt/plausible
目錄:
mkdir -p /opt/plausible
cd /opt/plausible
首先,我們需要建立一個 docker-compose.yaml
文件,請按照實際需求修改參數:
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
的文件:
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=隨機字符
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 之類的免費服務,也可以自己搭建 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
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 後生效我們即可訪問 https://stat.example.com/
更新 Plausible Analytics#
萬能的 Docker 更新大法:
docker-compose pull
docker-compose up -d
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#
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>
)
}
更多的添加方法請查看官網的文檔。