news 2026/6/3 1:03:13

不想把访客数据送给 Google?15 分钟自建 Umami 网站统计先聊聊

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
不想把访客数据送给 Google?15 分钟自建 Umami 网站统计先聊聊

转载自 我的个人博客

先聊聊

我的博客上线以后,一直有个痒点:到底有没有人看?

Google Analytics 能回答这个问题,但我实在不想装——一个统计脚本几十 KB,拖慢加载速度不说,还把每个访客的行为数据送给 Google。我的博客连广告都没挂,凭什么帮你收集用户数据?

后来发现了 Umami。开源、自建、一个脚本不到 2KB,Dashboard 简洁到不用学。更香的是,它有 Share API,我可以把统计数字实时展示在博客页面上——"本站总访问 12,345 次",那种有人来看的感觉真的很好。

这篇文章记录我从零部署 Umami 到博客展示统计数据的全过程。每一步都是跑过的,复制粘贴就能用。

Umami 是什么

简单说就是个轻量级的 Google Analytics 替代。部署在你的服务器上,数据归你。

装完以后长这样:打开 Dashboard,能看到每篇文章多少人看了、从哪来的、用什么设备。没有多余的图表,没有看不懂的指标。

我的部署架构

我有一台阿里云 ECS,上面跑了 Nginx、Twikoo 评论、Syncthing 图床。Umami 也扔在上面:

  • Docker Compose 启动 Umami + Postgres 两个容器
  • Nginx 反代子域名umami.131714.xyz
  • 博客(Cloudflare Pages 上的 Astro 静态站)加载跟踪脚本
  • 博客侧边栏和文章页实时拉取统计数据

第一步:Docker Compose 部署

SSH 登录服务器,建个目录:

mkdir ~/umami && cd ~/umami

创建docker-compose.yml

version: '3' services: umami: image: ghcr.io/umami-software/umami:postgres-latest ports: - "127.0.0.1:3000:3000" environment: DATABASE_URL: postgresql://umami:你的数据库密码@db:5432/umami DATABASE_TYPE: postgresql APP_SECRET: 你的随机密钥 depends_on: db: condition: service_healthy restart: unless-stopped db: image: postgres:16-alpine environment: POSTGRES_DB: umami POSTGRES_USER: umami POSTGRES_PASSWORD: 你的数据库密码 volumes: - ./pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U umami"] interval: 5s timeout: 5s retries: 5 restart: unless-stopped

注意端口绑了127.0.0.1——Umami 不直接暴露到公网,后面用 Nginx 反代出去变 HTTPS。

APP_SECRET 用这个命令生成:

openssl rand -hex 32

然后把输出的那串字符填进去。

启动:

docker compose up -d docker compose ps # 确认两个容器都是 Up # 新版 Umami 首次访问页面自动引导注册管理员

第二步:Nginx 反代 + HTTPS

/etc/nginx/sites-available/下新建配置:

server { listen 80; server_name umami.你的域名.com; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }

启用并上 SSL。别直接用certbot --nginx,很容易出 403:

# 先启用 site sudo ln -s /etc/nginx/sites-available/umami /etc/nginx/sites-enabled/ # 只申请证书,不碰 nginx 配置 sudo certbot certonly --nginx -d umami.你的域名.com

证书拿到后,补完整配置:

server { listen 80; server_name umami.你的域名.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name umami.你的域名.com; ssl_certificate /etc/letsencrypt/live/umami.你的域名.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/umami.你的域名.com/privkey.pem; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
sudo nginx -t && sudo systemctl reload nginx

certbot --nginx会自动改 nginx 配置,但可能把 SSL 写进default文件,导致 HTTPS 命中静态文件,反代失效。

第三步:在 Umami 添加网站

打开https://umami.你的域名.com,登录后在 Settings → Websites → Add website:

  • Name:随便填,比如 "RyuChan Blog"
  • Domain:填博客域名,比如blog.nywerya.xyz

创建后会得到一个 Website ID,是一串 UUID,记下来。

第四步:配置博客

我的博客用的是 Astro 模板 RyuChan,已经把 Umami 集成好了。只需在配置文件里填几行:

umami: enable: true baseUrl: https://umami.你的域名.com websiteId: 上一步拿到的 UUID shareId: "" timezone: Asia/Shanghai

部署后 F12 → Network 能看到/script.js被加载,就已经在统计了。

第五步:把统计数据展示在页面上

Umami 有一个很好用的 Share 功能,可以把统计数字通过 API 公开出去。博客侧边栏的"总访问量"和文章页的"阅读量"就靠这个。

在 Umami 后台 → Settings → Websites → 点你的网站 → Share → Enable share URL,设个密码保存。你会得到一个分享链接,URL 里那串随机字符就是shareId

填进博客配置:

shareId: jToXL5Z3hnA1gKUw # 你的分享 ID

部署后,博客会自动展示全站 PV/UV 和单篇阅读量。

不想自己部署?用 Umami Cloud

如果你不想折腾服务器,Umami 官方有托管服务 cloud.umami.is,注册即用。免费版 3 个网站,个人博客够用了。流程和上面一样,只是 baseUrl 改成https://cloud.umami.is

几个容易踩的坑

  1. 端口别暴露公网docker-compose.yml里写127.0.0.1:3000:3000,别写3000:3000
  2. 数据库 pgdata 要映射出来:不然docker compose down数据就没了
  3. APP_SECRET 很重要:丢了所有登录 session 失效,要重新登录
  4. 第一次跑 setup 别忘:不然没有管理员账号,登录不了后台

总结

整个流程走下来也就 15 分钟。部署 Docker → Nginx 反代 → 博客配置 → 开启分享。一次配好就再也不用管,后台自动统计数据,博客自动展示。

自建的好处不只是隐私——有了 Share API,你可以把"有人在看你的文章"这件事变成访客也看得见的数字。写博客最需要的就是这个。

有问题欢迎在评论区交流,博客地址见主页。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/3 1:02:08

网易新闻频道爬虫实战:从动态加载到数据持久化的完整指南。爬取网易新闻指定频道的正文(标题、时间、来源、内容)o 技术点:处理动态加载(部分新闻是后端渲染)

在数据驱动的时代,新闻数据的获取与分析成为信息处理的重要环节。网易新闻作为国内主流新闻门户,其频道内容丰富、更新及时,是数据挖掘和舆情分析的良好数据源。本文将带领大家从零开始,构建一个完整的网易新闻频道爬虫系统,不仅能够应对网易新闻的页面结构特点,还能处理…

作者头像 李华
网站建设 2026/6/3 1:02:07

[特殊字符] 多语言爬虫实战:纽约时报中文网财经板块深度爬取(附完整代码)爬取纽约时报中文网财经板块o 技术点:多语言网页、UTF-8编码

一、写在前面:为什么选择纽约时报中文网? 在当今全球化信息时代,跨国财经新闻的获取对于投资者、研究人员和财经爱好者来说至关重要。纽约时报中文网作为国际知名媒体,其财经板块涵盖了全球宏观经济、金融市场、企业动态、科技创新等众多前沿话题。然而,由于其多语言特性…

作者头像 李华
网站建设 2026/6/3 1:01:30

别再替换同义词了!论文AIGC率从97%到7%,全靠这3招(附工具测评)

很多小伙伴不理解,明明是自己写的,为什么还要到处想办法降低ai率,甚至经常被误判?因为专业写作的语境要求客观、严谨,这恰好与生成工具的底层逻辑高度重合。系统抓取的是文本困惑度,当你的遣词造句太符合统…

作者头像 李华
网站建设 2026/6/3 1:01:26

检索增强生成(RAG)

1、RAG的定义与动机检索增强生成(Retrieval-AugmentedGeneration,RAG)是一种将检索技术与生成模型相结合的人工智能技术。其核心思想是在生成内容时,通过检索外部知识库来获取相关信息,从而增强生成内容的准确性、时效…

作者头像 李华
网站建设 2026/6/3 0:57:12

如何用AI瞄准助手在3分钟内提升游戏瞄准精度:终极指南

如何用AI瞄准助手在3分钟内提升游戏瞄准精度:终极指南 【免费下载链接】AI-Aimbot Worlds Best AI Aimbot - CS2, Valorant, Fortnite, APEX, every game 项目地址: https://gitcode.com/gh_mirrors/ai/AI-Aimbot 你是否曾在CS2、Valorant或Fortnite等射击游…

作者头像 李华