CNZZ无法使用,自建统计教程

xixi 2022-4-2 1699

大家好,我是茜茜,我们又见面了

最近因为CNZZ(友盟)转为销售收费套餐,导致很多站长被迫移除统计代码。CNZZ众所周知是老牌符合国人使用习惯的强大统计网站,接入和数据查看也十分方便,这次转型导致很多站长需要寻找网站统计替代方案。

百度统计有些站长使用的会担心账号被追踪,信息泄露问题(其实购买来的账号会好一些,但是每次登录后台ip还是会被记录);Cloudflare Insights的统计数据不完整;谷歌统计可能后台不易访问使用,而且统计代码可能带来加载延迟;51la似乎涉及一些灰产网站和广告,站长担心信息泄露问题。

可能自建统计是个不错的选择,这样可以拥有数据的100%拥有权。

现在也有很多自建统计程序,例如Matomo(之前的piwik),百夫长统计,Umami,Fathom,Plausible...


下面给大家介绍一下Plausible,Plausible是一个开源的可以部署在Docker容器里的网站统计,使用起来也非常方便

查看网站来路和访问的页面也十分方便,可以通过筛选器来查看指定网站的来路和访客流量的页面

访客的位置和设备类型也是可以比较清晰的(位置是可以精确到省市的)(这一点会比Cloudflare自带的统计好一些,Cloudflare Insights不会过滤爬虫访问记录)

如果暂时没有好用的统计可以去 https://plausible.io 官网试用一下(可以试用一个月,不需要任何信息,填写邮箱就可以注册),如果你觉得官网的统计代码托管的CDN(Bunny CDN)比较慢,可以用nginx或者cloudflare worker反代一下,这里有教程:https://plausible.io/docs/proxy/guides/nginx

然后就开始介绍如何安装Plausible了

如果你想要节约成本可以直接在网站托管的服务器或vps上安装,然后使用nginx反代到新的域名就可以了(准备一个子域名)

1. 克隆托管仓库

要快速开始,请下载plausible/hosting repo 作为起点。它拥有启动您自己的 Plausible 服务器所需的一切。

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

复制

或者,您可以将 repo 下载并解压缩为 tarball

$ curl -L https://github.com/plausible/hosting/archive/master.tar.gz | tar -xz$ cd hosting-master

复制

在下载的目录中,您将找到两个重要文件:

  • docker-compose.yml- 在您的 Plausible 服务器、Postgres 数据库、Clickhouse 数据库(用于统计数据)和 SMTP 服务器之间安装和协调网络。尽管您可以根据需要自由调整设置,但它带有可以使用的合理默认值。
  • plausible-conf.env- 配置似是而非的服务器本身。此处记录了完整的配置选项。

2.添加所需配置

配置文件plausible-conf.env具有所需参数的占位符。要设置参数,您首先需要一个随机的 64 个字符的密钥,用于保护应用程序。这是生成一个的简单方法:

$ openssl rand -base64 64 | tr -d '\n' ; echo

复制

现在编辑plausible-conf.env并设置SECRET_KEY_BASE您的密钥。

接下来,将您的ADMIN_USER凭据设置为您自己的选择。

最后,BASE_URL为您的应用输入 。它应该是可以访问此实例的基本 url,包括方案(例如http://or https://)、域名和可选的端口。如果未指定端口,8000将使用默认端口。Plausible 目前不是为子文件夹安装设计的,因此请不要将路径组件添加到基本 url。

3.启动服务器

输入密钥库、基本 URL 和管理员凭据后,您就可以启动服务器了:

$ docker-compose up -d

复制

首次运行此命令时,它会执行以下操作:

  • 为用户数据创建 Postgres 数据库
  • 为统计信息创建 Clickhouse 数据库
  • 在两个数据库上运行迁移以准备架构
  • 创建一个管理员帐户(这只是一个拥有 100 年免费试用期的普通帐户)
  • 在端口 8000 上启动服务器

您现在可以导航到http://{hostname}:8000并查看登录屏幕。

当您首次使用管理员凭据登录时,系统会提示您输入已发送到您的电子邮件的验证码。请为 SMTP 配置您的服务器以接收此电子邮件。这是 Plausible 的 SMTP 配置选项。否则,运行此命令以验证数据库中的所有用户:

$ docker exec hosting_plausible_db_1 psql -U postgres -d plausible_db -c "UPDATE users SET email_verified = true;"

复制

有什么不工作?请在我们的论坛上联系以进行故障排除。

似是而非的服务器本身不执行 SSL 终止。它仅在未加密的 HTTP 上运行。如果要在 HTTPS 上运行,还需要在服务器前设置反向代理。我们在下面提供了有关如何执行此操作的说明和示例。

3. 更新似是而非

Plausible 会定期更新,但您可以在服务器上应用这些更新。由于使用 Docker,这些更新是安全且易于应用的。

$ docker-compose down --remove-orphans$ docker-compose pull plausible$ docker-compose up -d

复制

自托管版本有点像 LTS,只有在托管版本上经过实战测试后才能获得更改。如果您想尽快获得功能,请考虑成为托管客户。

可选配件

在这个阶段,你应该有一个基本的 Plausible 安装。通过一些额外的配置,您可以为您的实例添加功能:

1. MaxMind 地理定位数据库

Plausible 使用dbip创建的国家数据库来丰富访问者国家的分析数据。该数据库随 Plausible 一起提供,国家数据收集会自动进行。

或者,您可以提供不同的数据库。例如,您可以使用MaxMind服务。他们的最终用户许可使得将数据库与开源产品打包在一起并不容易。

这就是为什么要使用 MaxMind,您需要在这里创建一个帐户。获得帐户详细信息后,打开geoip/geoip.conf文件并输入您的GEOIPUPDATE_ACCOUNT_IDGEOIPUPDATE_LICENSE_KEY. 然后,将基础 docker-compose 文件与 geoip 文件夹中的文件合并:

$ docker-compose -f docker-compose.yml -f geoip/docker-compose.geoip.yml up -d

复制

geoip/docker-compose.geoip.yml文件会自动下载和更新国家数据库,使其可用于plausible容器。

2. 反向代理

默认情况下,Plausible 在端口 8000 上的未加密 HTTP 上运行。我们建议在某种反向代理后面的 HTTPS 上运行它。您可能已经或可能尚未在主机上运行反向代理,让我们看看这两个选项:

没有现有的反向代理

如果您的 DNS 由提供具有自动 SSL 管理的代理选项的服务管理,请随意使用它。我们已经成功地将 Cloudflare 用作 Plausible Self Hosted 前面的反向代理,并且效果很好。

或者,您可以运行自己的 Caddy 服务器作为反向代理。这样,您的 SSL 证书将存储在主机上并由 Let's Encrypt 管理。Caddy 服务器将公开端口 443,终止 SSL 流量并将请求代理到您的 Plausible 服务器。完整的说明

现有反向代理

如果您已经在运行反向代理,需要注意的最重要的事情是:

  1. 配置虚拟主机以匹配BASE_URL您的合理配置
  2. 将流量代理到远程计算机127.0.0.1:8000{ip-address}:8000在远程计算机上运行
  3. 确保X-Forwarded-For设置正确

使用现有反向代理需要注意的最重要的一点是X-Forwarded-For标头设置正确。如果远程客户端 IP 未转发到 Plausible 服务器,则无法检测到访问者国家,并且唯一用户跟踪将不准确。

如果您已经在运行NginxTraefik 2 ,在我们的托管存储库中,您会找到有用的示例配置。


具体英文教程在:https://plausible.io/docs/self-hosting

Maxmind Geoiplite2是一个免费ip库,可以在这里申请https://www.maxmind.com/en/geolite2/signup


然后如果你想让统计代码放在网站目录下也十分方便(可以防止广告拦截软件拦截),只需要反代(/js/script.js和/api/event)就可以了。

你可以在宝塔上设置反代或者在nginx配置的server标签下添加这一段

location = /js/script.js {
        # Change this if you use a different variant of the script
        proxy_pass https://plausible.io/js/script.js;
        # Tiny, negligible performance improvement. Very optional.
        proxy_buffering on;
        # Cache the script for 6 hours, as long as plausible.io returns a valid response
        proxy_cache jscache;
        proxy_cache_valid 200 6h;
        proxy_cache_use_stale updating error timeout invalid_header http_500;
        # Optional. Adds a header to tell if you got a cache hit or miss
        add_header X-Cache $upstream_cache_status;
    }
    location = /api/event {
        proxy_pass https://plausible.io/api/event;
        proxy_buffering on;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host  $host;
    }

然后把plausible.io换成你统计网站使用的域名就行了


或者你可以用Cloudflare Workers反代

新建workers,复制以下daima

const ScriptName = '/js/script.js';
const Endpoint = '/api/event';

const ScriptWithoutExtension = ScriptName.replace('.js', '')

addEventListener('fetch', event => {
    event.passThroughOnException();
    event.respondWith(handleRequest(event));
})

async function handleRequest(event) {
  const pathname = new URL(event.request.url).pathname
  const [baseUri, ...extensions] = pathname.split('.')

  if (baseUri.endsWith(ScriptWithoutExtension)) {
      return getScript(event, extensions)
  } else if (pathname.endsWith(Endpoint)) {
      return postData(event)
  }
  return new Response(null, { status: 404 })
}

async function getScript(event, extensions) {
    let response = await caches.default.match(event.request);
    if (!response) {
        response = await fetch("https://plausible.io/js/plausible." + extensions.join("."));
        event.waitUntil(caches.default.put(event.request, response.clone()));
    }
    return response;
}

async function postData(event) {
    const request = new Request(event.request);
    request.headers.delete('cookie');
    return await fetch("https://plausible.io/api/event", request);
}

然后把plausible.io换成你统计网站使用的域名就行了


最后一步,把之前的统计代码换成

<script defer data-api="/api/event" data-domain="你的域名" src="/js/script.js"></script>

Copy

如果你没有反代到网站目录下,就添加

<script defer data-api="https://你的网站统计域名/api/event" data-domain="website.com" src="/js/script.js"></script>

Copy

如果使用官网的套餐,添加如下代码

<script defer data-domain="你的域名" src="https://plausible.io/js/plausible.js"></script>


注意Plausible官网的套餐是可以多用户访问的,如果你使用Docker自托管就是单用户。

如果你觉得官网的套餐合适又嫌麻烦不想自己托管的话可以直接购买官网的套餐

如果还有其他问题可以访问 https://plausible.io/docs 查看文档,或者在评论区留言,大佬轻拍。最后茜茜祝大家流量倍增。


---------咱是分割线--------------------------------------------------------------------------------

上一篇:关于jsDelivr备案失效的解决方法

下一篇:关于必应取缔百度成为国内主要搜索引擎

最后于 12月前 被xixi编辑 ,原因:
最新回复 (3)
  • 十字路口 2022-4-2
    0 2
    感谢分享 西西的干货很贴切实际

    点赞
返回
发新帖