共计 8119 个字符,预计需要花费 21 分钟才能阅读完成。
一、Umami 是什么
Umami 是一款简单易用、自托管的开源网站访问流量统计分析工具,Umami 不使用 Cookie,不跟踪用户,且所有收集的数据都会匿名化处理,符合 GDPR 政策,资源占用很低,虽然功能简单,但分析的数据内容很丰富。
二、如何搭建
本文基于 mysql 作为数据库搭建。
1. 情况一
目前有 mysql,且不想多创建一个 mysql。
1.1 创建数据库
CREATE DATABASE `umami` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';
1.2 导入初始化数据库
-- CreateTable | |
CREATE TABLE `account` ( | |
`user_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, | |
`username` VARCHAR(255) NOT NULL, | |
`password` VARCHAR(60) NOT NULL, | |
`is_admin` BOOLEAN NOT NULL DEFAULT false, | |
`created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0), | |
`updated_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0), | |
`account_uuid` VARCHAR(36) NOT NULL, | |
UNIQUE INDEX `account_username_key`(`username`), | |
UNIQUE INDEX `account_account_uuid_key`(`account_uuid`), | |
INDEX `account_account_uuid_idx`(`account_uuid`), | |
PRIMARY KEY (`user_id`) | |
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; | |
-- CreateTable | |
CREATE TABLE `event` ( | |
`event_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, | |
`website_id` INTEGER UNSIGNED NOT NULL, | |
`session_id` INTEGER UNSIGNED NOT NULL, | |
`created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0), | |
`url` VARCHAR(500) NOT NULL, | |
`event_name` VARCHAR(50) NOT NULL, | |
`event_uuid` VARCHAR(36) NOT NULL, | |
UNIQUE INDEX `event_event_uuid_key`(`event_uuid`), | |
INDEX `event_created_at_idx`(`created_at`), | |
INDEX `event_session_id_idx`(`session_id`), | |
INDEX `event_website_id_idx`(`website_id`), | |
INDEX `event_event_uuid_idx`(`event_uuid`), | |
PRIMARY KEY (`event_id`) | |
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; | |
-- CreateTable | |
CREATE TABLE `event_data` ( | |
`event_data_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, | |
`event_id` INTEGER UNSIGNED NOT NULL, | |
`event_data` JSON NOT NULL, | |
UNIQUE INDEX `event_data_event_id_key`(`event_id`), | |
PRIMARY KEY (`event_data_id`) | |
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; | |
-- CreateTable | |
CREATE TABLE `pageview` ( | |
`view_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, | |
`website_id` INTEGER UNSIGNED NOT NULL, | |
`session_id` INTEGER UNSIGNED NOT NULL, | |
`created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0), | |
`url` VARCHAR(500) NOT NULL, | |
`referrer` VARCHAR(500) NULL, | |
INDEX `pageview_created_at_idx`(`created_at`), | |
INDEX `pageview_session_id_idx`(`session_id`), | |
INDEX `pageview_website_id_created_at_idx`(`website_id`, `created_at`), | |
INDEX `pageview_website_id_idx`(`website_id`), | |
INDEX `pageview_website_id_session_id_created_at_idx`(`website_id`, `session_id`, `created_at`), | |
PRIMARY KEY (`view_id`) | |
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; | |
-- CreateTable | |
CREATE TABLE `session` ( | |
`session_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, | |
`session_uuid` VARCHAR(36) NOT NULL, | |
`website_id` INTEGER UNSIGNED NOT NULL, | |
`created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0), | |
`hostname` VARCHAR(100) NULL, | |
`browser` VARCHAR(20) NULL, | |
`os` VARCHAR(20) NULL, | |
`device` VARCHAR(20) NULL, | |
`screen` VARCHAR(11) NULL, | |
`language` VARCHAR(35) NULL, | |
`country` CHAR(2) NULL, | |
UNIQUE INDEX `session_session_uuid_key`(`session_uuid`), | |
INDEX `session_created_at_idx`(`created_at`), | |
INDEX `session_website_id_idx`(`website_id`), | |
INDEX `session_session_uuid_idx`(`session_uuid`), | |
PRIMARY KEY (`session_id`) | |
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; | |
-- CreateTable | |
CREATE TABLE `website` ( | |
`website_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, | |
`website_uuid` VARCHAR(36) NOT NULL, | |
`user_id` INTEGER UNSIGNED NOT NULL, | |
`name` VARCHAR(100) NOT NULL, | |
`domain` VARCHAR(500) NULL, | |
`share_id` VARCHAR(64) NULL, | |
`created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0), | |
UNIQUE INDEX `website_website_uuid_key`(`website_uuid`), | |
UNIQUE INDEX `website_share_id_key`(`share_id`), | |
INDEX `website_user_id_idx`(`user_id`), | |
INDEX `website_website_uuid_idx`(`website_uuid`), | |
PRIMARY KEY (`website_id`) | |
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; | |
-- CreateAdminUser | |
INSERT INTO account (username, password, is_admin, account_uuid) values ('admin', '$2b$10$BUli0c.muyCW1ErNJc3jL.vFRFtFJWrT8/GcR4A.sUdCznaXiqFXa', true, uuid()); |
1.3 运行 umami
docker run -d \ | |
--name umami \ | |
-p 3000:3000 \ | |
-e DATABASE_URL=mysql://<username>:<password>@<host>:3306/umami \ | |
-e DATABASE_TYPE=mysql \ | |
-e HASH_SALT=replace-me-with-a-random-string \ | |
--restart always \ | |
hausen1012/umami:mysql-latest |
其中上面的
1.4 访问
默认账号密码:admin/umami
2. 情况二
直接使用 docker-compose 运行
2.1 配置数据库初始化语句
mkdir -p /home/docker/mysql/init && \ | |
vim /home/docker/mysql/init/umami.sql |
将下面的 sql 语句复制进去。
CREATE DATABASE `umami` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci'; | |
USE umami; | |
-- CreateTable | |
CREATE TABLE `account` ( | |
`user_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, | |
`username` VARCHAR(255) NOT NULL, | |
`password` VARCHAR(60) NOT NULL, | |
`is_admin` BOOLEAN NOT NULL DEFAULT false, | |
`created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0), | |
`updated_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0), | |
`account_uuid` VARCHAR(36) NOT NULL, | |
UNIQUE INDEX `account_username_key`(`username`), | |
UNIQUE INDEX `account_account_uuid_key`(`account_uuid`), | |
INDEX `account_account_uuid_idx`(`account_uuid`), | |
PRIMARY KEY (`user_id`) | |
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; | |
-- CreateTable | |
CREATE TABLE `event` ( | |
`event_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, | |
`website_id` INTEGER UNSIGNED NOT NULL, | |
`session_id` INTEGER UNSIGNED NOT NULL, | |
`created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0), | |
`url` VARCHAR(500) NOT NULL, | |
`event_name` VARCHAR(50) NOT NULL, | |
`event_uuid` VARCHAR(36) NOT NULL, | |
UNIQUE INDEX `event_event_uuid_key`(`event_uuid`), | |
INDEX `event_created_at_idx`(`created_at`), | |
INDEX `event_session_id_idx`(`session_id`), | |
INDEX `event_website_id_idx`(`website_id`), | |
INDEX `event_event_uuid_idx`(`event_uuid`), | |
PRIMARY KEY (`event_id`) | |
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; | |
-- CreateTable | |
CREATE TABLE `event_data` ( | |
`event_data_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, | |
`event_id` INTEGER UNSIGNED NOT NULL, | |
`event_data` JSON NOT NULL, | |
UNIQUE INDEX `event_data_event_id_key`(`event_id`), | |
PRIMARY KEY (`event_data_id`) | |
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; | |
-- CreateTable | |
CREATE TABLE `pageview` ( | |
`view_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, | |
`website_id` INTEGER UNSIGNED NOT NULL, | |
`session_id` INTEGER UNSIGNED NOT NULL, | |
`created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0), | |
`url` VARCHAR(500) NOT NULL, | |
`referrer` VARCHAR(500) NULL, | |
INDEX `pageview_created_at_idx`(`created_at`), | |
INDEX `pageview_session_id_idx`(`session_id`), | |
INDEX `pageview_website_id_created_at_idx`(`website_id`, `created_at`), | |
INDEX `pageview_website_id_idx`(`website_id`), | |
INDEX `pageview_website_id_session_id_created_at_idx`(`website_id`, `session_id`, `created_at`), | |
PRIMARY KEY (`view_id`) | |
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; | |
-- CreateTable | |
CREATE TABLE `session` ( | |
`session_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, | |
`session_uuid` VARCHAR(36) NOT NULL, | |
`website_id` INTEGER UNSIGNED NOT NULL, | |
`created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0), | |
`hostname` VARCHAR(100) NULL, | |
`browser` VARCHAR(20) NULL, | |
`os` VARCHAR(20) NULL, | |
`device` VARCHAR(20) NULL, | |
`screen` VARCHAR(11) NULL, | |
`language` VARCHAR(35) NULL, | |
`country` CHAR(2) NULL, | |
UNIQUE INDEX `session_session_uuid_key`(`session_uuid`), | |
INDEX `session_created_at_idx`(`created_at`), | |
INDEX `session_website_id_idx`(`website_id`), | |
INDEX `session_session_uuid_idx`(`session_uuid`), | |
PRIMARY KEY (`session_id`) | |
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; | |
-- CreateTable | |
CREATE TABLE `website` ( | |
`website_id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, | |
`website_uuid` VARCHAR(36) NOT NULL, | |
`user_id` INTEGER UNSIGNED NOT NULL, | |
`name` VARCHAR(100) NOT NULL, | |
`domain` VARCHAR(500) NULL, | |
`share_id` VARCHAR(64) NULL, | |
`created_at` TIMESTAMP(0) NULL DEFAULT CURRENT_TIMESTAMP(0), | |
UNIQUE INDEX `website_website_uuid_key`(`website_uuid`), | |
UNIQUE INDEX `website_share_id_key`(`share_id`), | |
INDEX `website_user_id_idx`(`user_id`), | |
INDEX `website_website_uuid_idx`(`website_uuid`), | |
PRIMARY KEY (`website_id`) | |
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; | |
-- CreateAdminUser | |
INSERT INTO account (username, password, is_admin, account_uuid) values ('admin', '$2b$10$BUli0c.muyCW1ErNJc3jL.vFRFtFJWrT8/GcR4A.sUdCznaXiqFXa', true, uuid()); |
2.2 docker-compose.yaml
mkdir umami && cd umami && \ | |
touch docker-compose.yaml && \ | |
cat > docker-compose.yaml <<EOF | |
version: '3.1' | |
services: | |
umami: | |
image: hausen1012/umami:mysql-latest | |
container_name: umami | |
restart: always | |
ports: | |
- 3000:3000 | |
environment: | |
DATABASE_URL: mysql://root:123456@mysql:3306/umami | |
DATABASE_TYPE: mysql | |
HASH_SALT: replace-me-with-a-random-string | |
depends_on: | |
- mysql | |
mysql: | |
image: mysql:8.0.26 | |
container_name: mysql | |
restart: always | |
ports: | |
- 3306:3306 | |
environment: | |
MYSQL_ROOT_PASSWORD: 123456 | |
volumes: | |
- /home/docker/mysql/data:/var/lib/mysql | |
- /home/docker/mysql/init:/docker-entrypoint-initdb.d | |
EOF |
2.3 启动
docker-compose up -d
2.4 访问
默认账号密码:admin/umami
三、搭建效果
可以看到,收集的数据很丰富。
提醒:本文发布于809天前,文中所关联的信息可能已发生改变,请知悉!
AD:【腾讯云服务器大降价】2核4G 222元/3年 1核2G 38元/年
正文完