文章摘要

第一步:创建 Supabase 项目

创建新项目

前往 supabase,点击“Start your project”→ “New project”创建新项目。

记录关键信息

进入Project Settings,点击 “Data API” 和 “API Keys”,记录以下信息:

Project URL: [supabase 项目地址]
API Key (anon public): [supabase 项目API秘钥]

创建数据表

进入SQL Editor 执行以下命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
-- 创建访问记录表
CREATE TABLE visits (
id BIGSERIAL PRIMARY KEY,
path VARCHAR(500) NOT NULL,
ip_hash VARCHAR(64) NOT NULL,
user_agent TEXT,
referrer VARCHAR(500),
country VARCHAR(10),
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 创建索引提升查询性能
CREATE INDEX idx_visits_path ON visits(path);
CREATE INDEX idx_visits_ip_hash ON visits(ip_hash);
CREATE INDEX idx_visits_created_at ON visits(created_at);
CREATE OR REPLACE FUNCTION immutable_date(timestamp with time zone)
RETURNS date AS $$
SELECT $1::date;
$$ LANGUAGE sql IMMUTABLE;

CREATE INDEX idx_visits_date ON visits(immutable_date(created_at));

-- 创建统计视图
CREATE OR REPLACE VIEW stats_summary AS
SELECT
COUNT(*) as total_pv,
COUNT(DISTINCT ip_hash) as total_uv,
COUNT(DISTINCT DATE(created_at)) as active_days
FROM visits;

-- 创建每日统计视图
CREATE OR REPLACE VIEW daily_stats AS
SELECT
immutable_date(created_at) as date,
COUNT(*) as daily_pv,
COUNT(DISTINCT ip_hash) as daily_uv
FROM visits
GROUP BY immutable_date(created_at)
ORDER BY date DESC;

-- 创建页面统计视图
CREATE OR REPLACE VIEW page_stats AS
SELECT
path,
COUNT(*) as page_pv,
COUNT(DISTINCT ip_hash) as page_uv
FROM visits
GROUP BY path
ORDER BY page_pv DESC;

-- 启用行级安全策略(可选,用于数据保护)
ALTER TABLE visits ENABLE ROW LEVEL SECURITY;

-- 创建允许插入和查询的策略
CREATE POLICY "Allow insert visits" ON visits FOR INSERT WITH CHECK (true);
CREATE POLICY "Allow select visits" ON visits FOR SELECT USING (true);

检查数据表

进入项目 Dashboard,点击 “Table Editor”,查看数据表是否创建成功。

第二步:部署到 Vercel

一键部署

部署到 Vercel

设置环境变量

进入项目 Dashboard,点击 “Settings” → “Environment Variables”,添加以下变量:

变量名称 释义 示例
SUPABASE_URL 你的 Supabase 项目 URL https://your-project.supabase.co
SUPABASE_ANON_KEY 你的 Supabase Anon Key eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…
ALLOWED_ORIGINS 允许访问的域名(多个域名以”,”分隔) https://yourblog.com
API_SECRET 随机字符串作为密钥(最好20位以上) blog_stats_secret_2025_xyz123

添加完成后,在 Deployments 点击 “Redeploy” 重新部署

测试部署情况

回到项目 Overview ,访问 API URL,打开API测试页,等待网站数据加载完成。

第三步:引用API

以Hexo-butterfly主题为例,进入博客根目录,打开配置文件_config.butterfly.yml,修改busuanzi API地址:

1
busuanzi: https://yourdomain.com/blog-stats.js

重新部署博客,至此,博客数据统计API搭建完成。