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

推荐订阅源

Know Your Adversary
Know Your Adversary
小众软件
小众软件
L
LangChain Blog
月光博客
月光博客
博客园 - Franky
Microsoft Azure Blog
Microsoft Azure Blog
Y
Y Combinator Blog
有赞技术团队
有赞技术团队
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
MongoDB | Blog
MongoDB | Blog
Recorded Future
Recorded Future
V
Visual Studio Blog
TaoSecurity Blog
TaoSecurity Blog
S
Schneier on Security
C
Cybersecurity and Infrastructure Security Agency CISA
P
Privacy & Cybersecurity Law Blog
T
Threat Research - Cisco Blogs
D
DataBreaches.Net
L
LINUX DO - 热门话题
C
Check Point Blog
F
Fortinet All Blogs
Hugging Face - Blog
Hugging Face - Blog
The Hacker News
The Hacker News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Security Blog
Microsoft Security Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The GitHub Blog
The GitHub Blog
P
Proofpoint News Feed
L
Lohrmann on Cybersecurity
博客园 - 司徒正美
T
Threatpost
P
Palo Alto Networks Blog
A
About on SuperTechFans
Spread Privacy
Spread Privacy
Engineering at Meta
Engineering at Meta
N
News | PayPal Newsroom
T
Tailwind CSS Blog
The Last Watchdog
The Last Watchdog
Blog — PlanetScale
Blog — PlanetScale
A
Arctic Wolf
量子位
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
博客园 - 聂微东
Google Online Security Blog
Google Online Security Blog
Google DeepMind News
Google DeepMind News
www.infosecurity-magazine.com
www.infosecurity-magazine.com
V
Vulnerabilities – Threatpost
H
Hacker News: Front Page

HANG ♥ WRITING

ChatGPT 问世两年,我在 AI 的辅助下成为了一名 iOS 业余开发者 如何使用 Netcat 构建简单的安全聊天系统 QuakeSense 震感,一款简洁原生的 iOS 地震通知 App App Store 中国大陆 ICP 备案最佳实践 几款有意思的 Google Chrome 侧边栏扩展应用 GetVM 让编程学习更快一步 WildCard (野卡) - 国内用户零门槛订阅 ChatGPT、Claude、App Store 万里汇开发者收款使用全指南 | 注册、开户与账户绑定教程 中国大陆居民开通华侨银行(OCBC)海外账户完全指南 实用的 macOS 内置命令,省下买第三方应用的钱 《认知觉醒》之触动学习法 不是程序员也可以搞开发,一小时入门 Retool 低代码 疫情来袭,手把手教你在家制作美味炒鸡 企业微信机器人 Webhook 推送语雀更新消息 基于 Cloudflare Workers 部署的 JSON Database 数据库 印象时间:印象笔记出品的时间管理应用 Pixelmator Photo 2.0: 桌面级功能并适配 iPhone Shortery:Mac 快捷指令自动化 Pixelmator Pro 2.3:AI 背景去除 Quit All:一键退出应用程序 Raycast:推出官方扩展商店和开发者平台 简悦 API 2.0:收藏助手和快照功能 HomePod mini 使用体验 Prizmo 5.5:扫描效果增强并新增批注功能 Notion:近期值得关注的新特性 Infuse 7:一款近乎完美的视频播放器 Gyroscope 4.14:新的产品名称和多项改进 V day:在手机上创作短视频 Things 3.14:备注支持 Markdown,同步速度加快 MoneyWiz 2021:新的通知选项和视觉改善 Doppler:管理和分享你的本地音乐 CARROT Weather:5.3 带了多项新特性 Obsidian:知名知识管理工具推出移动应用 NOMO RAW:专业 ProRAW 相机 Tape:全能且好用的录屏软件 Apple Design Award 2021 Craft 1.6:每日笔记重磅更新 Trakt:官方 iOS 应用全新上线 Notion:支持 API 和自动化集成 Varlens:iOS 专业相机应用 Infuse 7:不只是 M1,支持所有 Mac 简悦:支持 API 和自动化流程 奇妙组件:小而美的自定义 iOS 小组件 Farbox 2:支持自部署和多站点的开源博客系统 图图记账:高颜值记账应用 Coppice:帮助整理你的想法 DarkModeBuddy:基于光线切换深色模式 走进微软成都 Office,聊一聊 Microsoft 365 HapiGo:符合国情的效率启动器 Eagle 2.0:数十项功能更新 + 数倍的性能提升 无需记账,通过更新余额了解自己有「多少资产」 Dato:支持日历和时区的菜单栏时钟 极具潜力的效率启动器 App,Raycast 脚本功能详解 Pixelmator Pro 2.0.2:增加新效果,支持 ProRAW Raycast:面向开发人员的效率启动器 Sorted:全新的 Mac 版本,原生支持 Apple Silicon App Store 和 Google Play 的 2020 年度 App 榜单 VSCO:全新的视频效果和拍摄模式 Pixelmator Pro 2.0:全新设计并支持 M1 芯片 Maipo 4:全功能新浪微博 macOS 客户端 Bartender 4:Mac 菜单栏定制工具 JSBox:适配并支持 iOS 14 小组件 Little Snitch 5:macOS 上出色的流量监控与防火墙应用 Photoshop:更多的 AI 创意工具 Capslox:文本操作快捷键增强效率工具 Airport:TestFlight 测试应用商店 Disk Drill 4:全新设计,支持 macOS 11 Big Sur OneWidget:小组件中的瑞士军刀 Todoist:新增看板视图 IFTTT Pro:合理的定价、全新的特性 PooPoo Privacy Policy QuakeSense Privacy Policy | 震感 App 隐私政策 ThenNow Privacy Policy | 今昔 App 隐私政策 LaunchBar 6.13:支持 macOS Big Sur 24 Hour Wallpaper:近百张 Mac 动态壁纸 简悦 2.0 阅读模式 + 标注系统 + 稍后读 绕过 App Store 付费,Setapp 采用新的 iOS 付费应用解锁策略 Noto 笔记:2.3 版本带来 10 余项功能更新 PliimPRO:让 Mac 一键进入演示模式 Pixelmator Pro 1.7:文字输入、画布旋转和 ML 超分辨率更新 Ulysses 20:新增导航面板和中文拼写检查 Mailbrew:新增 Inbox 集中订阅 Newletter Fluent Reader:免费跨平台 RSS 阅读器 Moment:高颜值 Mac 状态栏倒数日应用 Meeter:集中管理你的远程会议 Adobe Lightroom:新版带来了众多实用特性 WWDC:在 Mac 上观看 WWDC 直播和视频 LongWe:Mac 上的文本长图生成工具 Photoshop Camera:风格独特的艺术效果 Empoche:任务管理和时间追踪二合一 Camera+ 2:Magic ML 带来照片处理新魔法 Tuck:将窗口停靠在屏幕边缘 Wormhole:在电脑上操作 iOS 和 Android 设备 Coherence X:一键将网页转换为桌面应用 Charty:让快捷指令支持图表可视化 Edison Mail:又一款免费邮件客户端 Service Station:定制 Mac 右键菜单 WatchSmith:前所未有地个性化 Apple Watch Data Jar:为捷径设计的数据库 Zappy:Zapier 出品的截图录屏应用
Google Analytics 替代品,零成本和零门槛搭建 umami.is
huhuhang · 2021-09-12 · via HANG ♥ WRITING

Google Analytics 应该是当今互联网使用最广泛的网站流量分析服务。通过在网页中嵌入追踪代码,Google Analytics 能够帮我们收集网站的流量来源,同时自动分析跳出率、转化率等核心指标。但是对于大部分中小型站点而言,接入 Google Analytics 并不是最理想的选择,因为它太复杂了,同时国内访问也不太方便。

umami.is 则可以看作是 Google Analytics 的精简版解决方案,它完全免费且开源,非常适合中小站点的网络流量统计分析。相对于复杂的 Google Analytics,umami.is 的界面也更加简洁,只关注于核心指标,并方便分享出去。

umami 示例页面

作为一款开源解决方案,umami.is 并不提供官方的托管服务,而是需要自行部署。提到部署,你可能想到需要使用自己的服务器或租用云主机。不用担心,接下来我将会介绍利用互联网上现成的无服务器解决方案,零成本、零门槛部署可靠的 umami.is 服务

前期准备

Serverless 无服务器计算架构近年来逐渐火热,这里的无服务器并不意味着无需服务器参与计算,而是指开发者不必过多关心底层服务器的状态,性能,资源等。因为这一切由云服务商提供,并动态管理机器资源的分配。所以为了达到零成本部署的目标,我们需要选择一些免费可靠的 Serverless 服务。

根据 umami.is 官方文档 的说明,其服务需要运行在 Node.js 环境中,且需要对接到 MySQL 或者 PostgreSQL 数据库。所以,接下来我们会使用到免费可靠的 Vercel 静态站点托管服务,以及同样免费可靠到 PostgreSQL 数据库服务商 Supabase

那么正式开始之前,你需要做的第一件事是 注册一个 GitHub 帐号。为什么注册 GitHub 呢?因为我们后续要克隆 umami.is 主仓库代码,同时通过 GitHub 帐号直接登录 Vercel 和 Supabase,从而不需要额外再注册相关平台了。

注册好 GitHub 帐号之后,你需要完成 3 个步骤:

Fork 代码仓库并登录到 Vercel 和 Supabase
  1. 访问 umami.is 代码仓库,点击右上方 Fork 到自己的账号。
  2. 访问 Vercel 注册页面,点击使用 GitHub 登录到 Vercel。
  3. 访问 Supabase 注册页面,点击使用 GitHub 登录到 Supabase。

至此,准备工作大功告成,是不是非常简单。

创建数据库

我们需要先在 Supabase 的主界面中找到 New Project 按钮创建一个新的数据库。名字可以使用 umami,然后设置一个自己记得住的数据库密码。下方的 Region 区域选择 **Northeast Asia(Tokyo)**东京区域。Supabase 本身使用了 AWS 云服务,东京区域在大陆地区的访问速度还是比较理想的。

创建自己的 umami 数据库

创建好之后,等待数据库初始化完成。接下来,我们需要向数据库中写入 umami.is 所需的基础数据结构。打开 umami.is 代码仓库,找到其预先提供的 PostgreSQL 初始化 SQL 语句 schema.postgresql.sql

PostgreSQL 初始化 SQL 语句

接下来,我们回到初始化完成的 Supabase 数据库的设置页面,找到左侧的 SQL 选项,选中默认的 Query-1 查询面板。然后,完整复制上方 schema.postgresql.sql 文件中的 SQL 语句粘贴到查询对话框中,点击 RUN 执行。

创建默认的数据库表结构

几秒后,Supabase 会返回 Success. No rows returned 的提示,此时回到 Supabase 的 Tables 面板中,你可以看到多出了 5 张数据表,这也就是 umami.is 所需的初始化数据结构。

确认初始化数据表结构创建成功

部署 umami.is

接下来,我们可以正式开始部署 umami.is 了。打开 Vercel 主面板,点击右上角 New Project 创建一个新的项目。创建项目的页面中,会自动加载你 GitHub 帐号下方的代码仓库。还记得准备步骤 Fork 的 umami.is 仓库吗?选中即可。

使用 Vercel 部署 umami 项目

所有的设置都可以使用默认值。唯一需要自定义的是环境变量,我们需要传入相关的数据库连接参数。找到 Environment Variables 一项并展开,首先添加数据库连接的环境变量。

  • DATABASE_URLpostgresql://username:mypassword@localhost:5432/mydb

值得注意的是,上方数据库链接中的参数需要使用实际值,你需要到 Supabase 的设置页面中查看。如下图所示,如果我一开始设置的数据库密码是 123456,那么 DATABASE_URL 实际应该为:

查看 Supabase 设置项中的 PostgreSQL 配置

请注意,数据库链接中的密码以你在准备步骤设置的实际密码为准,其他参数以你的 Supabase 设置页面提供的为准。然后,我们还需要添加第二组环境变量 HASH_SALT,它的值可以是任意随机英文字符串,比如我使用了我的用户名 HUHUHANG,你也可以自定义其他随机字符串。

  • HASH_SALT:任意随机英文字符串。

添加好的 DATABASE_URL 和 HASH_SALT 环境变量

两组环境变量添加完成之后的结果如上图所示。设置完成之后,点击 Deploy 部署项目

测试和设置

至此,主要步骤已经顺利完成,你需要做的只是耐心等待项目部署完毕。完成之后,Vercel 会自动跳转到项目主页,并随机分配一个域名。点击 Visit 访问项目,umami 默认的后台登录的用户名是 admin,密码是 umami。登录之后,即可看到下方右图的界面。

测试并登录到部署完成的 umami 后台

一切大功告成,我们已经顺利部署了 umami.is 服务。接下来,我们还可以做几件事情个性化你的 umami.is 服务。

自定义域名

首先是设置一个独立域名,当然前提条件是你有自己的域名,没有的话可以到任意域名服务商(阿里云、腾讯云等)购买。当然你也可以一直使用 Vercel 自动分配的域名。

umami 项目添加自定义域名

重设 umami 密码并绑定站点

不要忘记到 umami 后台重设默认的管理员密码。同时,你可以新建站点并获取到数据追踪代码嵌入到你的站点中。

重设后台密码并获取站点追踪代码

这里非常推荐开启「启用共享链接」的选项,这是 umami 的一大特色,可以方便分享你的站点访问数据。同时当你自己查看时,可以免登录。你可以 访问我的示例分享页面

常见问题和小结

至此,我们通过互联网现有的资源零成本部署了自己的 umami 网站数据追踪服务。最后列举几个大家可能关心的问题。

Q:Vercel 和 Supabase 是免费的吗?我能用多久?

A: 目前 Vercel 的个人帐号完全免费,企业帐号才需要付费。Supabase 的免费数据库存在 500 MB 的限制,对于中小站点这个容量理论上够用很多年了。

Q:umami 的访问速度如何?

A: 据我所知,Vercel 使用了 Google Cloud 的云服务,距离大陆地区最近的节点在台湾省和香港特别行政区,访问速度还算理想。而 Supabase 使用了 AWS 云服务,一开始我们创建的数据库就选择了离大陆地区最近的东京数据中心。

Q:umami 后续如何升级?

A: Vercel 的部署是自动触发和完成的,也就是说当 GitHub 代码仓库更新时,Vercel 会帮你自动部署上线最新版本的 umami。你可以不定期访问你 Fork 后的代码仓库,选中 Fetch upstream 从 umami 官方仓库同步最新的代码后即可自动升级。当然,你还可以从一开始直接部署官方仓库的代码,完全跟随官方版本迭代升级。

拉取 umami 主仓库代码自动升级

总之,如果你拥有自己的独立博客或者正在运营中小型站点,非常推荐 尝试一下 umami,它真的很不错。