From c8c9d4209c943935e707532265214853dd182bff Mon Sep 17 00:00:00 2001 From: wanghe Date: Tue, 13 Aug 2024 13:56:49 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20InfluxDB=20(#1919)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/influxdb/2.7.9/data.yml | 45 +++++++++++++++++++++++++ apps/influxdb/2.7.9/docker-compose.yml | 23 +++++++++++++ apps/influxdb/README.md | 11 ++++++ apps/influxdb/data.yml | 19 +++++++++++ apps/influxdb/logo.png | Bin 0 -> 10034 bytes 5 files changed, 98 insertions(+) create mode 100644 apps/influxdb/2.7.9/data.yml create mode 100644 apps/influxdb/2.7.9/docker-compose.yml create mode 100644 apps/influxdb/README.md create mode 100755 apps/influxdb/data.yml create mode 100644 apps/influxdb/logo.png diff --git a/apps/influxdb/2.7.9/data.yml b/apps/influxdb/2.7.9/data.yml new file mode 100644 index 00000000..18738fac --- /dev/null +++ b/apps/influxdb/2.7.9/data.yml @@ -0,0 +1,45 @@ +additionalProperties: + formFields: + - default: 8086 + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + - default: influxdb + edit: true + envKey: DOCKER_INFLUXDB_INIT_USERNAME + labelEn: User + labelZh: 用户 + random: true + required: true + rule: paramCommon + type: text + - default: influxdb + edit: true + envKey: DOCKER_INFLUXDB_INIT_PASSWORD + labelEn: Password + labelZh: 密码 + random: true + required: true + rule: paramComplexity + type: password + - default: influxdb + edit: true + envKey: DOCKER_INFLUXDB_INIT_ORG + labelEn: Init Organization + labelZh: 初始化组织 + random: true + required: true + rule: paramCommon + type: text + - default: influxdb + edit: true + envKey: DOCKER_INFLUXDB_INIT_BUCKET + labelEn: Init Bucket + labelZh: 初始化存储桶 + random: true + required: true + rule: paramCommon + type: text diff --git a/apps/influxdb/2.7.9/docker-compose.yml b/apps/influxdb/2.7.9/docker-compose.yml new file mode 100644 index 00000000..5a734fa9 --- /dev/null +++ b/apps/influxdb/2.7.9/docker-compose.yml @@ -0,0 +1,23 @@ +services: + influxdb: + image: influxdb:2.7.9 + container_name: ${CONTAINER_NAME} + restart: always + ports: + - ${PANEL_APP_PORT_HTTP}:8086 + volumes: + - ./data/data:/var/lib/influxdb2 + - ./data/config:/etc/influxdb2 + environment: + - DOCKER_INFLUXDB_INIT_MODE=setup + - DOCKER_INFLUXDB_INIT_USERNAME=${DOCKER_INFLUXDB_INIT_USERNAME} + - DOCKER_INFLUXDB_INIT_PASSWORD=${DOCKER_INFLUXDB_INIT_PASSWORD} + - DOCKER_INFLUXDB_INIT_ORG=${DOCKER_INFLUXDB_INIT_ORG} + - DOCKER_INFLUXDB_INIT_BUCKET=${DOCKER_INFLUXDB_INIT_BUCKET} + networks: + - 1panel-network + labels: + createdBy: "Apps" +networks: + 1panel-network: + external: true \ No newline at end of file diff --git a/apps/influxdb/README.md b/apps/influxdb/README.md new file mode 100644 index 00000000..8994c7c7 --- /dev/null +++ b/apps/influxdb/README.md @@ -0,0 +1,11 @@ +# InfluxDB + +**InfluxDB** 是一个开源的时间序列数据库(TSDB),专为高性能的时间序列数据存储和查询设计。它通常用于处理监控数据、度量数据、事件日志等类型的时间序列数据。 + +## 主要特征 + +- **高性能**:优化了高吞吐量的数据写入和快速查询操作,适合处理大量时间序列数据。 +- **时间序列数据支持**:专为时间序列数据设计,提供高效的存储、查询和分析功能,支持时间函数和操作。 +- **灵活的数据模型**:使用度量(measurement)、字段(field)和标签(tag)进行数据存储,支持复杂的查询和过滤。 +- **SQL 类似查询语言**:提供 **InfluxQL** 或 **Flux** 查询语言,具有类似 SQL 的语法,用于高效的数据查询和操作。 +- **高可用性和横向扩展**:支持分布式架构和数据复制,增强系统的可靠性和伸缩性,适合大规模数据处理。 diff --git a/apps/influxdb/data.yml b/apps/influxdb/data.yml new file mode 100755 index 00000000..4f0c2011 --- /dev/null +++ b/apps/influxdb/data.yml @@ -0,0 +1,19 @@ +name: InfluxDB +tags: + - 数据库 +title: 用于指标、事件和实时分析的可扩展数据存储 +description: 用于指标、事件和实时分析的可扩展数据存储 +additionalProperties: + key: influxdb + name: InfluxDB + tags: + - Database + shortDescZh: 用于指标、事件和实时分析的可扩展数据存储 + shortDescEn: Scalable datastore for metrics, events, and real-time analytics + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://influxdata.com/ + github: https://github.com/influxdata/influxdb + document: https://docs.influxdata.com/ diff --git a/apps/influxdb/logo.png b/apps/influxdb/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b0b995a192f84f538e4edb1336cbc9ba55eea9ec GIT binary patch literal 10034 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ôsxW5F4TSYWE%yRoXn$>h^H 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 IM6N<$f{2xYl>h($ literal 0 KcmV+b0RR6000031