Umami | Vercel + Neon 部署

Umami | Vercel + Neon 部署

2026年5月7日星期四 · #部署文档 Umami / 部署 / Vercel · 1395 字 7 分钟 ·
-浏览量
·
简介

使用 Vercel + Neon 免费部署 Umami 网站统计,记录 Prisma 7 适配、自定义域名绑定及通过 Share API 拉取站点 UV/PV 的接入方式。

Umami | Vercel + Neon 部署#

用 Vercel + Neon 免费部署 Umami,并通过 Share API 在博客首页展示 UV/PV。个人博客(< 10 万 PV/月)零成本运行。

架构#

博客用户
Cloudflare CDN (博客静态站)
│ 加载 script.js
Vercel (Umami Next.js 应用)
│ 读写数据
Neon (Serverless PostgreSQL)
服务免费额度Umami 实际消耗够用
Vercel Hobby100 万次函数调用/月,100 GB-Hours个人博客约 1-5 万次/月
Neon Free0.5 GB 存储/项目,100 CU-hours/项目Umami 数据约 50-200 MB/年

Cloudflare D1 基于 SQLite,Umami 仅支持 PostgreSQL,无法兼容。


第一步:创建 Neon 数据库#

  1. 访问 neon.tech 注册
  2. Create Project
    • Project nameumami
    • RegionSingaporeTokyo
    • Postgres version:默认 17
  3. 进入 Dashboard → Connection String → 选择 Prisma → 进入 .env 复制
  4. 复制 DATABASE_URL 连接字符串


第二步:Fork Umami 仓库#

访问 github.com/umami-software/umami,点击 Fork,保持默认设置。


第三步:确认 Prisma 7 适配#

Umami 最新版使用 Prisma 7urldirectUrl 不再支持在 schema.prisma 中配置,已移至 prisma.config.ts。Umami 项目根目录已自带 prisma.config.ts

import 'dotenv/config';
import { defineConfig, env } from 'prisma/config';
export default defineConfig({
datasource: {
url: env('DATABASE_URL'),
},
});

无需手动修改,只需确认 Fork 出来的版本中存在该文件。


第四步:部署到 Vercel#

  1. 访问 vercel.com,GitHub 登录
  2. Add New → Project,找到 Fork 的 umami 仓库,Import
  3. 配置保持默认
  4. Environment Variables 添加:
NameValue
DATABASE_URLNeon 中复制的 Prisma 连接字符串
  1. 点击 Deploy,等待 2-3 分钟,得到访问地址 umami-xxxx.vercel.app

第五步:首次登录和安全设置#

  1. 访问部署地址,默认凭据:用户名 admin,密码 umami
  2. 立即修改密码:Settings → Profile
  3. 添加博客网站:主页 → Websites → Add website → 填写 Name 和 Domain
  4. 进入网站看板 → 右上角 Edit → 复制 Website ID

第六步:绑定自定义域名#

Vercel 的 .vercel.app 域名在国内可能被墙,绑定自定义域名解决。

  1. Vercel 项目 → Settings → Domains → 添加域名(如 stats.yourdomain.com
  2. Vercel 会报错。去 Cloudflare DNS 添加记录:
TypeNameTargetProxy status
CNAMEstatscname.vercel-dns.com关闭(灰色云朵)

⚠️ Proxy 必须关闭。Vercel 自带 CDN,开 Cloudflare Proxy 会冲突导致 SSL 问题。

  1. 等待域名验证通过,Vercel 自动配置 SSL 证书
  2. Vercel 显示黄色警告时点进去授权,Cloudflare 的 Target 会被自动更新
  3. 验证成功

第七步:配置博客接入 Umami#

通用接入方式#

在网站 <head> 中添加:

<script async src="https://你的Umami域名/script.js" data-website-id="你的 Website ID"></script>

可选参数:

参数说明
data-auto-track="false"禁用自动追踪,需手动调用 umami.track()
data-do-not-track="true"尊重浏览器 DNT 设置
data-domains="example.com"仅在指定域名下追踪

本项目接入方式#

本博客已内置 Umami 组件,修改 src/config/siteConfig.ts

analytics: {
umamiAnalytics: {
websiteId: "你的 Website ID",
shareId: "你的 Share ID", // 用于拉取公开统计,见第八步
scriptUrl: "https://你的Umami域名/script.js",
trackOutboundLinks: true,
collectWebVitals: false,
},
},

组件 src/components/analytics/UmamiAnalytics.astro 负责注入脚本并自动追踪出站链接点击。


第八步:开启 Share URL(用于公开访问 UV/PV)#

通过 Umami 的 Share API,无需服务端鉴权即可在博客首页展示访问数据。

开启 Share URL#

  1. 登录 Umami 后台 → 你的网站 → 右上角 Edit
  2. 找到 Share URL 选项
  3. 勾选要公开的内容(推荐只勾选 Traffic → Overview
  4. 保存后复制生成的分享链接,格式:https://stats.yourdomain.com/share/xxxxxxxxx
  5. 链接末尾的字符串即为 Share ID,填入 siteConfig.tsshareId 字段

本项目获取 UV/PV 的实现#

实现位于 src/components/layout/HomeDataLayer.astro,核心流程:

  1. siteConfig.analytics.umamiAnalytics 取出 scriptUrl(推导出 base url)和 shareId
  2. 通过 shareId 调用 GET /api/share/{shareId} 获取 websiteIdtoken(1 小时缓存)
  3. token 调用 GET /api/websites/{websiteId}/stats?startAt=0&endAt={now},请求头携带:
    x-umami-share-token: {token}
    x-umami-share-context: 1
  4. 返回 JSON 中 uv/visitors 即访客数,pv/pageviews 即浏览量
  5. 渲染到首页”站点访问”卡片
// 核心调用逻辑(简化版)
const shareRes = await fetch(`${statsBaseUrl}/api/share/${shareId}`);
const share = await shareRes.json();
const websiteId = share.websiteId || share.entityId;
const token = share.token || shareId;
const statsRes = await fetch(
`${statsBaseUrl}/api/websites/${websiteId}/stats?startAt=0&endAt=${Date.now()}`,
{
headers: {
"x-umami-share-token": token,
"x-umami-share-context": "1",
"Content-Type": "application/json",
},
},
);
const data = await statsRes.json();
// data.uv / data.visitors → UV
// data.pv / data.pageviews → PV

不需要在本项目后端配置 Umami 的 API Token。Share URL 是 Umami 提供的公开访问入口,前端可直接调用。

直接重定向到分享页#

如果只需要跳转到 Umami 公开面板,可在博客路由中直接重定向到 https://stats.yourdomain.com/share/{shareId}


第九步:设置数据自动清理#

Umami 后台 → Settings → Websites → 你的网站 → Data retention,建议设为 1 年,避免超出 Neon 0.5 GB 免费额度。


更新 Umami 版本#

进入 Fork 的 GitHub 仓库 → Sync fork → Update branch,Vercel 自动检测变更并重新部署。


常见问题#

问题解决方案
P1012: The datasource property url is no longer supportedPrisma 7 破坏性变更,确认 prisma.config.ts 已配置 urlschema.prisma 中不能有 url/directUrl
国内访问 .vercel.app 慢/打不开绑定自定义域名,Cloudflare DNS 关闭 Proxy
SSL 警告 sslmode "prefer" is treated as alias for "verify-full"sslmode=require 改为 sslmode=verify-full,不影响功能
首页 UV/PV 显示 --检查 shareId 是否正确、Share URL 是否开启、Umami 域名是否可访问
公开统计面板样式与别人不同Umami 不同版本分享页样式不同,无配置项可切换

保存清单#

项目存放位置
Neon 数据库密码Neon Dashboard → Settings → Database
Neon 连接字符串Neon Dashboard → Connection Details
Umami 管理员账号Umami 后台 → Settings → Profile
Website IDUmami 后台 → Edit Website
Share IDUmami 后台 → Edit Website → Share URL
Umami 公开数据分享链接Umami 后台 → Edit Website → Share URL
Vercel 项目地址Vercel Dashboard
Umami 自定义域名Vercel → Settings → Domains

⚠️ 数据库密码和管理员密码不要提交到 GitHub 或公开分享。Website IDShare ID 可公开,前者已在页面 HTML 中暴露,后者是 Umami 设计的公开访问凭据。

Umami | Vercel + Neon 部署
https://tblog.mmzhiku.xyz/posts/others/others-umami-vercel-neon-deployment/
作者
MmzMing
发布于
2026-05-07
许可协议
CC BY-NC-SA 4.0

评论区

看板娘
公告
友链 互换友链

正在招募技术类博客友链,要求原创、稳定更新。点击了解更多。

查看详情
维护 服务器升级

本周日凌晨 2:00-4:00 进行服务器维护,期间站点可能短暂无法访问。

欢迎 关于我的介绍

欢迎来到我的博客,我是深耕java、python和react技术开发。热爱技术、持续学习,欢迎同好交流探讨,也欢迎大佬互换友链。

查看详情
音乐
封面

音乐

暂未播放

0:00
0:00
暂无歌词
标签
# AI 6 # 认证 5 # 安全 4 # 登录 3 # Skill 2 # Redis 2 # Bitmap 2 # 部署 2 # Java 2 # 并发编程 2 # 性能优化 2 # 前端 1 # 博客 1 # Prompt 1 # 工作流 1 # RAG 1 # Cloudflare 1 # 缓存设计 1 # 高性能 1 # Bot 1 # Umami 1 # Vercel 1 # 线程池 1 # 虚拟线程 1 # 分布式 1 # JWT 1 # OAuth2 1 # MinIO 1 # 对象存储 1 # 扫码登录 1 # WebSocket 1 # Agent 1 # Oracle 1 # 数据库 1
目录
工具

隐私政策

更新日期: 2026/5/19
生效日期: 2026/5/19

导言#

MmzMing的知识库 是一款由 MmzMing(以下简称“我们”)提供的产品。您在使用我们的服务时,我们可能会收集和使用您的相关信息。我们希望通过本《隐私政策》向您说明,在使用我们的服务时,我们如何收集、使用、储存和分享这些信息,以及我们为您提供的访问、更新、控制和保护这些信息的方式。

本《隐私政策》与您所使用的 MmzMing的知识库 服务息息相关,希望您仔细阅读,在需要时,按照本《隐私政策》的指引,作出您认为适当的选择。本《隐私政策》中涉及的相关技术词汇,我们尽量以简明扼要的表述,并提供进一步说明的链接,以便您的理解。

您使用或继续使用我们的服务,即意味着同意我们按照本《隐私政策》收集、使用、储存和分享您的相关信息。

如对本《隐私政策》或相关事宜有任何问题,请通过 784774835@qq.com 与我们联系。

1. 我们收集的信息#

我们或我们的第三方合作伙伴提供服务时,可能会收集、储存和使用下列与您有关的信息。如果您不提供相关信息,可能无法注册成为我们的用户或无法享受我们提供的某些服务,或者无法达到相关服务拟达到的效果。

  • 个人信息:您在注册账户或使用我们的服务时,向我们提供的相关个人信息,例如电话号码、电子邮件等。
  • 日志信息:指您使用我们的服务时,系统可能通过 cookies、标识符及相关技术收集的信息,包括您的 设备信息浏览信息点击信息,并将该等信息储存为日志信息,为您提供个性化的用户体验、保障服务安全。您可以通过浏览器设置拒绝或管理 cookie、标识符或相关技术的使用。
  • 位置信息:指您开启设备定位功能并使用我们基于位置提供的相关服务时,收集的有关您位置的信息,包括:
    • 您通过具有定位功能的移动设备使用我们的服务时,通过 GPS 或 WiFi 等方式收集的您的地理位置信息;
    • 您可以通过关闭定位功能,停止对您的地理位置信息的收集。

2. 信息的存储#

2.1 信息存储的方式和期限#

我们会通过安全的方式存储您的信息,包括本地存储(例如利用 APP 进行数据缓存)、数据库和服务器日志。

一般情况下,我们只会在为实现服务目的所必需的时间内或法律法规规定的条件下存储您的个人信息。

2.2 信息存储的地域#

我们会按照法律法规规定,将境内收集的用户个人信息存储于中国境内。

目前我们不会跨境传输或存储您的个人信息。将来如需跨境传输或存储的,我们会向您告知信息出境的目的、接收方、安全保证措施和安全风险,并征得您的同意。

2.3 产品或服务停止运营时的通知#

当我们的产品或服务发生停止运营的情况时,我们将以推送通知、公告等形式通知您,并在合理期限内删除您的个人信息或进行匿名化处理,法律法规另有规定的除外。

3. 信息安全#

我们使用各种安全技术和程序,以防信息的丢失、不当使用、未经授权阅览或披露。例如,在某些服务中,我们将利用加密技术(例如 SSL)来保护您提供的个人信息。但请您理解,由于技术的限制以及可能存在的各种恶意手段,在互联网行业,即便竭尽所能加强安全措施,也不可能始终保证信息百分之百的安全。您需要了解,您接入我们的服务所用的系统和通讯网络,有可能因我们可控范围外的因素而出现问题。

4. 我们如何使用信息#

我们可能将在向您提供服务的过程之中所收集的信息用作下列用途:

  • 向您提供服务;
  • 在我们提供服务时,用于身份验证、客户服务、安全防范、诈骗监测、存档和备份用途,确保我们向您提供的产品和服务的安全性;
  • 帮助我们设计新服务,改善我们现有服务;
  • 使我们更加了解您如何接入和使用我们的服务,从而针对性地回应您的个性化需求,例如语言设定、位置设定、个性化的帮助服务和指示,或对您和其他用户作出其他方面的回应;
  • 向您提供与您更加相关的广告以替代普遍投放的广告;
  • 评估我们服务中的广告和其他促销及推广活动的效果,并加以改善;
  • 软件认证或管理软件升级;
  • 让您参与有关我们产品和服务的调查。

5. 信息共享#

目前,我们不会主动共享或转让您的个人信息至第三方,如存在其他共享或转让您的个人信息或您需要我们将您的个人信息共享或转让至第三方情形时,我们会直接或确认第三方征得您对上述行为的明示同意。

为了投放广告,评估、优化广告投放效果等目的,我们需要向广告主及其代理商等第三方合作伙伴共享您的部分数据,要求其严格遵守我们关于数据隐私保护的措施与要求,包括但不限于根据数据保护协议、承诺书及相关数据处理政策进行处理,避免识别出个人身份,保障隐私安全。

我们不会向合作伙伴分享可用于识别您个人身份的信息(例如您的姓名或电子邮件地址),除非您明确授权。

我们不会对外公开披露所收集的个人信息,如必须公开披露时,我们会向您告知此次公开披露的目的、披露信息的类型及可能涉及的敏感信息,并征得您的明示同意。

随着我们业务的持续发展,我们有可能进行合并、收购、资产转让等交易,我们将告知您相关情形,按照法律法规及不低于本《隐私政策》所要求的标准继续保护或要求新的控制者继续保护您的个人信息。

另外,根据相关法律法规及国家标准,以下情形中,我们可能会共享、转让、公开披露个人信息无需事先征得您的授权同意:

  • 与国家安全、国防安全直接相关的;
  • 与公共安全、公共卫生、重大公共利益直接相关的;
  • 犯罪侦查、起诉、审判和判决执行等直接相关的;
  • 出于维护个人信息主体或其他个人的生命、财产等重大合法权益但又很难得到本人同意的;
  • 个人信息主体自行向社会公众公开个人信息的;
  • 从合法公开披露的信息中收集个人信息的,如合法的新闻报道、政府信息公开等渠道。

6. 您的权利#

在您使用我们的服务期间,我们可能会视产品具体情况为您提供相应的操作设置,以便您可以查询、删除、更正或撤回您的相关个人信息,您可参考相应的具体指引进行操作。此外,我们还设置了投诉举报渠道,您的意见将会得到及时的处理。如果您无法通过上述途径和方式行使您的个人信息主体权利,您可以通过本《隐私政策》中提供的联系方式提出您的请求,我们会按照法律法规的规定予以反馈。

当您决定不再使用我们的产品或服务时,可以申请注销账户。注销账户后,除法律法规另有规定外,我们将删除或匿名化处理您的个人信息。

7. 变更#

我们可能适时修订本《隐私政策》的条款。当变更发生时,我们会在版本更新时向您提示新的《隐私政策》,并向您说明生效日期。请您仔细阅读变更后的《隐私政策》内容,若您继续使用我们的服务,即表示您同意我们按照更新后的《隐私政策》处理您的个人信息。

8. 未成年人保护#

我们鼓励父母或监护人指导未满十八岁的未成年人使用我们的服务。我们建议未成年人鼓励他们的父母或监护人阅读本《隐私政策》,并建议未成年人在提交的个人信息之前寻求父母或监护人的同意和指导。