
之前我一直在用 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