• 首页
  • 归档
  • 关于
  • 搜索
  • 夜间模式
    ©2026  望时代 Theme by OneBlog

    望时代

    搜索
    标签
    # 教程 # Linux # 脚本 # AI # 影音 # 游戏 # 随笔 # 科技 # 认知
  • 首页>
  • >
  • 正文
  • 搭建Plausible Analytics自托管统计分析工具教程 1

    2026年06月26日 2 阅读 0 评论 12594 字

    搭建Plausible Analytics自托管统计分析工具教程 1 __2023年7月1日 __3条评论 __259次阅读 __0人点赞 __Tao_Qi 什么是Plausible Analytics Plausible Analytics 是以隐私保护著称的网站统计工具,完全符合 GDPR,CCPA 和 PECR 标准,无 Cookie 追踪用户,脚本十分轻量(<1 kb),是 Google Analytics 的良好替代品 本次示例使用的是 Hetzner CAX21 ARM 架构伺服器来进行示范,Ubuntu 22.04.2 LTS 如果不想看完本教程,可以看官网的:Getting started | Plausible docs 从GitHub仓库Clone
    [code]

    git clone https://github.com/plausible/hosting
    cd hosting
    

    [/code]

    下面主要编辑两个文件,docker-compose.yml 和 plausible-conf.env 配置Docker Compose 请根据需要进行调整设置 Postgres 数据库,ClickHouse 数据库(用于统计数据)和 SMTP 服务器之间安装和网络。请在 DockerHub 上找到最适合你的 Plausible 版本(目前 Plausible 新版已适配 ARM64) plausible/analytics Tags | Docker Hub
    [code]

    version: "3.3"
    services:
      mail:
        image: bytemark/smtp
        restart: always
    
      plausible_db:
        # supported versions are 12, 13, and 14
        image: postgres:14-alpine
        restart: always
        volumes:
          - db-data:/var/lib/postgresql/data
        environment:
          - POSTGRES_PASSWORD=postgres
    
      plausible_events_db:
        image: clickhouse/clickhouse-server:22.8.13.20-alpine
        restart: always
        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
    
      plausible:
        image: plausible/analytics:v1.5
        restart: always
        command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run"
        depends_on:
          - plausible_db
          - plausible_events_db
          - mail
        ports:
          - 8000:8000
        env_file:
          - plausible-conf.env
    
    volumes:
      db-data:
        driver: local
      event-data:
        driver: local
      geoip:
        driver: local
    

    [/code]

    ARM 架构下,官方指定的镜像不适配 ARM 架构,稍作修改 docker-compose.yaml 文件,替换了 SMTP 镜像为 ixdotai/smtp:latest
    [code]

    version: "3.3"
    services:
      mail:
        image: ixdotai/smtp:latest
        restart: always
    

    [/code]

    以下是我目前使用的 docker-comopose.yaml 配置,有配置 maxmind 的数据源
    [code]

    version: "3.3"
    services:
      mail:
        image: ixdotai/smtp:latest
        restart: always
    
      plausible_db:
        # supported versions are 12, 13, and 14
        image: postgres:latest
        restart: always
        volumes:
          - db-data:/var/lib/postgresql/data
        environment:
          - POSTGRES_PASSWORD=postgres
    
      plausible_events_db:
        image: clickhouse/clickhouse-server:latest
        restart: always
        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
    
      plausible:
        image: plausible/analytics:latest
        restart: always
        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
        ports:
          - 8000:8000
        environment:
          - GEOLITE2_COUNTRY_DB=/geoip/GeoLite2-City.mmdb
        env_file:
          - plausible-conf.env
        volumes:
          - geoip:/geoip:ro
    
      geoip:
        image: maxmindinc/geoipupdate:latest
        restart: always
        environment:
          - 'GEOIPUPDATE_EDITION_IDS=GeoLite2-City GeoLite2-Country GeoLite2-ASN'  
          - GEOIPUPDATE_FREQUENCY=168 # update every 7 days
        env_file:
          geoip/geoip.conf
        volumes:
          - geoip:/usr/share/GeoIP
    
    volumes:
      db-data:
        driver: local
      event-data:
        driver: local
      geoip:
        driver: local
    

    [/code]

    配置环境变量 plausible-conf.env 先用以下方法生成 base64 随机密钥,然后编辑 plausible-conf.env 文件
    [code]

    openssl rand -base64 64 | tr -d '
    ' ; echo
    

    [/code]
    [code]

    vim plausible-conf.env
    

    [/code]

    新版本中已弃用 admin 的设置,Remove admin creation · plausible/hosting@7a3a3d2 (github.com)。我使用的环境如下,包括配置 SMTP 和 Google Search 集成
    [code]

    #ADMIN_USER_EMAIL=此处设置管理员邮箱
    #ADMIN_USER_NAME=此处设置管理员用户名
    #ADMIN_USER_PWD=此处设置管理员密码
    BASE_URL=https://stats.microcharon.dev #此处设置你的Plausible管理地址
    SECRET_KEY_BASE=NZLdRqYHZRYObdqbBEoPDV xE74/BmRvifXK7VUJ/hAoXYcyfRuPcgR97PnCPMGXaEU HVtiMOMzBCDDmazHPQ== #此处设置base64生成的随机字符
    ENABLE_EMAIL_VERIFICATION=true #此处启用邮件验证
    DISABLE_REGISTRATION=invite_only #此处是设置注册类型
    
    #SMTP Config
    [[email protected]](</cdn-cgi/l/email-protection>)
    MAILER_NAME=Microcharon Stats Dev
    SMTP_HOST_ADDR=smtp.outlook.com
    SMTP_HOST_PORT=587
    [[email protected]](</cdn-cgi/l/email-protection>)
    SMTP_USER_PWD=your-password
    SMTP_HOST_SSL_ENABLED=false
    SMTP_RETRIES=2
    
    #Google Search Integration
    GOOGLE_CLIENT_ID=your-google-client_id.apps.googleusercontent.com
    GOOGLE_CLIENT_SECRET=GOCSPX-your-client-secret
    

    [/code]

    geoip.conf 如果选择数据源为 MaxMind,则需要修改 geoip 目录下的 geoip.conf
    [code]

    GEOIPUPDATE_ACCOUNT_ID=889321
    GEOIPUPDATE_LICENSE_KEY=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
    MAXMIND_EDITION=GeoLite2-City #MaxMind 数据库版本,GeoLite2-City 指数据精确到城市
    

    [/code]

    启动服务 注意是在该目录下启动服务,别搞错目录
    [code]

    cd hosting
    docker compose up -d
    

    [/code]

    检查端口是否开放,以及安全组是否放行,默认端口是8000,如果这一切都没问题,然后就可以用 http://your-ip:8000 即可访问你的自托管 Plausible 了 反向代理 NGINX反代 检查 X-Forwarded-For 标头设置正确,如果不正确的话,跟踪用户所在国家时就会导致测出不准确的数据
    [code]

    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;
    }
    

    [/code]

    Apache反代 hosting/reverse-proxy/apache2/plausible.conf at master · plausible/hosting · GitHub
    [code]

    
     ServerAdmin [[email protected]](</cdn-cgi/l/email-protection>)
     ServerName example.com
    
     ProxyPreserveHost On
     ProxyPass / http://localhost:8000/
     ProxyPassReverse / http://localhost:8000/
    
     SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded
     LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
     LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" forwarded
    
     ErrorLog ${APACHE_LOG_DIR}/error.log
     CustomLog ${APACHE_LOG_DIR}/access.log combined env=!forwarded
     CustomLog ${APACHE_LOG_DIR}/access.log forwarded env=forwarded
      
    
    

    [/code]

    更多反代示例可在目录中找到,此处不写 添加脚本 直接将 JavaScript 脚本片段添加到 head 头部或 body 尾部处即可
    [code]

    [/code]

    备份及恢复数据 其实最麻烦的是数据的问题,Plausible 虽然开源,但也分商业付费版的和自托管版的,托管在 Plausible 的就无需担忧备份问题,而自托管的有必要经常备份,防止数据丢失 有一名全栈开发人员已经帮我们解决了这个问题 Backup & Restore Docker Named Volumes | by Jarek Lipski | Medium 语法示例
    [code]

    #备份存储卷
    docker run -v [volume-name]:/volume --rm --log-driver none loomchild/volume-backup backup > [archive-path]
    
    #恢复存储卷
    docker run -i -v [volume-name]:/volume --rm loomchild/volume-backup restore < [archive-path]
    

    [/code]

    实际应用 备份相关数据,plausible_db-data 和 plausible_event-data 数据卷必须要备份
    [code]

    #暂时暂停相关 container
    docker compose stop
    
    #备份 plausible_db-data, plausible_event-data 存储卷到当前目录
    docker run -v plausible_db-data:/volume --rm --log-driver none loomchild/volume-backup backup > backup_plausible_db-data.tar.bz2
    
    docker run -v plausible_event-data:/volume --rm --log-driver none loomchild/volume-backup backup > backup_plausible_event-data.tar.bz2
    
    #重新启动相关 container
    docker compose start
    

    [/code]

    删除相关 container 及 volume
    [code]

    #暂停相关 container
    docker compose stop
    
    #删除相关 container
    docker compose rm
    
    #删除相关 volume
    docker volume rm plausible_db-data plausible_event-data
    

    [/code]

    恢复相关数据,恢复 plausible_db-data 和 plausible_event-data 数据卷
    [code]

    #暂停相关 container
    docker compose stop
    
    #恢复 plausible_db-data, plausible_event-data 存储卷
    docker run -i -v plausible_db-data:/volume --rm loomchild/volume-backup restore < backup_plausible_db-data.tar.bz2
    
    docker run -i -v plausible_event-data:/volume --rm loomchild/volume-backup restore < backup_plausible_event-data.tar.bz2
    
    #恢复相关 container
    docker compose start
    

    [/code]

    或是参照其它备份方法:Backup Docker Installation · plausible/analytics · Discussion #1132 (github.com)

    1. pioneer说道: 2023年7月1日 下午11:26
    2. gm说道: 2023年7月1日 下午11:30
    3. dmhy说道: 2023年7月1日 下午11:34

    发表回复 取消回复电子邮件地址不会被公开。必填项已用 标注 __ __

    本文著作权归作者 [ doudoudoubao ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    教程
    取消回复

    发表留言
    回复

    Copyright©2026  All Rights Reserved.  Load:0.010 s
    Theme by OneBlog V3.7.1
    夜间模式

    开源不易,请尊重作者版权,保留基本的版权信息。