banner
 Sayyiku

Sayyiku

Chaos is a ladder
telegram
twitter

Debian 11 使用 Docker 安裝 Plausible Analytics 自建網站統計

本文將指導如何在 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>
  )
}

更多的添加方法請查看官網的文檔

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。