From 65ca63d2650c3f919bfe597812be65b111ea92dc Mon Sep 17 00:00:00 2001 From: arch3rPro Date: Tue, 26 Aug 2025 08:26:32 +0000 Subject: [PATCH] feat: add app Tianji --- apps/tianji/1.24.22/.env.sample | 11 ++++ apps/tianji/1.24.22/data.yml | 73 +++++++++++++++++++++++++ apps/tianji/1.24.22/docker-compose.yml | 19 +++++++ apps/tianji/README.md | 70 ++++++++++++++++++++++++ apps/tianji/README_en.md | 70 ++++++++++++++++++++++++ apps/tianji/data.yml | 26 +++++++++ apps/tianji/latest/.env.sample | 11 ++++ apps/tianji/latest/data.yml | 73 +++++++++++++++++++++++++ apps/tianji/latest/docker-compose.yml | 19 +++++++ apps/tianji/logo.png | Bin 0 -> 4850 bytes 10 files changed, 372 insertions(+) create mode 100644 apps/tianji/1.24.22/.env.sample create mode 100644 apps/tianji/1.24.22/data.yml create mode 100644 apps/tianji/1.24.22/docker-compose.yml create mode 100644 apps/tianji/README.md create mode 100644 apps/tianji/README_en.md create mode 100644 apps/tianji/data.yml create mode 100644 apps/tianji/latest/.env.sample create mode 100644 apps/tianji/latest/data.yml create mode 100644 apps/tianji/latest/docker-compose.yml create mode 100644 apps/tianji/logo.png diff --git a/apps/tianji/1.24.22/.env.sample b/apps/tianji/1.24.22/.env.sample new file mode 100644 index 0000000..fa47f3a --- /dev/null +++ b/apps/tianji/1.24.22/.env.sample @@ -0,0 +1,11 @@ +CONTAINER_NAME="tianji" +PANEL_APP_PORT_HTTP="40205" +ALLOW_OPENAPI="true" +ALLOW_REGISTER="false" +JWT_SECRET="any-random-text_fZpxzA" +PANEL_DB_HOST="postgresql" +PANEL_DB_HOST_NAME="postgresql" +PANEL_DB_NAME="tianji_5pz3w2" +PANEL_DB_PORT="5432" +PANEL_DB_USER="tianji_XA6H4c" +PANEL_DB_USER_PASSWORD="tianji_4X2sNe" diff --git a/apps/tianji/1.24.22/data.yml b/apps/tianji/1.24.22/data.yml new file mode 100644 index 0000000..2120606 --- /dev/null +++ b/apps/tianji/1.24.22/data.yml @@ -0,0 +1,73 @@ +additionalProperties: + formFields: + - default: 40205 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: PANEL_DB_HOST + key: postgresql + labelEn: Database Service + labelZh: 数据库服务 + required: true + type: service + - default: tianji + envKey: PANEL_DB_NAME + labelEn: Database Name + labelZh: 数据库名 + random: true + required: true + rule: paramCommon + type: text + - default: tianji + envKey: PANEL_DB_USER + labelEn: Database User + labelZh: 数据库用户 + random: true + required: true + rule: paramCommon + type: text + - default: tianji + envKey: PANEL_DB_USER_PASSWORD + labelEn: Database Password + labelZh: 数据库用户密码 + random: true + required: true + rule: paramComplexity + type: password + - default: any-random-text + edit: true + envKey: JWT_SECRET + labelEn: Secret + labelZh: 秘钥 + random: true + required: true + rule: paramComplexity + type: text + - default: "true" + envKey: ALLOW_OPENAPI + labelEn: Allow OpenAPI + labelZh: 是否开启OpenAPI + required: true + type: select + values: + - label: "True" + value: "true" + - label: "False" + value: "false" + - default: "false" + envKey: ALLOW_REGISTER + labelEn: Allow Register + labelZh: 是否允许注册 + required: true + type: select + values: + - label: "True" + value: "true" + - label: "False" + value: "false" diff --git a/apps/tianji/1.24.22/docker-compose.yml b/apps/tianji/1.24.22/docker-compose.yml new file mode 100644 index 0000000..6cc6584 --- /dev/null +++ b/apps/tianji/1.24.22/docker-compose.yml @@ -0,0 +1,19 @@ +services: + tianji: + container_name: ${CONTAINER_NAME} + restart: always + image: moonrailgun/tianji:1.24.22 + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:12345 + environment: + - DATABASE_URL=postgresql://${PANEL_DB_USER}:${PANEL_DB_USER_PASSWORD}@${PANEL_DB_HOST}:${PANEL_DB_PORT}/${PANEL_DB_NAME} + - JWT_SECRET=${JWT_SECRET} + - ALLOW_REGISTER=${ALLOW_REGISTER} + - ALLOW_OPENAPI=${ALLOW_OPENAPI} + labels: + createdBy: "Apps" +networks: + 1panel-network: + external: true diff --git a/apps/tianji/README.md b/apps/tianji/README.md new file mode 100644 index 0000000..b1f7d33 --- /dev/null +++ b/apps/tianji/README.md @@ -0,0 +1,70 @@ +# Tianji 介绍 + +## 简介 + +Tianji 是一款开源的 all-in-one 数据洞察中心,集成了网站分析、服务监控和服务器状态监控等功能。它为个人和企业提供了一个统一的平台来监控和分析各种数据,帮助用户更好地了解自己的数字资产状况。 + +![](https://cdn.jsdelivr.net/gh/xiaoY233/PicList@main/public/assets/tianji.png) + +![](https://img.shields.io/badge/Copyright-arch3rPro-ff9800?style=flat&logo=github&logoColor=white) + +## 主要特性 + +- **网站流量分析**:只需一段小于2KB的脚本即可监控网站的 PV/UV、在线时长、跳出率、访客设备使用情况、地理位置、访问来源等信息,可理解为自托管版的 Google Analytics。 +- **服务监控**:实时监控服务响应时间,支持 HTTP、TCP、Ping 等多种监控方式,甚至可以编写自定义脚本进行高级监控。 +- **服务状态页**:提供对外公开的服务状态页面,展示各项服务的运行状态,增强用户信任度。 +- **服务器状态监控**:类似 ServerStatus,可以监控服务器的 CPU、内存、网络流量、磁盘空间等实时状况。 +- **多种通知方式**:支持 100+ 种通知方式(由 Apprise 提供),包括邮件、Telegram、Server酱等。 +- **自定义仪表板**:支持可定制的 Dashboard 布局,满足不同用户的展示需求。 +- **主题支持**:支持亮色/暗色模式切换,保护用户视力。 +- **多语言支持**:内置英语、法语、德语、日语、俄语、中文等多种语言界面。 +- **开源免费**:基于开源协议,完全免费使用,支持自托管部署。 + +## 快速开始 + +### 默认账户 + +- **用户名**: `admin` +- **密码**: `admin` + +> ⚠️ **重要提醒**:首次登录后请立即修改默认密码以确保安全! + +### 访问方式 + +部署完成后,通过浏览器访问服务地址即可开始使用。首次使用时建议: + +1. 修改默认管理员密码 +2. 配置监控目标(网站、服务器等) +3. 设置通知渠道 +4. 自定义仪表板布局 + +## 核心功能详解 + +### 网站分析 + +- **轻量级追踪**:仅需嵌入小于2KB的JavaScript代码 +- **隐私友好**:数据完全由您控制,无第三方追踪 +- **丰富指标**:页面浏览量、独立访客、停留时间、跳出率等 +- **访客洞察**:设备类型、操作系统、浏览器、地理位置等 +- **来源分析**:访问来源、搜索关键词、外链分析等 + +### 服务监控 + +- **多协议支持**:HTTP/HTTPS、TCP、ICMP Ping 等 +- **自定义检查**:支持编写自定义监控脚本 +- **响应时间监控**:实时监控服务响应速度 +- **状态历史**:记录服务可用性历史数据 +- **告警机制**:服务异常时自动发送通知 + +### 服务器监控 + +- **系统资源**:CPU使用率、内存占用、磁盘空间 +- **网络状况**:实时网络流量监控 +- **进程管理**:监控关键进程运行状态 +- **历史数据**:保存监控历史,便于趋势分析 + +## 相关链接 + +- **官方网站**: [https://tianji.dev/](https://tianji.dev/) +- **GitHub 仓库**: [https://github.com/msgbyte/tianji](https://github.com/msgbyte/tianji) +- **官方文档**: [https://tianji.dev/docs/intro](https://tianji.dev/docs/intro) diff --git a/apps/tianji/README_en.md b/apps/tianji/README_en.md new file mode 100644 index 0000000..d8165f7 --- /dev/null +++ b/apps/tianji/README_en.md @@ -0,0 +1,70 @@ +# Tianji Introduction + +## Overview + +Tianji is an open-source all-in-one data insight center that integrates website analytics, service monitoring, and server status monitoring. It provides individuals and enterprises with a unified platform to monitor and analyze various data, helping users better understand their digital asset status. + +![](https://cdn.jsdelivr.net/gh/xiaoY233/PicList@main/public/assets/tianji.png) + +![](https://img.shields.io/badge/Copyright-arch3rPro-ff9800?style=flat&logo=github&logoColor=white) + +## Key Features + +- **Website Analytics**: Monitor website PV/UV, online duration, bounce rate, visitor device usage, geographic location, traffic sources and more with just a script less than 2KB. Think of it as a self-hosted Google Analytics. +- **Service Monitoring**: Real-time monitoring of service response times, supporting HTTP, TCP, Ping and other monitoring methods. You can even write custom scripts for advanced monitoring. +- **Service Status Page**: Provides a public status page for external access, displaying the operational status of various services to enhance user trust. +- **Server Status Monitoring**: Similar to ServerStatus, monitors real-time server conditions including CPU, memory, network traffic, disk space, etc. +- **Multiple Notification Methods**: Supports 100+ notification methods (powered by Apprise), including email, Telegram, ServerChan, and more. +- **Customizable Dashboard**: Supports customizable dashboard layouts to meet different users' display needs. +- **Theme Support**: Supports light/dark mode switching to protect user vision. +- **Multi-language Support**: Built-in support for English, French, German, Japanese, Russian, Chinese and other languages. +- **Open Source & Free**: Based on open source license, completely free to use, supports self-hosted deployment. + +## Quick Start + +### Default Account + +- **Username**: `admin` +- **Password**: `admin` + +> ⚠️ **Important Reminder**: Please change the default password immediately after first login to ensure security! + +### Access Method + +After deployment, access through a web browser to the service address to start using. For first-time use, it's recommended to: + +1. Change the default administrator password +2. Configure monitoring targets (websites, servers, etc.) +3. Set up notification channels +4. Customize dashboard layout + +## Core Features Details + +### Website Analytics + +- **Lightweight Tracking**: Only requires embedding JavaScript code less than 2KB +- **Privacy-Friendly**: Data is completely under your control, no third-party tracking +- **Rich Metrics**: Page views, unique visitors, dwell time, bounce rate, etc. +- **Visitor Insights**: Device type, operating system, browser, geographic location, etc. +- **Source Analysis**: Traffic sources, search keywords, referral analysis, etc. + +### Service Monitoring + +- **Multi-Protocol Support**: HTTP/HTTPS, TCP, ICMP Ping, etc. +- **Custom Checks**: Support for writing custom monitoring scripts +- **Response Time Monitoring**: Real-time monitoring of service response speed +- **Status History**: Records service availability historical data +- **Alert Mechanism**: Automatically sends notifications when services are abnormal + +### Server Monitoring + +- **System Resources**: CPU usage, memory consumption, disk space +- **Network Status**: Real-time network traffic monitoring +- **Process Management**: Monitor key process running status +- **Historical Data**: Save monitoring history for trend analysis + +## Related Links + +- **Official Website**: [https://tianji.dev/](https://tianji.dev/) +- **GitHub Repository**: [https://github.com/msgbyte/tianji](https://github.com/msgbyte/tianji) +- **Official Documentation**: [https://tianji.dev/docs/intro](https://tianji.dev/docs/intro) diff --git a/apps/tianji/data.yml b/apps/tianji/data.yml new file mode 100644 index 0000000..13013e2 --- /dev/null +++ b/apps/tianji/data.yml @@ -0,0 +1,26 @@ +name: Tianji +tags: + - 监控工具 +title: 开源 all-in-one 数据洞察中心 +description: Tianji 是一款开源的 all-in-one 数据洞察中心,集成网站分析、服务监控、服务器状态监控等功能 +additionalProperties: + key: tianji + name: Tianji + tags: + - Monitoring + shortDescZh: 开源 all-in-one 数据洞察中心 + shortDescEn: Open-source all-in-one data insight center + description: + en: Tianji is an open-source all-in-one data insight center that combines website analytics, uptime monitoring, and server status monitoring + zh: Tianji 是一款开源的 all-in-one 数据洞察中心,集成网站分析、服务监控、服务器状态监控等功能 + type: website + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://tianji.dev/ + github: https://github.com/msgbyte/tianji + document: https://tianji.dev/docs/intro + memoryRequired: 1024 + architectures: + - arm64 + - amd64 diff --git a/apps/tianji/latest/.env.sample b/apps/tianji/latest/.env.sample new file mode 100644 index 0000000..fa47f3a --- /dev/null +++ b/apps/tianji/latest/.env.sample @@ -0,0 +1,11 @@ +CONTAINER_NAME="tianji" +PANEL_APP_PORT_HTTP="40205" +ALLOW_OPENAPI="true" +ALLOW_REGISTER="false" +JWT_SECRET="any-random-text_fZpxzA" +PANEL_DB_HOST="postgresql" +PANEL_DB_HOST_NAME="postgresql" +PANEL_DB_NAME="tianji_5pz3w2" +PANEL_DB_PORT="5432" +PANEL_DB_USER="tianji_XA6H4c" +PANEL_DB_USER_PASSWORD="tianji_4X2sNe" diff --git a/apps/tianji/latest/data.yml b/apps/tianji/latest/data.yml new file mode 100644 index 0000000..2120606 --- /dev/null +++ b/apps/tianji/latest/data.yml @@ -0,0 +1,73 @@ +additionalProperties: + formFields: + - default: 40205 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: PANEL_DB_HOST + key: postgresql + labelEn: Database Service + labelZh: 数据库服务 + required: true + type: service + - default: tianji + envKey: PANEL_DB_NAME + labelEn: Database Name + labelZh: 数据库名 + random: true + required: true + rule: paramCommon + type: text + - default: tianji + envKey: PANEL_DB_USER + labelEn: Database User + labelZh: 数据库用户 + random: true + required: true + rule: paramCommon + type: text + - default: tianji + envKey: PANEL_DB_USER_PASSWORD + labelEn: Database Password + labelZh: 数据库用户密码 + random: true + required: true + rule: paramComplexity + type: password + - default: any-random-text + edit: true + envKey: JWT_SECRET + labelEn: Secret + labelZh: 秘钥 + random: true + required: true + rule: paramComplexity + type: text + - default: "true" + envKey: ALLOW_OPENAPI + labelEn: Allow OpenAPI + labelZh: 是否开启OpenAPI + required: true + type: select + values: + - label: "True" + value: "true" + - label: "False" + value: "false" + - default: "false" + envKey: ALLOW_REGISTER + labelEn: Allow Register + labelZh: 是否允许注册 + required: true + type: select + values: + - label: "True" + value: "true" + - label: "False" + value: "false" diff --git a/apps/tianji/latest/docker-compose.yml b/apps/tianji/latest/docker-compose.yml new file mode 100644 index 0000000..0086878 --- /dev/null +++ b/apps/tianji/latest/docker-compose.yml @@ -0,0 +1,19 @@ +services: + tianji: + container_name: ${CONTAINER_NAME} + restart: always + image: moonrailgun/tianji:latest + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:12345 + environment: + - DATABASE_URL=postgresql://${PANEL_DB_USER}:${PANEL_DB_USER_PASSWORD}@${PANEL_DB_HOST}:${PANEL_DB_PORT}/${PANEL_DB_NAME} + - JWT_SECRET=${JWT_SECRET} + - ALLOW_REGISTER=${ALLOW_REGISTER} + - ALLOW_OPENAPI=${ALLOW_OPENAPI} + labels: + createdBy: "Apps" +networks: + 1panel-network: + external: true diff --git a/apps/tianji/logo.png b/apps/tianji/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..db128c8baec50094d81526a82076c861d19a809a GIT binary patch literal 4850 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 LjCJa?9HRaMF)lLp literal 0 HcmV?d00001