如何使用Vercel和Supabase搭建自己的Umami网络分析平台

26 年 2 月 12 日 星期四 (已编辑)
1323 字
7 分钟

之前搭建了一个V2版本的,一直没用起来,连接的数据库也被Supabase暂停了,一看更新的V3版本UI还挺好看的,就立刻更新了一下。

💡安装要求是: 服务器版本 Node.js 18.18 或更高。 Umami 支持 PostgreSQL(最低 v12.14)数据库。(V2版本还支持MYSQL来着)

用到的服务器和数据库是Vercel和Supabase,Umami版本是v3.0.3

新建终端运行:

1.安装 pnpm

text
npm install -g pnpm

2.获取源代码并安装包

text
git clone https://github.com/umami-software/umami.git
cd umami
pnpm install

💡Notes:如果clone时一直Operation timed out可以先试试这个查询👇🏻能不能成功,如果成功了再clone(🪜代理用全局模式)或从自己fork好的代码下载

text
git ls-remote https://github.com/umami-software/umami.git

3.配置Umami

在Umami目录下,创建一个包含以下内容的 .env 文件

text
DATABASE_URL={connection url}

这里的connection url配置成Supabase中的Connection String

🔗Supabase:https://supabase.com/ 在官网选择 Free 方案,进入 Create a new project 页面,按要求填写相关内容。Name 填写项目名

创建项目成功后,在顶部导航栏项目名称旁边有个按钮“Connect”,点击获取connection url

(找了半天这个在哪,之前在Project setting里,蓦然抬头,竟在这么明显的地方)😅

image.png

💡Notes:如果使用Vercel进行部署,Method这里选择Transaction pooler,能支持IPv4,否则Vercel部署时会超时或报错

image.png

4.构建应用程序

text
pnpm build

第一次运行构建时,它会在你的数据库中创建所有必要的数据库表。它还会创建一个登录账户,用户名为admin ,密码为 umami

💡Notes:我在build时一直报错

text
> node scripts/build-geo.js

node:events:502

      throw er; // Unhandled 'error' event

Node.js v22.13.1

 ELIFECYCLE  Command failed with exit code 1.

ERROR: "build-geo" exited with 1.

 ELIFECYCLE  Command failed with exit code 1.

报错发生在 build-geo 阶段,具体的错误是 ECONNREFUSED(连接被拒绝)。 scripts/build-geo.js 这个脚本的作用是尝试从网络下载 MaxMind 的 GeoIP 数据库(用于解析访客的地理位置信息)。由于国内网络环境的原因,连接下载地址(通常是 maxmind.com 或相关 CDN)经常会被阻断,或者网络代理设置有问题,导致无法下载。

💡解决方法:

方法一:直接禁用 Geo 构建(推荐,最快)

如果不介意暂时无法显示访客的精确城市信息(仍然会有国家信息),可以直接跳过这一步。

  1. 打开项目根目录下的 package.json 文件。
  2. 搜索 "build-geo"
  3. 将原本的:JSON "build-geo": "node scripts/build-geo.js", 修改为: "build-geo": "echo 'Skipping Geo Build'",
  4. 保存文件。
  5. 再次运行:Bash pnpm build

方法二:手动下载数据库文件(如果需要地理位置功能)

既然脚本无法自动下载,可以手动下载文件并放在正确的位置,然后让脚本不再下载。

  1. 手动下载文件 需要 GeoLite2-City.mmdb 文件。
    • 下载地址:可以去 MaxMind 官网 (需要注册) 或者搜索 "GeoLite2-City.mmdb github" 找一个最近更新的下载。
    • 为了方便,这里有一个 GitHub 上的常见镜像源(如果在国内访问 GitHub 慢,自备🪜)
  2. 放置文件 在 Umami 项目根目录下,新建一个文件夹叫 geo,把文件放进去。 确保路径是: /Users/XXX/Documents/GitHub/umami/geo/GeoLite2-City.mmdb
  3. 修改配置跳过下载 操作同方法一,修改 package.json 中的 "build-geo" 命令为 echo 'Skipping...'
  4. 重新构建 运行 pnpm build

5.运行应用程序

text
pnpm start

默认情况下,会在 http://localhost:3000 启动应用。需要以下一种 通过你的网页服务器请求代理,或者更改端口直接服务应用程序。

进入本地应用admin登录后(能登录成功就是数据库Supabase已经设置好了),点击侧边导航下拉菜单,然后点击设置

image

然后进入个人资料 ,点击更改密码按钮。

image

6.部署应用程序到Vercel

Vercel:https://vercel.com/ 登录 Vercel 之后,点击右上角 Add New Project,并导入事先 Fork 的项目仓库。在 Configure Project 中需要设置两个环境变量Environment Variables

分别添加

DATABASE_URL

HASH_SALT

DATABASE_URL 是上一步在 Subabase 复制的 URL,替换自己的 Password;

HASH_SALT 需要自己随意生成一长串字符串。

最后点击Deploy进行部署。

💡Notes:如果第四步的 package.json

"build-geo": "echo 'Skipping Geo ...'",这个已经修改好了,Vercel部署时还是报错,检查报错原因:

text
ERROR: "check-db" exited with 1.

ELIFECYCLE  Command failed with exit code 1.

这说明在跳过 build-geo 之后,构建流程卡在了上一步:check-db

check-db 失败的原因通常是:Vercel 的构建服务器无法连接到你的数据库。

💡Notes:如果第五步的环境变量 DATABASE_URL 已经配的是IPv4的URL:

由于 check-db 只是为了验证连接,而 Vercel 环境和生产运行环境有时网络路由不同。你可以直接在构建阶段杀掉这个检查。

  1. 打开 package.json
  2. 找到 "check-db" 这一行: "check-db": "node scripts/check-db.js",
  3. 修改为: "check-db": "echo 'Skipping DB check during build'",
  4. 保存并提交。

💡如果 Umami 服务部署在国外服务器(如 Vercel、AWS 等)‌:国内用户访问 Umami 的统计脚本(script.js)时,可能会因网络延迟或防火墙策略导致加载缓慢或失败,从而影响数据上报。

参考了以下内容:

文章标题:如何使用Vercel和Supabase搭建自己的Umami网络分析平台

文章作者:LI XM

文章链接:https://102777.xyz/posts/umami_deploy_v3[复制]

最后修改时间:


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用CC BY-NC-SA 4.0进行许可。