惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园_首页
雷峰网
雷峰网
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
WordPress大学
WordPress大学
腾讯CDC
T
Tailwind CSS Blog
A
About on SuperTechFans
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The GitHub Blog
The GitHub Blog
T
The Blog of Author Tim Ferriss
G
Google Developers Blog
The Cloudflare Blog
D
DataBreaches.Net
Recent Announcements
Recent Announcements
Engineering at Meta
Engineering at Meta
B
Blog
博客园 - 聂微东
阮一峰的网络日志
阮一峰的网络日志
月光博客
月光博客
博客园 - 司徒正美
MongoDB | Blog
MongoDB | Blog
Google DeepMind News
Google DeepMind News
Apple Machine Learning Research
Apple Machine Learning Research

AirTouchの小站

DNSMgr——聚合管理所有域名DNS解析+自动续签SSL证书并部署 | AirTouchの小站 雨云香港服务器简单测评 | AirTouchの小站 七牛云 AI 狂送 token 实测到底怎么样 | AirTouchの小站 记一次博客被攻击 | AirTouchの小站 给你的 Artalk 评论区配置验证码和垃圾评论检测 | AirTouchの小站 抓紧上车!免费 E3 开发者账号又来了! | AirTouchの小站 Vercel & Cloudflare Worker 项目推荐(2) | AirTouchの小站 用 Zmail 搭建自己的临时邮箱 | AirTouchの小站 IPv6反解域名?手把手带你搞 | AirTouchの小站 AirTouchの小站 AirTouchの小站 AirTouchの小站 AirTouchの小站 macOS Tahoe 26中Electron架构卡顿的临时解决方案 | AirTouchの小站 用Obsidian插件增强Stellar写作体验 | AirTouchの小站 复习一下最小生成树 | AirTouchの小站 2025苹果秋季发布会亮点总结 | AirTouchの小站 分享几个artalk邮件通知模板 | AirTouchの小站 博客的图片应该存哪啊? | AirTouchの小站 Pic Smaller——自部署压缩图片的利器 | AirTouchの小站 企业微信的自定义域名邮箱太香了 | AirTouchの小站 所有道听途说,终获眼见为实 | AirTouchの小站 修复Vercel部署hexo导致文章的更新时间错误 | AirTouchの小站 jsDelivr国内公益加速镜像分享 | AirTouchの小站 搭建自己的busuanzi访问量统计服务 | AirTouchの小站 用Vercel和Netlify反代你的网站 | AirTouchの小站 用EdgeOne配置反向代理 丢掉丑陋的端口号 | AirTouchの小站 拼好鸽香港4区nat机器:月付3.5还要啥自行车! | AirTouchの小站 博客的新域名——xsl.im | AirTouchの小站 如何搭建自己的EdgeOne优选域名 | AirTouchの小站
AirTouchの小站
AirTouch, me@airtouch.top · 2025-09-30 · via AirTouchの小站

本篇教程难度较大,涉及数据库操作,如果对自己能力没有信心的请不要轻易尝试,出现问题后果自负

Umami是一款现代、开源的网站流量分析工具,以其极简设计和隐私保护为核心特色。你可以把它理解为更清爽、更注重用户隐私的Google Analytics替代品。

它能精准统计你最关心的数据:访问量、页面浏览量、访客来源和设备信息等,并以清晰直观的图表呈现,让你快速掌握网站表现。与许多笨重复杂的统计工具不同,Umami界面非常干净,没有令人眼花缭乱的复杂报告,专注于提供真正有用的核心指标。

更重要的是,Umami完全开源且可以自行部署,这意味着你的所有网站数据都掌握在自己手中,不会泄露给第三方。它符合GDPR等隐私法规,不追踪用户个人身份信息,也不使用Cookie。对于注重数据主权、追求简洁高效的个人站长、开发者和团队来说,Umami是一个非常理想的选择。

为什么要迁移

Umami Cloud 有两个明显的限制

  • 免费版只有 1 年数据保留
  • 只能添加 3 个网站

1 年的数据保留肯定不够用,我还想记录好几年呢。

导出 Umami Cloud 数据

首先打开 Umami Cloud,左侧找到 Data,右侧点击 Export,然后选择你的网站

这样他会给你发一封含有下载链接的邮件

但是国内的网络环境下载不了,需要自己解决

正常会下载一个 .csv.gz 的文件,把他解压

处理数据

这里用到了 RoversX大佬 的项目

github.com

https://github.com/RoversX/umami-csv-import-script

先把这个仓库下载或者 clone 下来,把解压完的文件复制进去,运行

$

python umami_import.py

然后输入你的 csv 文件的名称和新的 website ID

网址后面的一串就是 ID,比如 https://umami.haha.com/websites/73e88325-33b0-43f8-92d6-8e74c5bf19e273e88325-33b0-43f8-92d6-8e74c5bf19e2 就是 ID

这样会得到一个 website_event.csvsession.csv

然后运行这串代码,给 session.csv 去重

python
import pandas as pd

# Read the original session.csv file
df_session = pd.read_csv('session.csv')


session_columns = [
    'session_id', 'website_id', 'hostname', 'browser', 'os', 'device',
    'screen', 'language', 'country', 'subdivision1', 'subdivision2',
    'city', 'created_at'
]

# Ensure the dataframe only contains the columns defined above
df_session = df_session[session_columns]

# Remove duplicate rows with the same 'session_id'
df_session_nodup = df_session.drop_duplicates('session_id')

# Save the deduplicated data to a new CSV file
df_session_nodup.to_csv('session_export_no_duplicates.csv', index=False)

print("session_no_duplicates.csv has been successfully generated with no duplicate session_id.")

这样得到了 session_export_no_duplicates.csv

postgresql 数据库导入

接着打开数据库软件,连接到你的数据库

website-event 导入 website-event.csv

同样的方法导入 session,注意导入去重完的文件

然后刷新页面就可以啦