Umami | Vercel + Neon 部署 Umami | 部署文档

1514 字
8 分钟
Umami | Vercel + Neon 部署 Umami | 部署文档

Umami | Vercel + Neon 部署 Umami | 部署文档#

架构图#

博客用户
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/年✅ 绰绰有余

个人博客(< 10万 PV/月)完全免费运行,不用担心。


为什么不用 Cloudflare D1?#

Cloudflare D1 基于 SQLite,而 Umami 要求 PostgreSQL,两者 SQL 方言和连接方式完全不同,无法兼容。Umami 官方也尚未合并 Cloudflare Workers 部署支持(PR #3475),即使合并也需要外部 PostgreSQL。


第一步:创建 Neon 数据库#

  1. 访问 neon.tech,用 GitHub 或邮箱注册
  2. 点击 Create Project,填写:
    • Project nameumami(随意)
    • Region:选 SingaporeTokyo(离中国最近)
    • Postgres version:默认 17 即可
  3. 创建完成后,进入 Dashboard → Connection String → 选择Prisma -> 进入.env复制
  4. 复制 DATABASE_URL 连接字符串

第二步:Fork Umami 仓库#

  1. 访问 github.com/umami-software/umami
  2. 点击右上角 Fork 按钮
  3. 保持默认设置,点击 Create fork

第三步:适配 Prisma 7(重要!不需要配置,只需要看看自己的版本对不对的上)#

Umami 最新版使用了 Prisma 7,它有重大破坏性变更:urldirectUrl 不再支持在 schema.prisma 中配置,而是移到了 prisma.config.ts

确认 prisma.config.ts(Umami 已自带)#

Umami 项目根目录已有 prisma.config.ts,内容如下:

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

prisma.config.ts 中的 url 读取环境变量 DATABASE_URL,用于 Prisma Migrate 执行数据库迁移。


第四步:部署到 Vercel#

  1. 访问 vercel.com,用 GitHub 账号登录
  2. 点击 Add New → Project
  3. 在列表中找到你 Fork 的 umami 仓库,点击 Import
  4. 配置项目保持默认
  5. 展开 Environment Variables 部分,添加变量:
NameValue
DATABASE_URLNeon 中拿到的 prisma 连接字符串
  1. 点击 Deploy,等待 2-3 分钟
  2. 部署成功后,你会得到访问地址:umami-xxxx.vercel.app

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

  1. 访问 https://umami-xxxx.vercel.app
  2. 默认凭据:用户名 admin,密码 umami
  3. 立即修改密码:Settings → Profile
  4. 添加你的博客网站:回到主页 → Websites → Add website →NAME(随便一个名字)→Domain(你网站地址)
  5. 保存后获取:点进去→看板右上角Edit→复制Website ID

第六步:绑定自定义域名(推荐)#

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

  1. 在 Vercel 项目中,快速到达https://vercel.com/你项目名字/umami/settings/domain,总之就是进到你部署的umami里面左侧找到Domains。找到你部署的域名→编辑→更改Domain
  2. 输入你的域名,如 stats.yourdomain.com
  3. 点击 Add Domain
  4. Vercel会报错,
  5. 去 Cloudflare Dashboard → 你的域名 → DNS → Add record:
TypeNameTargetProxy status
CNAMEstatscname.vercel-dns.com关闭(灰色云朵)

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

  1. 等待域名验证通过(通常几分钟),Vercel 自动配置 SSL 证书
  2. Vercel 过一会你会看到黄色警告,点进去页面,点击授权即可,他会更改cf的Target
  3. 再次查看Vercel你会发现成功了

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

通用接入方式#

在你的网站 <head> 中添加以下脚本:

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

src 替换为你的 Umami 地址,data-website-id 替换为在 Umami 后台获取的 Website ID。

可选参数#

参数说明示例
data-auto-track="false"禁用自动追踪,手动控制页面访问上报需要手动调用 umami.track()
data-do-not-track="true"尊重浏览器的 Do Not Track 设置不追踪启用了 DNT 的用户
data-domains="example.com"仅在指定域名下追踪多个域名用逗号分隔

各框架接入示例#

HTML 静态站:

<head>
<script async src="https://stats.example.com/script.js" data-website-id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"></script>
</head>

Next.js:

src/app/layout.tsx
export default function RootLayout({ children }) {
return (
<html>
<head>
<script async src="https://stats.example.com/script.js" data-website-id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"></script>
</head>
<body>{children}</body>
</html>
);
}

Vue / Nuxt:

nuxt.config.ts
export default defineNuxtConfig({
app: {
head: {
script: [
{ async: true, src: "https://stats.example.com/script.js", "data-website-id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" },
],
},
},
});

Hexo:

在主题的 _config.yml 中添加自定义脚本配置,或直接修改 layout/layout.ejs<head> 部分。

Hugo:

layouts/partials/head.html 中添加 script 标签。

本项目爆改的Firefly 模板#

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

analytics: {
umamiAnalytics: {
websiteId: "你的 Website ID",
scriptUrl: "https://你的Umami域名/script.js",
trackOutboundLinks: true,
collectWebVitals: false,
},
},

第八步:配置公开统计面板#

开启 Share URL#

  1. 登录 Umami 后台
  2. 点击你的网站 → 右上角 Edit
  3. 找到 Share URL 选项
  4. 勾选要公开的内容(推荐只勾选 Traffic → Overview
  5. 保存后复制生成的分享链接,格式:https://stats.yourdomain.com/share/xxxxxxxxx
  6. 直接重定向到Umami 分享链接

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

  1. 登录 Umami 后台
  2. Settings → Websites → 你的网站 → Data retention
  3. 设置保留时间,建议 1 年
  4. 保存

确保数据库不会超出 Neon 的 0.5 GB 免费额度。


更新 Umami 版本#

  1. 进入你 Fork 的 GitHub 仓库
  2. 点击 Sync fork → Update branch
  3. Vercel 会自动检测到代码变更并重新部署

常见问题排查#

问题解决方案
P1012: The datasource property url is no longer supportedPrisma 7 破坏性变更,需从 schema.prisma 中删掉 urldirectUrl,连接配置由 prisma.config.ts 接管
国内访问 .vercel.app 很慢/打不开绑定自定义域名,Cloudflare DNS 中关闭 Proxy
SSL 警告 sslmode "prefer" is treated as alias for "verify-full"sslmode=require 改为 sslmode=verify-full 可消除警告,不影响功能
公开统计面板样式和别人的不一样Umami 不同版本分享页面样式不同,这是前端代码决定的,后台无配置项可切换

保存清单#

部署完成后,请妥善保存以下信息:

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

⚠️ 请勿将数据库密码和 Umami 管理员密码提交到 GitHub 或公开分享。

Umami | Vercel + Neon 部署 Umami | 部署文档
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. 未成年人保护#

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