Docker系列 通过umami监控网站流量
本文最后更新于 394 天前,如有失效请评论区留言。

本博客由ZGOCLOUD大力赞助!如何更快地访问本站?有需要可加电报群获得更多帮助。本博客用什么VPS?创作不易,请支持苯苯!推荐购买本博客的VIP喔,10元/年即可畅享所有VIP专属内容!

日志

  • 2023-04-20:诈骗误报的处理方法
  • 2023-02-16:添加Umami异常可能会导致Pjax失效的提醒。
  • 2023-02-16:完善使用方法的教程。维护其它内容。

前言

效果demo: https://umamirn2.hwb0307.com/share/QqhvkqI6/blognas

Umami是一个统计网站流量信息的工具,界面大致如下:

image-20230216125602513

后台可以观察访客(和登陆用户)的实时流量:

msedge_l6agI2ijZy

话不多说,我们用Docker布署一个自己的Umami。Let’s go!

测试环境

uname -a # Linux VM-12-8-ubuntu 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
docker --version # Docker version 20.10.5, build 55c4c88
docker-compose --version # docker-compose version 1.28.6, build 5db8d86f

准备工作

按需修改工作目录:

work=~/docker/umami && mkdir -p $work && cd $work

按需修改端口,开启防火墙:

sudo ufw allow 3000/tcp comment 'umami' && sudo ufw reload

提前拉取镜像:

# 国内的小伙伴下载可能很慢
docker pull ghcr.io/mikecao/umami:postgresql-latest &&
docker pull postgres:12-alpine

配置yml文件

不了解docker的小伙伴请先看:《Docker系列 配置Docker全局环境》;《Docker系列 了解Docker Compose的配置文件》。

如果你使用了某个版本的postgres,建议试试用原来的tag而不是postgres:12-alpine,以便节省镜像对磁盘容量的占用。

新建一个docker-compose文件,

vim $work/docker-compose.yml

填入以下内容:

---
version: '3'
services:
  app:
    image: ghcr.io/mikecao/umami:postgresql-latest
    ports:
      - "3000:3000" # 按需修改
    environment:
      # DATABASE_URL: postgresql://POSTGRES_USER:POSTGRES_PASSWORD@db:5432/POSTGRES_DB
      # 按实际情况修改
      DATABASE_URL: postgresql://umami:umamipassword@db:5432/umami # 按下面的信息修改
      DATABASE_TYPE: postgresql
      HASH_SALT: replace-me-with-a-random-string
    depends_on:
      - db
    restart: always
    networks:
      - default 
  db:
    image: postgres:12-alpine
    environment:
      POSTGRES_DB: umami # 数据库名,不建议改
      POSTGRES_USER: umami # 数据库用户,不建议改
      POSTGRES_PASSWORD: umamipassword  # 数据库密码 按需修改
    volumes:
      - ./sql/schema.postgresql.sql:/docker-entrypoint-initdb.d/schema.postgresql.sql:ro
      - ./data:/var/lib/postgresql/data
    restart: always
    networks:
      - default

networks:
  default:
    name: umami

:wq保存退出。

直接上线服务:

docker-compose up -d

映射sql

umami有一个特殊的trick。

有看到yml文件里的这个./sql/schema.postgresql.sql项目吗?它默认是生成一个文件夹。

但实际上它是一个文件。所以我们要将默认生成的文件夹删除,并映射成系统需要的那个文件。文件的内容在这个链接里:https://github.com/mikecao/umami/blob/master/sql/schema.postgresql.sql

原内容如下,我直接copy过来的:

drop table if exists event;
drop table if exists pageview;
drop table if exists session;
drop table if exists website;
drop table if exists account;

create table account (
    user_id serial primary key,
    username varchar(255) unique not null,
    password varchar(60) not null,
    is_admin bool not null default false,
    created_at timestamp with time zone default current_timestamp,
    updated_at timestamp with time zone default current_timestamp
);

create table website (
    website_id serial primary key,
    website_uuid uuid unique not null,
    user_id int not null references account(user_id) on delete cascade,
    name varchar(100) not null,
    domain varchar(500),
    share_id varchar(64) unique,
    created_at timestamp with time zone default current_timestamp
);

create table session (
    session_id serial primary key,
    session_uuid uuid unique not null,
    website_id int not null references website(website_id) on delete cascade,
    created_at timestamp with time zone default current_timestamp,
    hostname varchar(100),
    browser varchar(20),
    os varchar(20),
    device varchar(20),
    screen varchar(11),
    language varchar(35),
    country char(2)
);

create table pageview (
    view_id serial primary key,
    website_id int not null references website(website_id) on delete cascade,
    session_id int not null references session(session_id) on delete cascade,
    created_at timestamp with time zone default current_timestamp,
    url varchar(500) not null,
    referrer varchar(500)
);

create table event (
    event_id serial primary key,
    website_id int not null references website(website_id) on delete cascade,
    session_id int not null references session(session_id) on delete cascade,
    created_at timestamp with time zone default current_timestamp,
    url varchar(500) not null,
    event_type varchar(50) not null,
    event_value varchar(50) not null
);

create index website_user_id_idx on website(user_id);

create index session_created_at_idx on session(created_at);
create index session_website_id_idx on session(website_id);

create index pageview_created_at_idx on pageview(created_at);
create index pageview_website_id_idx on pageview(website_id);
create index pageview_session_id_idx on pageview(session_id);
create index pageview_website_id_created_at_idx on pageview(website_id, created_at);
create index pageview_website_id_session_id_created_at_idx on pageview(website_id, session_id, created_at);

create index event_created_at_idx on event(created_at);
create index event_website_id_idx on event(website_id);
create index event_session_id_idx on event(session_id);

insert into account (username, password, is_admin) values ('admin', '$2b$10$BUli0c.muyCW1ErNJc3jL.vFRFtFJWrT8/GcR4A.sUdCznaXiqFXa', true);

下面我们进行schema.postgresql.sql的重新映射:

# 删除错误的文件夹
sudo rm -r $work/sql/schema.postgresql.sql

# 新建一个文件,填写新的内容
sudo vim $work/sql/schema.postgresql.sql # 粘贴上面所示的sql内容。按:wq保存

# 可以改一下这个文件的权限,以防出错。你可以不改试试
sudo chmod +666 $work/sql/schema.postgresql.sql

# 查看umami数据库的容器ID
docker ps -a | grep umami # 获得umami数据库的容器id。通常是umami-db-1或者umami_db_1。看你docker-compose的版本不同。

# 将文件映射出来
# 这个命令注意改umami_db_1。有的人是umami-db-1。
docker exec -i umami_db_1 psql -U umami -d umami < $work/sql/schema.postgresql.sql

重新上线服务:

cd $work && docker-compose down && docker-compose up -d

ddns-go & NPM

不了解Nginx Proxy Manager用法的小伙伴,请看《Docker系列 两大神器NPM和ddns-go的安装》。

在ddns-go或者域名托管商后台映射好域名umami.example.com

在NPM里进行反代。无特殊设置。如下图所示:

image-20220426151402891

设置完后打开网站登陆即可:https://umami.example.com

默认帐户和密码:

帐户:admin
密码:umami

使用方法

进入后台,修改成简体中文后,添加一个网站:

NVIDIA_Share_4U7Swu4auJ

比如,我自己的网站就是这样写:

NVIDIA_Share_M7hAu62VeG

然后,复制共享链接:

NVIDIA_Share_2i99rkEQic

这个链接分享出去后,所有打开链接的人都可以看到Umami的基本统计信息。但是有一些信息是只有登陆后台才能查看的,比如某个访客正在看哪个网页。

然后就是获取跟踪代码:

NVIDIA_Share_UOU21G1PGh

对于Argon主题来说,有一个取巧的添加方法:

NVIDIA_Share_NYYuPJjQkg

添加后保存Argon设置即可生效。

对于其它WordPress或者其它平台的网站,放在<head></head>这个标签之内即可。比如,在Argon里面也可以这样添加:

NVIDIA_Share_XQTRNOcNDN

它之所以要求放在该标签内,是因为一个网站首先加载的就是<head></head>标签,添加在这里不容易遗漏某些不完整的访问;与之对应的,我的《特效》大多放在footer.php,是因为footer.php对应的标签<footer></footer>往往是最后加载的,这样不影响文章等重要内容的加载。

注意事项

  • Umami的监测链接有问题可能会导致网站Pjax失效,具体表现有:开发者窗口提示Umami collect失效;Pjax失效,比如点开链接后壁纸自动切换(Pjax生效时壁纸并不会自动切换)。这种情况可以尝试:检查VPS磁盘空间,适当释放空间;重启Umami的docker stack。
  • umami.js位置错误导致Google危险标记:近期有小伙伴将umami.js放到网站的header部分,导致网站被Google标记为诈骗网站。处理方法是将umami.js放在上述正确的位置上,然后找Google站长恢复。

小结

没啥特别,就是文件那里有个小trick,所以要重新映射。我记得大致是这个步骤。我自己在别的服务器复现了一下流程,可以成功。还有其它类似的更强大的工具,比如Matomo,有兴趣的小伙伴可以了解一下。

如果有问题不懂,欢迎评论留言吧!

参考

---------------
完结,撒花!如果您点一下广告,可以养活苯苯😍😍😍

感谢ZGOCLOUD友情赞助 (ฅ´ω`ฅ) 本博客基于m2w创作。版权声明:除特殊说明,博客文章均为Bensz原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。VIP内容严禁转载!由于可能会成为AI模型(如chatGPT)的训练样本,本博客禁止将AI自动生成内容作为文章上传(特别声明时除外)。如有需要,请至学习地图系统学习本博客的教程。加Telegram群可获得更多帮助喔! | 博客订阅:RSS | 广告招租请留言 | 博客VPS | 致谢渺软公益CDN |

评论

  1. TURIING
    Windows Edge 108.0.1462.54
    1 年前
    2023-1-06 23:26:35

    博客真好看

    • 博主
      TURIING
      Windows Edge 108.0.1462.54
      1 年前
      2023-1-06 23:28:09

      谢谢鼓励,欢迎多多交流喔! 可以加电报群讨论问题哈: https://t.me/benszhub

      • TURIING
        Bensz
        Windows Edge 108.0.1462.54
        1 年前
        2023-1-07 22:06:27

        请问字体是什么呀

      • 博主
        TURIING
        Windows Edge 108.0.1462.54
        1 年前
        2023-1-07 22:09:46

        目前所用的字体叫汉仪唐美人简,这在《关于我》中也有提及。如果你想布署这个字体,可以看教程《特效》:

        查看图片
        NVIDIA_Share_i8dPjFrwRO

      • TURIING
        Bensz
        Windows Edge 108.0.1462.54
        1 年前
        2023-1-07 22:43:27

        谢谢啦

  2. tnjc
    Windows Chrome 101.0.4951.54
    2 年前
    2022-5-08 13:40:21

    大佬您好,我在网站下添加了追踪代码等了几十分钟也没有数据显示,我的版本是1.31 ,我的服务在内网,站点是公网vps,您有遇到过这个问题嘛?

    • 博主
      tnjc
      Windows Chrome 100.0.4896.127
      2 年前
      2022-5-08 14:06:16

      你是说,你的umami装在内网,然后你的博客网站之类的站点是放在公网vps上面吗?

      • tnjc
        Bensz
        Windows Edge 114.0.1823.79
        10 月前
        2023-7-13 16:36:46

        找到原因了,是因为vps上站点是https的,链接请求失败

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇