#Umami

#Umami

2 posts

注意
此方法仅适用于Umami V2版本, V3版此方法不适用

前言

最近在大家的疯狂安利下,捣鼓上了这样一款可以部署在Docker上的前端统计应用。前几天也试着将其 部署在Vercel了。特别是木木老师,更是直接放出了 《前端调用 Umami API 数据》 。不得不说,这个应用的可玩性成功的吸引了我的注意。

Umami 是一个高颜值可自部署的统计应用,本站也一直在使用该项目统计网站的访客数据,最后通过AI的帮助也是成功的在Memos页面中调用了umami统计的浏览数据,于是做个记录。

教程

获取 Umami API Token

如果你是在直接在 Umami 网站注册帐号使用的,可以直接在 网站后台获取 Api Token

否则,如果是自托管,需要先进行身份验证。2(本文以下内容均以自托管为例)

首先需要去 Hoppscotch 获取umami站点的登录token,然后按照下图序号选取,最后获取token备用。

POST https://your-umami-instance.com/api/auth/login

图中第5步,填入以下信息:

{
  "username": "your-username",
  "password": "your-password"
}

步骤顺序
步骤顺序

通过 CloudFlare 部署 API

登录 CloudFlare 创建一个 Workers ,修改名称并点击部署。

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event));
});

const API_BASE_URL = 'https://umami.yourdomain.com';
const TOKEN = 'your_token';
const WEBSITE_ID = 'your_website_id';
const CACHE_KEY = 'umami_cache';
const CACHE_TIME = 600; // Cache time in seconds

async function fetchUmamiData(startAt, endAt) {
  const url = `${API_BASE_URL}/api/websites/${WEBSITE_ID}/stats?startAt=${startAt}&endAt=${endAt}`;
  const response = await fetch(url, {
    headers: {
      'Authorization': `Bearer ${TOKEN}`,
      'Content-Type': 'application/json'
    }
  });

  if (!response.ok) {
    console.error(`Error fetching data: ${response.statusText}`);
    return null;
  }

  return response.json();
}

async function handleRequest(event) {
  const cache = await caches.open(CACHE_KEY);
  const cachedResponse = await cache.match(event.request);

  if (cachedResponse) {
    return cachedResponse;
  }

  const now = Date.now();
  const todayStart = new Date(now).setHours(0, 0, 0, 0);
  const yesterdayStart = new Date(now - 86400000).setHours(0, 0, 0, 0);
  const lastMonthStart = new Date(now).setMonth(new Date(now).getMonth() - 1);
  const lastYearStart = new Date(now).setFullYear(new Date(now).getFullYear() - 1);

  const [todayData, yesterdayData, lastMonthData, lastYearData] = await Promise.all([
    fetchUmamiData(todayStart, now),
    fetchUmamiData(yesterdayStart, todayStart),
    fetchUmamiData(lastMonthStart, now),
    fetchUmamiData(lastYearStart, now)
  ]);

  const responseData = {
    today_uv: todayData?.visitors?.value ?? null,
    today_pv: todayData?.pageviews?.value ?? null,
    yesterday_uv: yesterdayData?.visitors?.value ?? null,
    yesterday_pv: yesterdayData?.pageviews?.value ?? null,
    last_month_pv: lastMonthData?.pageviews?.value ?? null,
    last_year_pv: lastYearData?.pageviews?.value ?? null
  };

  const jsonResponse = new Response(JSON.stringify(responseData), {
    headers: {
      'Content-Type': 'application/json',
      'Access-Control-Allow-Origin': '*',
      'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
      'Access-Control-Allow-Headers': 'Content-Type, Authorization'
    }
  });

  event.waitUntil(cache.put(event.request, jsonResponse.clone()));

  return jsonResponse;
}

通过访问部署好的地址,应该可以看见返回类似以下的数据串。

Umami 是一个简单、快速、注重隐私的开源网站统计工具,是 Google Analytics 的理想替代品。本文将指导你如何在 Vercel 上部署 Umami,并通过 Vercel Storage 创建 Neon PostgreSQL 数据库,搭建一个零成本、轻量级的网站流量统计系统。本教程特别为 Hugo 静态网站用户优化,确保生成的 Markdown 文件适配 Hugo 的静态网页生成。

前言

对于个人博客或中小型网站,Google Analytics 可能过于复杂,且在某些地区访问不便。而 Umami 提供了简洁的界面和核心指标,非常适合轻量级流量分析需求。通过 Vercel 的 Serverless 部署和 Vercel Storage 集成的 Neon 数据库,我们可以快速搭建一个高效的统计系统,无需服务器维护成本。

以下是详细的部署步骤。

准备工作

在开始之前,确保你已准备以下内容:

  1. GitHub 账户:用于 Fork Umami 仓库。
  2. Vercel 账户:用于部署 Umami 和创建 Neon 数据库。
  3. Neon 账户:已注册,用于通过 Vercel Storage 连接。
  4. 一个运行中的 Hugo 网站(或其他静态网站),用于嵌入 Umami 的跟踪代码。

Fork Umami 仓库

  1. 访问 Umami 官方 GitHub 仓库: https://github.com/umami-software/umami
  2. 点击右上角的 Fork 按钮,将仓库 Fork 到你的 GitHub 账户。
  3. (可选)如果你需要自定义 Umami,可以克隆仓库到本地进行修改,但本教程使用默认配置。

在 Vercel 部署 Umami

  1. 登录 Vercel 官网,点击 Add New > Project
  2. Import Git Repository 页面,选择你刚刚 Fork 的 Umami 仓库。
  3. 配置项目:
    • Framework Preset:选择 Next.js(Umami 基于 Next.js 构建)。
    • Environment Variables:暂时跳过,稍后配置 Neon 数据库的 DATABASE_URL
  4. 点击 Deploy 按钮,Vercel 将自动构建项目(此时可能因缺少数据库连接而失败,稍后修复)。

在 Vercel Storage 创建 Neon 数据库

  1. 在 Vercel 仪表板中,进入你的 Umami 项目。
  2. 点击顶部导航的 Storage 标签,然后选择 Create Database
  3. 在数据库类型中选择 Neon,并登录你的 Neon 账户以授权 Vercel 访问。
  4. 配置数据库:
    • 项目名称:任意,例如 umami-project
    • 数据库名称:建议使用 umami
    • 云服务托管商:选择你所在的地区(如 AWS 亚洲区域)以降低延迟。
  5. 创建完成后,Vercel 会自动生成一个 DATABASE_URL 并将其添加到项目的环境变量中,格式如下:
    postgresql://[username]:[password]@[host]/[database]
    
  6. 返回项目设置,确认 Environment Variables 中已包含 DATABASE_URL
  7. 重新部署项目:点击 Deployments 标签,选择最新部署,点击 Redeploy

配置 Umami

  1. 部署完成后,点击 Visit 查看你的 Umami 实例,记下分配的默认域名(如 your-project.vercel.app)。
  2. 访问 Umami 网站,首次登录默认账户为:
    • 用户名:admin
    • 密码:umami
  3. 登录后立即更改密码以确保安全。
  4. 在 Umami 仪表板中,点击 Add Website,输入你的网站信息(如域名、名称)。
  5. Umami 会生成一段 JavaScript 跟踪代码,格式如下:
    <script async src="https://your-project.vercel.app/umami.js" data-website-id="YOUR_WEBSITE_ID"></script>
    
    复制此代码。

在 Hugo 网站中嵌入跟踪代码

为了让 Umami 统计你的 Hugo 网站流量,需要将跟踪代码嵌入到网站中。这个一般需要你使用的hugo主题支持,如果不支持,则需要自己修改hugo主题。