From f8fa0c6eac7e18c35d51b90f6b58f0917c4b807f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=8C=E6=A3=AE?= Date: Wed, 31 Jul 2024 12:50:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E5=8C=96=20Umami=20=E4=B8=8D=E5=90=8C?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 萌森 --- apps/umami-mysql/2.12.1/data.yml | 109 +++++++++++++++++++ apps/umami-mysql/2.12.1/docker-compose.yml | 25 +++++ apps/umami-mysql/2.12.1/scripts/init.sh | 15 +++ apps/umami-mysql/2.12.1/scripts/uninstall.sh | 10 ++ apps/umami-mysql/2.12.1/scripts/upgrade.sh | 15 +++ apps/umami-mysql/README.md | 39 +++++++ apps/umami-mysql/data.yml | 20 ++++ apps/umami-mysql/logo.png | Bin 0 -> 9458 bytes apps/umami-pg/2.12.1/data.yml | 105 ++++++++++++++++++ apps/umami-pg/2.12.1/docker-compose.yml | 25 +++++ apps/umami-pg/2.12.1/scripts/init.sh | 15 +++ apps/umami-pg/2.12.1/scripts/uninstall.sh | 10 ++ apps/umami-pg/2.12.1/scripts/upgrade.sh | 15 +++ apps/umami-pg/README.md | 39 +++++++ apps/umami-pg/data.yml | 20 ++++ apps/umami-pg/logo.png | Bin 0 -> 9458 bytes 16 files changed, 462 insertions(+) create mode 100644 apps/umami-mysql/2.12.1/data.yml create mode 100644 apps/umami-mysql/2.12.1/docker-compose.yml create mode 100644 apps/umami-mysql/2.12.1/scripts/init.sh create mode 100644 apps/umami-mysql/2.12.1/scripts/uninstall.sh create mode 100644 apps/umami-mysql/2.12.1/scripts/upgrade.sh create mode 100644 apps/umami-mysql/README.md create mode 100644 apps/umami-mysql/data.yml create mode 100644 apps/umami-mysql/logo.png create mode 100644 apps/umami-pg/2.12.1/data.yml create mode 100644 apps/umami-pg/2.12.1/docker-compose.yml create mode 100644 apps/umami-pg/2.12.1/scripts/init.sh create mode 100644 apps/umami-pg/2.12.1/scripts/uninstall.sh create mode 100644 apps/umami-pg/2.12.1/scripts/upgrade.sh create mode 100644 apps/umami-pg/README.md create mode 100644 apps/umami-pg/data.yml create mode 100644 apps/umami-pg/logo.png diff --git a/apps/umami-mysql/2.12.1/data.yml b/apps/umami-mysql/2.12.1/data.yml new file mode 100644 index 000000000..ba9159ca6 --- /dev/null +++ b/apps/umami-mysql/2.12.1/data.yml @@ -0,0 +1,109 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: postgresql + edit: true + envKey: PANEL_DB_TYPE + labelZh: 数据库 服务 (前置检查) + labelEn: Database Service (Pre-check) + required: true + type: apps + values: + - label: MySQL + value: mysql + - label: MariaDB + value: mariadb + - label: Percona + value: percona + - default: "/home/umami" + edit: true + envKey: UMAMI_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 连接端口 + labelEn: Connection Port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: APP_SECRET + labelZh: 应用密钥 + labelEn: Application Secret + random: true + required: false + rule: paramComplexity + type: password + - default: "/" + edit: true + envKey: BASE_PATH + labelZh: 基础路径 + labelEn: Base Path + required: true + type: text + - default: "" + edit: true + envKey: ALLOWED_FRAME_URLS + labelZh: 允许的 frame 地址 + labelEn: Allowed frame urls + required: false + type: text + - default: "0" + edit: true + envKey: DISABLE_BOT_CHECK + labelZh: 禁用机器人检测 + labelEn: Disable bot detection + required: true + type: select + values: + - label: 开启 + value: "1" + - label: 关闭 + value: "0" + - default: "127.0.0.1" + edit: true + envKey: DB_HOSTNAME + labelZh: 数据库 主机地址 + labelEn: Database Host + required: true + type: text + - default: 3306 + edit: true + envKey: DB_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "umami" + edit: true + envKey: DB_USERNAME + labelZh: 数据库 用户名 + labelEn: Database User + required: true + type: text + - default: "" + edit: true + envKey: DB_PASSWORD + labelEn: Database Password + labelZh: 数据库 密码 + random: true + required: true + rule: paramComplexity + type: password + - default: "umami" + edit: true + envKey: DB_DATABASE_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + type: text diff --git a/apps/umami-mysql/2.12.1/docker-compose.yml b/apps/umami-mysql/2.12.1/docker-compose.yml new file mode 100644 index 000000000..ff2a97f56 --- /dev/null +++ b/apps/umami-mysql/2.12.1/docker-compose.yml @@ -0,0 +1,25 @@ +version: "3.8" + +networks: + 1panel-network: + external: true + +services: + umami: + image: ghcr.io/umami-software/umami:mysql-v2.12.1 + container_name: ${CONTAINER_NAME} + labels: + createdBy: "Apps" + restart: always + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + env_file: + - /etc/1panel/envs/global.env + - ${ENV_FILE:-/etc/1panel/envs/default.env} + environment: + - DISABLE_TELEMETRY = 1 + - REMOVE_TRAILING_SLASH = 1 + - DATABASE_TYPE=mysql + - DATABASE_URL=mysql://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOSTNAME}:${DB_PORT}/${DB_DATABASE_NAME} diff --git a/apps/umami-mysql/2.12.1/scripts/init.sh b/apps/umami-mysql/2.12.1/scripts/init.sh new file mode 100644 index 000000000..77b849120 --- /dev/null +++ b/apps/umami-mysql/2.12.1/scripts/init.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/umami-mysql/2.12.1/scripts/uninstall.sh b/apps/umami-mysql/2.12.1/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/apps/umami-mysql/2.12.1/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/umami-mysql/2.12.1/scripts/upgrade.sh b/apps/umami-mysql/2.12.1/scripts/upgrade.sh new file mode 100644 index 000000000..77b849120 --- /dev/null +++ b/apps/umami-mysql/2.12.1/scripts/upgrade.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/umami-mysql/README.md b/apps/umami-mysql/README.md new file mode 100644 index 000000000..715db26de --- /dev/null +++ b/apps/umami-mysql/README.md @@ -0,0 +1,39 @@ +# Umami MySQL版 + +为速度和效率而构建的网站分析 + +Umami 网站分析提供您实时做出决策所需的数据。 + +![Umami](https://file.lifebus.top/imgs/umami_cover.jpg) + +## 简介 + +Umami 让您轻松分析数据 + ++ 便于使用 + +Umami 功能强大而简单,易于使用和理解,不需要复杂的设置或标签配置。 + ++ UTM 和自定义事件 + +Umami 会自动理解带有 UTM 参数的链接,并让您根据 UTM 查看和过滤您的网站数据。此外,您还可以跟踪网站上的任何事件,例如按钮点击、表单提交、购买、新闻通讯注册等。 + ++ 没有 Cookie 横幅 + +所有数据均经过 Umami 匿名处理,并且不会收集您网站用户的任何个人信息。您无需选择加入 Cookie +横幅即可跟踪网站的性能,从而为您的用户提供更好、更值得信赖的体验。 +默认情况下,Umami 符合 GDPRP 和 CCPA。 + +## 环境准备 + ++ 数据库支持 + + `MySQL` 版本:`5.7+` + + `PostgreSQL` 版本:`12.14+` + +## 安装说明 + +> 默认管理员帐户 +> +> 用户名: admin +> +> 密码: umami diff --git a/apps/umami-mysql/data.yml b/apps/umami-mysql/data.yml new file mode 100644 index 000000000..2a9c7704a --- /dev/null +++ b/apps/umami-mysql/data.yml @@ -0,0 +1,20 @@ +name: Umami MySQL版 +title: 为速度和效率而构建的网站分析 +description: 为速度和效率而构建的网站分析 +additionalProperties: + key: umami-mysql + name: Umami MySQL版 + tags: + - WebSite + - Database + - Middleware + - Runtime + - Local + shortDescZh: 为速度和效率而构建的网站分析 + shortDescEn: A website analytics tool that is built for speed and efficiency + type: website + crossVersionUpdate: true + limit: 0 + website: https://umami.is/ + github: https://github.com/umami-software/umami/ + document: https://umami.is/docs/ diff --git a/apps/umami-mysql/logo.png b/apps/umami-mysql/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9ede937a0a16fab795ef4eef0c5656e4563d78e5 GIT binary patch literal 9458 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 .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/umami-pg/2.12.1/scripts/uninstall.sh b/apps/umami-pg/2.12.1/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/apps/umami-pg/2.12.1/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/umami-pg/2.12.1/scripts/upgrade.sh b/apps/umami-pg/2.12.1/scripts/upgrade.sh new file mode 100644 index 000000000..77b849120 --- /dev/null +++ b/apps/umami-pg/2.12.1/scripts/upgrade.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/umami-pg/README.md b/apps/umami-pg/README.md new file mode 100644 index 000000000..c1ce87aca --- /dev/null +++ b/apps/umami-pg/README.md @@ -0,0 +1,39 @@ +# Umami PostgreSQL版 + +为速度和效率而构建的网站分析 + +Umami 网站分析提供您实时做出决策所需的数据。 + +![Umami](https://file.lifebus.top/imgs/umami_cover.jpg) + +## 简介 + +Umami 让您轻松分析数据 + ++ 便于使用 + +Umami 功能强大而简单,易于使用和理解,不需要复杂的设置或标签配置。 + ++ UTM 和自定义事件 + +Umami 会自动理解带有 UTM 参数的链接,并让您根据 UTM 查看和过滤您的网站数据。此外,您还可以跟踪网站上的任何事件,例如按钮点击、表单提交、购买、新闻通讯注册等。 + ++ 没有 Cookie 横幅 + +所有数据均经过 Umami 匿名处理,并且不会收集您网站用户的任何个人信息。您无需选择加入 Cookie +横幅即可跟踪网站的性能,从而为您的用户提供更好、更值得信赖的体验。 +默认情况下,Umami 符合 GDPRP 和 CCPA。 + +## 环境准备 + ++ 数据库支持 + + `MySQL` 版本:`5.7+` + + `PostgreSQL` 版本:`12.14+` + +## 安装说明 + +> 默认管理员帐户 +> +> 用户名: admin +> +> 密码: umami diff --git a/apps/umami-pg/data.yml b/apps/umami-pg/data.yml new file mode 100644 index 000000000..0ca890577 --- /dev/null +++ b/apps/umami-pg/data.yml @@ -0,0 +1,20 @@ +name: Umami PostgreSQL版 +title: 为速度和效率而构建的网站分析 +description: 为速度和效率而构建的网站分析 +additionalProperties: + key: umami-pg + name: Umami PostgreSQL版 + tags: + - WebSite + - Database + - Middleware + - Runtime + - Local + shortDescZh: 为速度和效率而构建的网站分析 + shortDescEn: A website analytics tool that is built for speed and efficiency + type: website + crossVersionUpdate: true + limit: 0 + website: https://umami.is/ + github: https://github.com/umami-software/umami/ + document: https://umami.is/docs/ diff --git a/apps/umami-pg/logo.png b/apps/umami-pg/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9ede937a0a16fab795ef4eef0c5656e4563d78e5 GIT binary patch literal 9458 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