一键部署 Umami 统计个人网站访问数据
谈到网站统计,大家第一时间想到的肯定是 Google Analytics。然而,我们都知道 Google Analytics 会收集所有用户的信息,对数据没有任何控制和隐私保护。
Google Analytics 收集的指标实在是太多了,有很多都是不必要的,没有博士学位可能都不太容易理解这些指标。
相比较而言,开源的网站统计工具可能更适合我们,他们可以私有化部署,同时尊重用户的隐私,可以完全控制自己的数据。这其中的佼佼者便是 Umami 与 Plausible。其中 Umami 架构更简洁,也更容易部署。具体优势如下:
- 简单易用,只跟踪关键指标,数据清晰易读。
- 可无限追踪网站和子域名,不受数量限制。
- 自托管部署可以绕过广告拦截器,有效避免 Google Analytics 等广告拦截器。
- 代码轻量,追踪脚本只有 2KB,支持 IE 等旧版浏览器。
- 支持多用户账号,提供共享链接,可以公开分享统计数据。
- 页面针对移动设备优化,可随时随地查看统计数据。
- 数据自主可控,不需要交给第三方,注重隐私。
- 代码采用 MIT 开源协议,开发者友好。
- 支持多语言,内置黑暗模式。
- API 开发友好,可以定制跟踪配置。
Umami 的数据都存放在数据库中,支持 MySQL、PostgreSQL 和 Clickhouse,对于小白来说部署起来还是有点小复杂。不过有了 Sealos 一键部署模板,这个问题就比较简单了,动动鼠标就行了,3 分钟即可解决战斗。
一键部署 Umami
首先通过以下链接打开 Umami 的应用模板:
https://cloud.sealos.io/?openapp=system-fastdeploy%3FtemplateName%3Dumami
只需要填一个参数 APP SECRET 即可,这个参数的值随便填一个字符串就行。然后直接点击「部署应用」。

部署完成后,点击确认跳转到应用详情页面,你会发现应用无法启动,因为这个模板同时创建了 PostgreSQL 数据库和应用,而数据库目前还不具备自定义初始化数据库的能力,等数据库后端升级到下个版本就可以自定义数据库啦,目前暂时需要我们稍微手动操作一下。
首先打开「数据库」:

进入 umami 数据库的详情页面:

直接点击「一键链接」:

便会进入数据库的终端:

通过以下命令新建一个数据库 umami:
create database umami;
最后退出终端,打开「应用管理」,进入 umami 应用的详情页面,可以看到应用已经启动成功了。查看日志:


接入 Umami
点击外网地址即可直接打开 Umami 的 Web 界面:

默认的用户名是 admin,密码是 umami。
进入管理界面后,要先创建一个网站:

点击「编辑」进入网站设置,复制跟踪代码,到自己网站的 <head> 内粘贴即可。

最终效果如下:

重写路径
Umami 是一个极其尊重隐私的网站统计服务,它与广告技术和监视资本主义无关,也不会收集任何个人数据。即便如此,它还是有可能会被某些广告过滤规则所屏蔽。
为了避免被广告过滤器误杀,我们可以重写 js 脚本的路径,按照官方文档,我们只需要添加一个环境变量即可。

Sealos 添加环境变量非常简单,在应用详情页面中点击「变更」:

展开高级配置,点击「编辑环境变量」:

添加环境变量 TRACKER_SCRIPT_NAME=xxx,这个值可以随便写,也不需要以 .js 作为后缀,这样更容易绕过广告过滤器的检测。

确认之后,点击「变更」,等待实例重新启动成功。再次打开 Web 界面,你会看到跟踪代码里的 js 链接已经变了:

Sealos 也提供了 Plausible 的一键部署模板,对 Plausible 感兴趣的小伙伴可以去试试:
- https://cloud.sealos.io/?openapp=system-fastdeploy%3FtemplateName%3Dplausible
相关文章:
一键部署 Umami 统计个人网站访问数据
谈到网站统计,大家第一时间想到的肯定是 Google Analytics。然而,我们都知道 Google Analytics 会收集所有用户的信息,对数据没有任何控制和隐私保护。 Google Analytics 收集的指标实在是太多了,有很多都是不必要的,…...
java种的hutool库接口说明和整理
1. Hutool库基本介绍 1.1. 地址 官网地址:https://www.hutool.cn/ 1.2. 基本介绍 Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅…...
控制国外各类电液伺服阀放大器
控制通用型不带反馈信号输入的伺服阀放大器,对射流管式电液伺服阀、喷嘴挡板式电液伺服阀及国外各类电液伺服阀进行控制。 通过系统参数有10V和4~20mA输入指令信号选择; 供电电源: 24VDC(标准) 输出电流:最大可达10…...
【go语言基础】go中的方法
先思考一个问题,什么是方法,什么是函数? 方法是从属于某个结构体或者非结构体的。在func这个关键字和方法名中间加了一个特殊的接收器类型,这个接收器可以是结构体类型的或者是非结构体类型的。从属的结构体获取该方法。 函数则…...
Go 语言并发编程 及 进阶与依赖管理
1.0 从并发编程本质了解Go高性能的本质 1.1 Goroutine 协程可以理解为轻量级线程; Go更适合高并发场景原因之一:Go语言一次可以创建上万协成; “快速”:开多个协成 打印。 go func(): 在函数前加 go 代表 创建协程; time.Sleep():…...
绽放趋势:Python折线图数据可视化艺术
文章目录 一 json数据格式1.1 json数据格式认识1.2 Python数据和Json数据的相互转换 二 pyecharts模块2.1 pyecharts概述2.2 pyecharts模块安装 三 pyecharts快速入门3.1 基础折线图3.2 pyecharts配置选项3.2.1 全局配置选项 3.4 折线图相关配置3.4.1 .add_yaxis相关配置选项3.…...
BGP小综合
实验要求及拓扑 一、思路 1.使用OSPF使R2-R7之间可通。 2.各自宣告AS区域,两个区域两两之间建邻,AS2两个小区域之间建联邦(R2与R5、R4与R7)。 3.使R3、R6为路由反射器 RR反射器选取各小区域的路由器作为客户端 、非客户端 4.优…...
一起学数据结构(3)——万字解析:链表的概念及单链表的实现
上篇文章介绍了数据结构的一些基本概念,以及顺序表的概念和实现,本文来介绍链表的概念和单链表的实现,在此之前,首先来回顾以下顺序表的特点: 1.顺序表特点回顾: 1. 顺序表是一组地址连续的存储单元依次存…...
9.2.1Socket(UDP)
一.传输层: 1.UDP:无连接,不可靠,面向数据报,全双工. 2.TCP:有连接,可靠,面向字节流,全双工. 注意:这里的可不可靠是相对的,并且和安不安全无关. 二.UDP数据报套接字编程: 1.socket文件:表示网卡的这类文件. 2.DatagramPacket:表示一个UDP数据报. 三.代码实现: 1.回显服务…...
9.1网络通信基础
一.基础概念: 1)IP地址:描述网络上的一个设备所在的位置. 2)端口号(port):区分一个主机上不同的进程,和pid一样的作用,但两者不同. 3)协议:网络通信传输数据的含义,协议表示一种约定,这种约定可以是任意的.协议分层之后,上层不需要知道下层协议的细节,可以灵活地调整,替换某…...
idea添加翻译插件并配置有道翻译
1、安装Translation插件 2、 创建有道云应用 有道智云控制台 3、设置idea 4、效果(选中文本右键翻译,默认快捷键CtrlShiftY)...
激光切割机的操作中蛙跳技术是什么意思
其实,蛙跳技术就是指在激光切割机运行的过程中,机器换位置的方式。打个比方,你刚刚在这儿把孔1切好了,接下来就得跑到那儿把孔2切了。 在这个过程中,激光切割机就像是一只青蛙,要从一个位置跳到另一个位置。…...
Typescript+React入门
初识Typescript 出现背景 Typescript(以下简称TS)实际上就是JavaScriptType,用数据类型的方式来约束了JS的变量定义 在JS的基础上增加了类型支持 在JS中大多数错误都是因为数据类型造成的,所以TS为了规避这个问题加入了类型限制…...
竞赛项目 酒店评价的情感倾向分析
前言 🔥 优质竞赛项目系列,今天要分享的是 酒店评价的情感倾向分析 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng-senior/post…...
加载并绘制时间域内的心电图信号,并实施Q因子为1的陷波滤波器以去除50 Hz频率研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
瑞数信息《2023 API安全趋势报告》重磅发布: API攻击持续走高,Bots武器更聪明
如今API作为连接服务和传输数据的重要通道,已成为数字时代的新型基础设施,但随之而来的安全问题也日益凸显。为了让各个行业更好地应对API安全威胁挑战,瑞数信息作为国内首批具备“云原生API安全能力”认证的专业厂商,近年来持续输…...
HCIA静态路由与动态路由
目录 一、静态路由 定义: 适用环境 二、动态路由 定义: 特点: 动态路由协议: 三、缺点: 1)静态路由缺点: 2)动态路由的缺点: 四、静态路由与动态路由的区别 静态路由: 动态路由: 一、静态路…...
【前端 | CSS】flex布局
基本概念 Flexible模型,通常被称为 flexbox,是一种一维的布局模型。它给 flexbox 的子元素之间提供了强大的空间分布和对齐能力 我们说 flexbox 是一种一维的布局,是因为一个 flexbox 一次只能处理一个维度上的元素布局,一行或者…...
YoloV8优化:感受野注意力卷积运算(RFAConv),效果秒杀CBAM和CA等 | 即插即用系列
💡💡💡本文改进:感受野注意力卷积运算(RFAConv),解决卷积块注意力模块(CBAM)和协调注意力模块(CA)只关注空间特征,不能完全解决卷积核参数共享的问题 RFAConv| 亲测在多个数据集能够实现大幅涨点,有的数据集达到3个点以上 💡💡💡Yolov8魔术师,独家首…...
面对AI冲击,技术人才该如何考核?
一天下午,在与知名企业的技术交流会议室里,一位兄弟企业的CTO 小力苦笑着,分享了一个技术招聘的故事: “我们有个高级工程师,为了搞定MySQL三个表Join的问题,搞了一整天都研究不出来。结果他尝试将表结构扔…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
