如何自建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 | BASE_URL=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 | ports: |
更改为
1 | ports: |
这是因为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 | apt update |
然后运行:
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 | server { |
使用此配置,我们监听端口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。
它是一个很棒的工具。
还有,请不要忘记成为该项目的赞助商。