海欧的博客

  • Navidrome
  1. 首页
  2. 服务器
  3. 正文

服务器部署网站流量统计服务

2026年2月12日 33点热度 0人点赞 0条评论

服务器部署网站流量统计服务

image-20260212191314678

1. 前言

一个小的站点毕竟也没有多少的访问量,但是对于团队或者公司就不一样了,他们需要做数据分析,来研究出访问者的喜好,有利于提高业务的洞察力。现在我们是个人的小破站点,流量是很少的,但是我们也非常感兴趣访问者的喜好,比如搜索了什么关键词,是在哪里引流过来的,使用什么客户端访问的,等等访客者的喜好都可以进行统计。

我们即将部署的是umami,它是一个轻量的统计服务,当然相比与GA(Google Analytics)来说是相对简单很多,但是胜在是自建的服务,不需要托管,也不需要付费。自建是完全自定义且数据私有的方法,简单功能也能满足我们日常的统计需求,为我们的小破站点增加一点可以监测的功能,这还是很有趣的。

2. 选择

流量统计服务的选择有:

  • 入口日志统计型
  • JS统计型

2.1 入口日志统计

选择:GoAccess

特点:满足统计有没有请求,请求来自哪里,什么时候来的;可静态资源,无入侵性(head), 无需db,占用资源极低,可统计多站 / API / 图床的多站点

路径:浏览器 → npm(Nginx) → access.log → GoAccess

2.2 JS 统计型

选择:

  • Matomo(重,可以完整替代 GA,表写入次数非常高)
  • Umami (轻量,表写入次数非常低)
  • Plausible(部分收费,不考虑)

特点: 可统计哪个页面被看了,来源是什么,有侵入性(head),要db,占用资源为中;

路径:浏览器 → npm → 博客 → 页面 HTML → JS被执行 → 上报统计

2.3 选择什么

其中Matomo是最重的,它可以分析用户行为,访问路径,内容转化,但是我们不需要这么复杂的功能,毕竟服务器内存只有2G。

Umami 对于我们来说就刚刚好,它可以满足统计访问量 / 页面等常用功能。

路径:浏览器 → 博客页面(WordPress / Halo)→ JS(script umami.js) → Umami Server → PostgreSQL

3. 部署

3.1 如何做

对于wordpress:修改主题文件的header.php, 在header注入JS

对于Halo: 在全局head注入的设置中,注入JS

3.2 docker-compose

参考github官方文档,编写compose:

image-20260212205350946
version: '3.8'
services:
  db:
    image: postgres:15-alpine
    container_name: umami-postgres
    environment:
      POSTGRES_DB: umami_db
      POSTGRES_USER: umami_user
      POSTGRES_PASSWORD: umami_pass
    volumes:
      - /root/data/docker_data/umami/postgres-data:/var/lib/postgresql/data
    restart: unless-stopped
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
      interval: 5s
      timeout: 5s
      retries: 5
  umami:
    image: ghcr.io/umami-software/umami:latest #使用github镜像
    container_name: umami
#    ports:      #无需映射端口,使用内部网络
#      - "53000:3000"
    environment:
      DATABASE_URL: postgresql://umami_user:umami_pass@db:5432/umami_db
      APP_SECRET: b07b2912758aa928da40d9ffb289f18b0cfdae3abff7567e999005b62d6fdeb8 #openssl rand -hex 32
    depends_on:
#      - db
      db:
        condition: service_healthy #等待可用        
    init: true #启动 PID 1 的 tini init 进程(可选)
    restart: unless-stopped
    networks:
      - default    #默认网络
      - my_npm_prj_npm_network #加入npm网络
    healthcheck:
      test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"] #容器内部健康检查,推荐加入
      interval: 5s
      timeout: 5s
      retries: 5
networks:
  my_npm_prj_npm_network:
    external: true  # 声明为外部网络

PS:

直接用 [服务名services],可以不需要容器名;

networks: - default # 显式加入默认网络(和postgres同网,default 是保留字) - my_npm_prj_npm_network # 加入npm网络

3.3 执行部署

检查端口占用:

image-20260212205928389
#cd到umami项目,开始部署
docker-compose up -d

登录数据库检查:

docker exec -it umami-postgres bash
#su postgres #可选,切换用户
psql -U umami_user -d umami_db #以 umami_user 用户身份登录到 umami_db 数据库
dt  #查看所有表
q   #退出交互终端
image-20260212210329533

检查网络:

image-20260212210413753

4. 反代+登录

反代设置:

image-20260212210854454

登录,使用默认账号密码:

image-20260212211035371
image-20260212211117759

5. 设置统计代码

添加网站:

image-20260212211308093

获取JS统计代码脚本:

image-20260212211334410

插入JS脚本:

位置:插入在 全局head标签之间,插入</head>之前
目的:先加载页面元信息与CSS, 最后再执行JS统计代码

image-20260212211415066
image-20260212211444156

6. 成果展示

成果展示:

image-20260212211520710

7. 最后

目前我们完成了流量统计服务,可以使用自定义域名进行访问,虽然功能不是很强大,但是胜在能用还省内存,一个小破站点该有的还是要有的,麻雀虽小五脏俱全。

元信息:

我还是喜欢每一篇文章都有#一级标题作为文章的名称,虽然有元信息定义了文章的标题,但是作为有Schema思维的工程师而言,这是很重要的,并不是多余的。同样在元信息定义文章的时间也很有必要,起码知道文章是什么时候写的,在日后如果有新的博客平台需求(比如Halo平台展示)的时候,可以手动修改适配元信息,在github博客文章仓库新开一个分支,元信息可以手动修改编辑,再提交到新的分支。Schema思维要求还是添加时间与标题的元信息好一点。

image-20260212232401833
image-20260212234440804
image-20260212235326349
标签: 云服务器 反代 容器 流量统计
最后更新:2026年2月12日

haiou

理工男极客工程师

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

归档

  • 2026 年 3 月
  • 2026 年 2 月

分类

  • 嵌入式
  • 服务器

00:00
目录
  • 服务器部署网站流量统计服务
    • 1. 前言
    • 2. 选择
      • 2.1 入口日志统计
      • 2.2 JS 统计型
      • 2.3 选择什么
    • 3. 部署
      • 3.1 如何做
      • 3.2 docker-compose
      • 3.3 执行部署
    • 4. 反代+登录
    • 5. 设置统计代码
    • 6. 成果展示
    • 7. 最后

COPYRIGHT © 2026 海欧的博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang