- 介绍:Umami 是一种简单、快速、注重隐私的开源分析解决方案。 Umami 是Google Analytics的更好替代品 ,因为它可以让您完全控制数据并且不会侵犯用户的隐私。
- 目标:在k8s上部署服务端,并且前端应用接入后能够正常采集信息。
- 准备工作
- 官方docker镜像
- k8s
- 前端工程
- nginx
官方网址:https://umami.is/
官方GitHub:https://github.com/umami-software/umami
步骤
因为我需要在nginx中配置访问umami页面的虚拟目录,比如默认的访问地址为:localhost:3000,但是通过nginx代理后访问的路径为localhost:8000/umami-analytics。在默认的已构建好的docker容器中是不支持设置根目录的,导致页面虽然能代理后访问带根目录的地址,但是静态资源js、css等文件是没有办法访问的。在构建镜像之前支持传递参数BASE_PATH设置根目录的路径,因此需要将原Dockerfile文件拉下来后自己构建镜像。原因也很简单,因为前端工程是在构建镜像的时候编译构建的,因此只有在编译构建之前将根目录这个参数设置好就可以了。
拉取github上umami的整个工程文件。
本地拉取成功后构建镜像,其中BASE_PATH为根目录地址参数,DATABASE_TYPE为数据库类型,这里用到的是mysql,构建过程中可能会报错,需要查看具体的报错内容,大部分原因是因为网络可能导致文件没有访问得到,或者基础镜像没有拉取成功。
1
docker image build --build-arg BASE_PATH=/umami-analytics --build-arg DATABASE_TYPE=mysql -t "umami-app:1.0.1" .
将本地镜像重新标签后推送至中央镜像库,命令大概是 docker tag … ,docker push …
构建k8s的Deployment
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39kind: Deployment
apiVersion: apps/v1
metadata:
name: umami
namespace: default
labels:
k8s-app: umami
spec:
replicas: 1
selector:
matchLabels:
k8s-app: umami
template:
metadata:
name: umami
creationTimestamp: null
labels:
k8s-app: umami
spec:
containers:
- name: umami
image: 'aaa/umami:1.1'
env:
- name: TZ
value: Asia/Shanghai
- name: DATABASE_URL
value: 'mysql://user:password@ip:port/database'
- name: DATABASE_TYPE
value: mysql
- name: HASH_SALT
value: Umami-tydic
resources:
limits:
cpu: '1'
memory: 1Gi
requests:
cpu: '1'
memory: 1Gi
restartPolicy: Always构建k8s中的service(用于在k8s中的服务发现,直接通过name中的pagespy就能访问该容器)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15kind: Service
apiVersion: v1
metadata:
name: umami
namespace: default
labels:
k8s-app: umami
spec:
ports:
- name: umami
protocol: TCP
port: 3000
targetPort: 3000
selector:
k8s-app: umami
注意:这里端口使用的3000是因为镜像中的默认启动端口为3000
nginx.conf的配置
1
2
3
4
5
6
7
8location /umami-analytics/ {
proxy_pass http://umami:3000/umami-analytics/;
proxy_set_header HOST $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-FOR $proxy_add_x_forwarded_for;
}umami启动的时候需要执行数据库的初始化脚本,需要保证数据库为空的数据库,不能有任何一张表。如果需要使用已存在表的数据库作为存储,我这里采取的方式是将自动生成的表结构和数据直接拷贝到现有的表里面。注意可能因为数据库版本不同的原因,原有SQL脚本建立的索引在5.6和5.7的Mysql版本中无法创建,是因为某些字段过长无法建立索引,需要手动将字段长度改小一点。以上面的方式操作后,umami就能正常启动了。
umami控制台页面的默认登录账号为:admin 密码为:umami,登录成功后请尽快修改密码,按照下图的指示创建网站信息。
这里页面上限值了只能输入域名,因为我这是内网部署,部分页面不带域名,只有IP和端口,可以直接在表里面修改数据,表名:website
添加成功后在再次编辑该网站,里面有个跟踪代码的JS,引入前端工程即可。默认地址是绝对路径,因为实际情况是做了代理的,前端页面可能多个IP+端口都可以访问,这里引入的时候把前面的IP+端口去掉就可以了。