Umami网站统计太重,我做了一个 Go + SQLite 的轻量方案:Plos

西风 V4  (UID: 14) [复制链接]
帖子链接已复制到剪贴板
帖子已经有人评论啦,不支持删除!

75 3

LiteSnap-cleanip.io---Plost-20261109T002330

之前我一直在用 Umami,整体体验不错,但随着功能越来越多,我慢慢觉得:对于只维护几个网站的个人站长来说,有些功能用不上,部署和维护的东西却不少。

尤其是买一台两核、2GB 内存的小主机,同时跑博客、数据库、反向代理,再放一套统计服务,总会想让每个程序少占一点资源。

我的需求其实很简单:每天有多少人来、从哪里来、看了哪些页面,偶尔看看实时访客。为了这些信息,我希望统计服务能尽量轻一点。

所以做了 Plost,一个面向个人站长的轻量自托管网站统计程序。

技术栈:Go + SQLite,单文件运行

Plost 后端使用 Go,默认数据库是 SQLite,也可以选择 PostgreSQL。

前端使用 React + TypeScript + Vite + Tailwind CSS,构建后的页面、样式和追踪脚本全部嵌入 Go 可执行文件。

因此,在默认的 SQLite 模式下:

  • 不需要安装 Node.js、Bun 或 Go 运行环境。
  • 不需要单独启动数据库服务。
  • 不强制使用 Docker。
  • 一个可执行文件,就能提供统计后台和数据采集服务。

React、Vite 这些工具只在开发、构建时使用,部署到服务器上以后,由 Go 直接提供网页。

对于个人小站,我更喜欢这种方式:程序、配置和数据目录都清楚,少维护几个服务,也少一些升级时需要操心的事情。

精简的是范围,常用统计都保留了

Plost 围绕个人网站日常会看的信息来做,目前包括:

  • 基础指标:访客、访问次数、浏览量、跳出率、平均访问时长、实时在线人数。
  • 流量来源:来源网站、UTM 推广参数、热门页面。
  • 访客信息:国家与地区、浏览器、操作系统、设备和语言。
  • 趋势分析:访问趋势、时段热力图、多维度筛选。
  • 事件统计:自定义事件、外链点击、文件下载。
  • 多站点管理:一个管理员管理多个网站。
  • 分享与导出:公开统计页、可撤销的只读分享链接、统计 API 和 CSV 导出。

另外也补了一些自己维护网站时用得到的功能:网站在线检查、证书和域名到期信息、加密备份与恢复,以及两步验证、Passkey 登录。

界面支持中文、多语言、深浅色模式和手机访问。

团队协作、复杂漏斗、留存分析等功能,目前没有放进这个个人部署版。范围小一点,也方便把常用部分打磨好,后续我还打算做一个云端,多用户版本,就是允许注册的,不用自己部署,直接用我自己提供的服务,我还开发了iOS和MacOS客户端,后续会一起发布。

和 Umami 有什么区别?

我自己也是 Umami 用户,做 Plost 的出发点,是想要一套更符合个人小主机使用习惯的方案。

两者最直接的区别在部署结构:

对比项 Plost 个人部署版 Umami 自托管版
应用运行环境 Go 可执行文件 Node.js
数据库 默认 SQLite,可选 PostgreSQL PostgreSQL
默认部署组成 一个程序 + 本地数据目录 应用 + PostgreSQL 数据库
前端交付 构建后嵌入可执行文件 随应用部署
账号与管理范围 单管理员、多站点 支持用户和团队管理
产品侧重 个人站长常用统计、简化运维 更广泛的分析与协作需求

Umami 的运行环境和数据库要求,可以参考它的官方安装文档。

如果你需要团队协作和更完整的分析功能,可以继续评估 Umami;如果你只是维护几个博客、工具站或个人项目,希望少装一些依赖,Plost 就比较贴近这个需求。

内存和性能怎么样?

轻量是我做这个项目的主要目标之一。

我目前的预估是:低流量使用时,进程内存可能在 100MB 左右,程序本体可能是几十 MB。这里还没有做正式测试,先作为预估,不当作实测结果。

这几个概念也需要分开:

  • 程序大小,指可执行文件本身。
  • 运行内存,会随访问量、查询和备份操作变化。
  • 数据占用,包括持续增长的统计数据库,以及 GeoIP 数据文件、备份等。

因此,不能把“几十 MB 的程序”理解成整个部署长期只占几十 MB,也不能直接拿 Docker 镜像大小和进程内存作比较。

我暂时也没有和 Umami 做同硬件、同数据量、同负载的对照测试,所以不会写“快多少倍”或者“内存降低百分之多少”。

目前能够确定的是:SQLite 模式省去了独立数据库服务和 Node.js 运行环境,部署组成更简单。 至于两核、2GB 的机器具体能承载多少访问,还要结合博客等其他服务的占用、历史数据量和查询频率来测试。

为什么默认选择 SQLite?

对个人网站来说,SQLite 很适合这种单机部署、希望少操心的场景。

不用额外创建数据库账号、配置数据库服务,也少了一项需要单独维护的进程。

当然,SQLite 的承载能力仍然取决于硬件、写入并发和报表查询。如果统计库增长很快,或者持续有较高的写入和查询压力,也可以在安装时选择 PostgreSQL,使用相同的程序和统计界面。

部署和接入

获取对应平台的可执行文件后,先运行数据库配置向导,再启动服务:

./plost -configure -env-file ./plost.env -data ./data

./plost \
  -env-file ./plost.env \
  -data ./data \
  -listen 127.0.0.1:3101

打开后台,创建管理员账号并添加网站。正式使用时,再通过 Caddy 或 Nginx 配置 HTTPS 反向代理。

网站接入只需要加入一行脚本:

<script
  defer
  data-domain="example.com"
  src="https://stats.example.com/script.js"
></script>

把网站域名和统计服务地址替换成自己的即可,后台也会生成对应的接入代码。

已有 Umami 数据的用户,项目里还提供了历史数据导入工具,支持指定版本的 PostgreSQL 表结构,可以先预演、再导入,并按日核对数据。具体支持范围和操作步骤请先看仓库文档。

欢迎试用和反馈

Plost 目前主要围绕我自己的个人网站需求开发,也希望找一些需求相近的站长一起试用。

如果你也在用小内存 VPS,跑着博客或几个个人项目,想要一套部署简单、常用信息齐全的网站统计,欢迎试试看。

尤其欢迎反馈实际的内存占用、数据规模和查询体验。后续我也会补充更完整的资源占用与性能测试,让“轻量”有可以核对的数据。

项目地址:GitHub · plost-dev/plost
官网:plo.st

已有评论 ( 3 )
  • 头像
    V chahucesu (UID: 21568) 商家
    (Chahu.com)
    1楼

    你看下我chahu.com

  • 头像
    xs (UID: 5709)
    2楼

    加油

  • 头像
    天 (UID: 1896)
    (多功能米表 mi.110.cx,6数字xyz米表 http://jx.al/6xyz,纸飞机 base64:Z3FjeXk=)
    3楼

    加油

     

域名市场
   域名载入中...
创建新帖
自助推广购买广告位
确认删除
确定要删除这篇帖子吗?删除后将无法恢复。
删除成功
帖子已成功删除,页面将自动刷新。
删除失败
删除帖子时发生错误,请稍后再试。