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

前言

本来是想在WordPress系列中说的。

但有人问起和Umami安装过程中的sql文件映射问题,所以临时更新这一章。当初我安装的时候,这确实是个恼人的东西。

话不多说,直接开始!

测试环境

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-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:[email protected]:5432/POSTGRES_DB
      # 按实际情况修改
      DATABASE_URL: postgresql://umami:[email protected]: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

效果demo: https://umamirn2.hwb0307.com/website/1/blognas

小结

没啥特别,就是文件那里有个小trick,所以要重新映射。

我记得大致是这个步骤。我自己在别的服务器复现了一下流程,可以成功。

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

参考

版权声明:除特殊说明,博客文章均为Bensz原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。 如有需要,请至学习地图系统学习本博客的教程。加Telegram群可获得更多帮助喔! | 博客订阅:RSS | 广告招租:留言板 | 博客VPS |

评论

  1. tnjc
    Windows Chrome 101.0.4951.54
    5月前
    2022-5-08 13:40:21

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

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

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

发送评论 编辑评论


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