使用 Vercel 免费部署自托管 Umami
前言
在 PB-Website 完成重构后,我需要一个帮忙统计访问数据的平台。经过一番研究,我对比了几个比较知名的平台及其对应的免费版额度,整理如下:
| 平台 | 保存事件条数 | 开通项目个数 | 数据保留时长 | 自定义事件 | UTM 参数 | 是否使用 Cookie |
|---|---|---|---|---|---|---|
| Google Analytics | 无限制 | 100 | 14 个月 | ✓ | ✓ | 是 |
| Microsoft Clarity | 无限制 | 无限制 | 13 个月 (录屏 30 天) | ✓ | ✓ | 是 1 |
| Vercel Web Analytics | 50000 | 无限制 | 1 个月 | × | × | 否 |
| Cloudflare Web Analytics | 无限制 | 10 (CF 未代理) | 6 个月 | × | × | 否 |
| Umami Cloud | 每月 10 万条 | 最多 3 个网站 | 6 个月 | ✓ | ✓ | 否 |
| 自托管 Umami | 无限制 | 无限制 | 永久 (取决于数据库) | ✓ | ✓ | 否 |
我的需求是能够较为长期地保存统计数据,同时不引入任何基于 Cookie 的统计平台。我很讨厌某些网站把接不接受 Cookies 的弹窗怼在我脸上,更不想把这种体验带给别人
经过比较,我决定选择 Umami,它是一款开源的注重隐私的现代分析平台,无需 Cookie 就能够收集统计数据,因此不需要弹出 Cookies 窗口,同时提供了所有我所需要和不需要的功能
一开始用的是 Umami Cloud 官方服务,直到我折腾出了完全免费的自托管方案,于是转身向自托管走去~♪
注意,如果你正在自托管和 Umami Cloud 官方服务之间纠结,请优先考虑尝试官方服务。Umami Cloud 支持以 CSV 格式免费导出数据,但导入数据只有付费计划才支持。建议先体验一下 Umami Cloud 能否满足需求,再决定要不要自托管,以规避日后潜在的迁移成本。
先决条件
如果没有数据库也没关系,这篇教程会带你免费部署一个~
部署
1. 部署 PostgreSQL 数据库
如果你有自己的 PostgreSQL 数据库可以跳过这一步
在这里提供两种免费方案:
- 使用 Neon 部署 PostgreSQL 数据库
- 优点:部署简单;免费额度项目之间独立计算
- 缺点:免费额度足够应付低频访问的小型网站,但无法满足 24/7 的连续运行需求
- 优点:持续运行(共享 CPU)
- 缺点:部署需要手动修改 Umami 配置文件,需要一定动手能力;七天不活跃后会被自动暂停
点击展开对比表格
| 资源项目 | Neon | Supabase |
|---|---|---|
| 项目数量 | 最多 100 个项目 | 最多 2 个活跃项目 |
| 数据库大小 | 500 MB / 项目 | 500 MB / 项目 |
| 计算资源 | 100 CU-小时 / 项目 | 共享 CPU |
| 自动扩缩容 | 最高 2 CU / 8 GB RAM | 不支持 |
| 闲置暂停 | 5 分钟无活动后;自动恢复 | 1 周无活动后;手动恢复 |
| 出站流量 | 5 GB / 月 / 项目 | 总计 5 GB / 月 |
| 分支功能 | 每个项目 10 个分支 | 付费计划 |
| 备份 | 6 小时恢复窗口 (最大 1 GB) | 付费计划 |
| 日志 | 1 天保留期 | 付费计划 |
Neon 免费计划每个项目每月提供 100 CU-小时,按照最低消耗 0.25 CU/小时 计算,每月可用时长仅为 400 小时。由于 Neon 数据库仅在处理查询时消耗 CU 额度,闲置时自动缩减至零,故该配额足以应付低频访问的小型网站,但无法满足 24/7 的连续运行需求(每月 24×30=720 小时)。如果需要不间断的免费数据库服务,请参考 Supabase
以下为 Neon 平台部署教程:
- 登录 Vercel 仪表盘,在左边导航栏点击 Storage

- 点击 Create Database,选择 Neon,点击 Continue

这里可能会要求同意用户协议,阅读后同意即可下一步
- 选择一个地区,并且禁用
Auth,下方保持默认的免费方案就好,点击 Continue
地区推荐选择 Singapore (Southeast) sin1,地理位置上距离中国大陆最近。
请记住这个地区,后续部署 Umami 的时候可以选择相同/相近的地区以提高数据库响应速度。

- 为你的数据库取一个好记的名字
比如 Ciallo 就很好记,点击 Continue

- 完成! 点击 Done 以完成数据库部署
2. 在 Vercel 上部署 Umami
- Umami 官方提供了一个链接,你可以 点击这里 快速完成下方教程的 1 ~ 4 步
- 如果手动 Fork 官方仓库后导入,则可以在 GitHub 网页端快速同步主仓库 commit(缺点是无法把仓库设置为
Private) - 连接 Supabase 数据库需要单独适配,请阅读对应的教程
以下内容参考自 Umami 官方文档:
- 将 https://github.com/umami-software/umami 项目 Fork 到您的 GitHub 帐户
- 在 Vercel 上创建一个帐户
- 在仪表板页面上点击“导入项目”,然后指定您在 GitHub 上 Fork 的项目 URL
- 将所需的
DATABASE_URL环境变量添加到您的 Vercel 项目中。这些值在 安装步骤 的“配置 Umami”中定义- 部署
- 你需要为 Umami 使用
POSTGRES_PRISMA_URL,其形式为postgres://user:passwd@endpoint-pooler.postgres.vercel-storage.com/verceldb?pgbouncer=true&connect_timeout=10 - 用于数据库 URL 的环境变量可以在 db/postgresql/prisma.schema 文件中更改
- 官方文档中提到的“Vercel Postgres”服务已停运,不再可用
-
回到 Vercel 仪表盘,前往 Storage → <你的数据库名>,找到
POSTGRES_PRISMA_URL并复制等号右边的值(注意是包含**PRISMA**的变量,记得在右边点开Show secret显示明文) -
打开你的 Umami 项目,在 Settings → Environment Variables → Add Environment Variable 填入环境变量,Key 填写
DATABASE_URL,Value 粘贴 你刚刚复制的值,按 Save 保存
POSTGRES_PRISMA_URL 的形式为 postgresql://user:password@ep-*****-******-*******-pooler.ap-ciallo-1.aws.neon.tech/neondb?connect_timeout=15&sslmode=require (你直接复制粘贴我这个是没用的喵=w=)

-
保存后 Vercel 会弹窗提示你重新部署,在弹出的窗口中点击 Redeploy 确认即可

右下角的蓝色弹窗,点击 Redeplay 
在新窗口中点击 Redeplay 确认部署
3. (可选) 配置自定义域名
Vercel 会为每个项目默认分配一个形如 <project-name>.vercel.app 的域名,但该域名在中国大陆地区无法访问,因此强烈建议添加一个你自费购买的域名来提供服务
回到你的 Umami 项目页面,在左边导航栏点击 Domains(如果遇到 404 尝试刷新一下页面),然后点击右上角的 Add Domain 。在弹出的窗口中填入你的域名并确认,根据你的 DNS 提供商的说明设置 CNAME
如果你的域名使用 Cloudflare 管理 DNS,Vercel 会提供一个选项跳转到 Cloudflare 快速设置 DNS

添加好后可以直接点击默认域名旁边的 Edit → Remove 移除默认域名 这个,不需要了
如果你希望新添加一个以 .vercel.app 结尾的自定义子域名,直接在 Add Existing 输入完整的子域名即可
4. 登录 Umami
请务必在登录后更改默认账户密码!
-
回到你的 Umami 项目页面(Overview),在右侧找到 Domains,点开下方你添加的域名(或者 Vercel 分配给你的默认域名),进入 Umami 登录页面
-
使用默认管理员账户登录
- 默认用户名:
admin - 默认密码:
umami
- 默认用户名:

- 登录后点击侧边导航下拉菜单,然后点击设置

- 导航到个人资料并点击更改密码按钮

- 输入新密码并保存
- 页面左下角可以切换语言
- 点击侧边导航下拉菜单,然后点击管理员可以修改默认用户名
5. 添加你的第一个网站
-
在网站页面点击右上角添加网站,在弹出的窗口中输入网站名和域名(域名不需要添加
https://协议头)并保存 -
打开你添加的网站页面,点击右上角编辑,复制页面中的跟踪代码
-
在你自己网站的
<head>部分插入跟踪代码并更新网站 -
大功告成! 试着访问一下你的网站吧,数据应该会立即出现在你的 Umami 控制面板里面!

DLC 1:提高数据库响应速度:自定义 Vercel 函数运行位置
还记得前面部署数据库时选择的地区吗?你可以修改 Vercel 运行 Umami 的地区,降低 Umami 访问数据库的延迟,提高响应速度
-
在 Vercel 控制台中打开你的 Umami 项目页面
-
点击左侧导航栏下方的 Settings → Functions
-
在** Function Region **中选择函数运行地区,建议与数据库所在地区保持一致(如 Asia Pacific →
Singapore (Southeast) - ap-southeast-1 - sin1)

DLC 2:通过 Vercel 代理 Umami Analytics
该部分内容参考自 Umami 官方文档
如果你的网站也部署在 Vercel 上,你可以使用 Vercel 的 重写功能 代理 Umami Analytics,以便从你网站的域名提供 Umami Analytics 服务。这在使用 Umami Cloud 时对于绕过广告拦截器也很有帮助
在你网站项目的根目录中,添加 vercel.json 文件,内容如下:
{ "rewrites": [ { "source": "/stats/:match*", "destination": "https://cloud.umami.is/:match*" } ]}自托管 Umami 请注意替换其中的 https://cloud.umami.is 部分为你的自托管 Umami 实例的 URL
跟踪代码脚本标签应使用 /stats/script.js 作为 src 值:
<script defer src="/stats/script.js" data-website-id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"></script>DLC 3:共享链接
想要展示你的网站访问数据给访客看吗?可以在 Umami 控制面板的设置里开启共享链接

截至目前(v3.0.3)自部署 Umami 的分享链接只能分享 Overview 页面的数据(Umami Cloud 可以自定义分享范围)

参考文献
Footnotes
-
可关闭,但对可收集的数据有一定影响 ↩
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!