/

如何自建Plausible分析工具

如何自建Plausible分析工具

我决定自己托管我的网站分析数据。

为什么这样做呢?

作为一个人生原则,我倾向于不自托管自己的“东西”,除非其优点远远超过了缺点。

首先,自托管的缺点是显而易见的,那就是“从现在开始,这是我需要担心的事情”。将这个负担交给其他人是很棒的,尤其是当你只使用免费方案时。

我也乐意支付费用,别误解我的意思。

但有时成本是无法接受的。

就像我的电子邮件通讯。当寄出的数量很大时,托管解决方案的费用就太高了。

另外,就网站分析而言,当页面浏览量相当大时,托管解决方案的价格也可能变得很高。

所以,我决定自建自己的分析解决方案。

在支付了一年的Plausible用户订阅费用后,我决定这样做。我在一段时间内测试了他们的托管选项,针对一些较小的网站,我还想托管我的主要网站,也就是这个博客,但是..托管方案对于这个博客来说太昂贵了。我不介意支付那笔年度订阅费用,因为我认为支持这个项目是好的。

但是如果我为此付费每月70美元的话,我就会认为这不是“那么”有用的信息了。

我喜欢看网站分析,但1,000美元的费用有些太高了。

而且只需要每月4美元就可以了,使用DigitalOcean Droplet(虚拟专用服务器)(实际上是免费的,因为我有时在链接到他们时会放一个推荐链接,这样可以获得充足的免费资源)。

需要注意的一点是,我说的是DigitalOcean Droplet,而不是DigitalOcean应用程序平台,主要是因为应用程序平台的价格从每月5美元起,但不提供数据库,所以你需要自带数据库,而DigitalOcean在其“托管数据库”提供中提供此服务,但价格是15美元/月。

介绍完毕,现在我们来逐步解释。

如果你还没有DigitalOcean帐户,请先创建一个。

使用我的DigitalOcean推荐链接注册,即可在接下来的60天内获得价值200美元的免费信用。

然后创建一个新项目。

侧边栏点击 新建项目:

输入一个名称,比如“Analytics”。

在“告诉我们它的用途”框里选择一个选项,否则无法创建项目。然后点击 创建项目

在下一个面板点击 立即跳过

项目现在已经创建成功。

然后点击第一个元素“启动Droplet”,Droplet是DigitalOcean对虚拟专用服务器(Virtual Private Server)的术语:

这将显示创建新Droplet的界面。

选择一个区域。通常选择接近大多数用户的区域。作为一个欧盟人,出于法规的原因,我希望所有数据都保持在欧盟,所以我选择了一个欧洲服务器。

接下来,你可以选择一个镜像,将其部署到Droplet上。

点击 Marketplace 标签:

我看到了“Docker”在推荐列表中。如果你没有看到,可以搜索并选择它。

或者,你也可以使用另一个Linux Droplet并在其中安装Docker。

我们使用Docker是因为Plausible是通过Docker进行自托管的。

像这样的项目通常会提供Docker安装程序,因为他们只需要管理一个环境,而且对你而言,出错的可能性更小。

如果你对Docker还不太熟悉,请不要担心。

我会逐步解释每个步骤。

同时,可以查看我的Docker介绍

现在我们继续。我们需要为Droplet选择一个大小。请注意,DigitalOcean默认情况下真的希望你选择一个快速的Droplet 😅,但在CPU选项下请选择“常规”:

然后点击左箭头或“显示所有计划”以查看所有计划:

你应该能够选择每月4美元的计划。

在我编辑这篇教程的时候,某种原因下,该计划当前不可用。

所以我选择的是每月6美元的计划:

然后往下滚动。

我使用SSH密钥设置了我的身份验证方法,如果你已经完成了这个设置,很棒,你可以使用它。但是我不想让这个教程太长,所以我们将只使用密码进行身份验证。

为root用户选择一个密码,并将其安全地保存在某个地方:

最后,点击 创建Droplet

它会花一些时间来创建Droplet。

创建完成后,你将看到IP地址:

此时,你应该在DNS设置中创建一个A记录,将一个域名的子域名指向此IP地址。

我不会详细解释,因为这取决于你为DNS使用什么配置。请向您的注册商咨询。

例如,在Cloudflare DNS上是这样的:

点击 ··· 图标并选择 “Access console”:

然后点击 Launch Droplet Console

这将在新窗口中打开一个终端:

我们准备配置我们的Droplet。

首先进入 /opt 文件夹:

1
cd /opt

然后在这里克隆Plausible Docker Compose设置:

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

Docker Compose 是一个允许创建一个应用的多个容器的工具。Plausible Analytics 需要设置多个工具,包括 PostgreSQL、ClickHouse、SMTP服务器和Plausible应用本身。

我们不使用多个Dockerfiles,而是创建一个docker-compose.yml文件。

然后运行 cd plausible ,进入新创建的 plausible 文件夹。

现在用你最喜欢的命令行编辑器打开 plausible-conf.env 文件。我使用的是nano:

1
nano plausible-conf.env

现在,该文件的内容如下:

1
2
BASE_URL=replace-me
SECRET_KEY_BASE=replace-me

你可以在 https://generate-secret.vercel.app/64 上生成一个随机字符串,并将其写入 SECRET_KEY_BASE 的值。在 BASE_URL 中设置最终的分析URL,例如 https://plausible.your-domain.com

注意:请使用子域名而不是子文件夹。Plausible在子文件夹中无法正常工作。

记得用真实的数据填充这些变量。想出一个用户名和密码,稍后会用到。

保存文件,然后用nano或你喜欢的编辑器打开 docker-compose.yml

1
nano docker-compose.yml

并在 plausible: 下更改现有的行

1
2
ports:
- 8000:8000

更改为

1
2
ports:
- 127.0.0.1:8000:8000

这是因为Plausible默认在端口8000上作为HTTP运行。

我们确保这仅适用于本地主机连接,而不适用于外部连接,然后我们将在稍后设置Nginx作为端口80上的反向代理。

现在运行:

1
docker-compose up -d

请注意,您可能需要首先使用 apt install docker-compose 来安装 docker-compose

下载和处理一段时间后,事情应该已经启动并运行了。

等待几秒钟以确保功能正常运行,然后尝试使用以下命令访问服务器:

1
curl http://localhost:8000

你应该收到如下的响应:

如果你尝试得太快,可能会出现错误,例如:curl: (56) Recv failure: Connection reset by peer,稍后再试一下。

现在是安装Nginx的时候了!

运行以下命令:

1
2
apt update
apt install nginx

然后运行:

1
ufw allow "Nginx Full"

现在运行以下命令,在路径 /etc/nginx/sites-available/ 下创建 plausible.conf 文件:

1
nano /etc/nginx/sites-available/plausible.conf

将下面的内容输入该文件,在其中将 YOUR_DOMAIN_HERE 替换为你自己的域名,例如 plausible.flaviocopes.com

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 80;
listen [::]:80;
server_name YOUR_DOMAIN_HERE;

access_log /var/log/nginx/plausible.access.log;
error_log /var/log/nginx/plausible.error.log;

location / {
proxy_pass http://localhost:8000;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

使用此配置,我们监听端口80,并将所有请求代理到我们的Plausible实例在localhost:8000上。

然后运行以下命令将站点启用:

1
ln -s /etc/nginx/sites-available/plausible.conf /etc/nginx/sites-enabled/

使用以下命令测试Nginx配置:

1
nginx -t

然后重启Nginx:

1
systemctl reload nginx

在这个时候,如果你在浏览器中打开你设置的URL,你应该可以看到Plausible正常工作:

如果还没有工作,可能是因为DNS需要传播(你正确地将域名的DNS设置为Droplet IP了吗?)。尝试使用其他浏览器,因为DNS经常会被缓存。

请注意,我们告诉Nginx监听特定的域名,所以如果你访问IP地址,你将看到Nginx的默认页面,这是正常的:

然而,请注意“不安全”的字样..我们需要建立安全连接。

运行以下命令:

1
apt install certbot python3-certbot-nginx

然后运行:

1
certbot --nginx -d YOUR_DOMAIN_HERE

并按照提示操作。

重新加载页面,你现在应该拥有自动的安全连接!

太棒了!

现在你可以输入详细信息并创建用户账户,然后添加你的站点信息:

享受你的分析服务!

现在有一个问题- 任何人都可以在你的Plausible实例上创建一个账户。

为多个账户进行设置是可以的。

但是一旦你跟所有人“完成”需要在你的实例上跟踪分析的人,你需要关闭这个功能。

用nano打开 plausible-conf.env

1
nano plausible-conf.env

添加这一行:

1
DISABLE_REGISTRATION=true

保存文件。

我们需要重新加载Plausible。

使用以下命令:

1
docker-compose down --remove-orphans

然后:

1
docker-compose up -d

(如果你尝试使用 docker-compose restart ,更改不会生效)

就是这样。

希望这个教程能帮助你设置Plausible。

它是一个很棒的工具。

还有,请不要忘记成为该项目的赞助商