From 7343b8b1132ec18738c46cd4b0e0136b17044073 Mon Sep 17 00:00:00 2001
From: budou <1769794040@qq.com>
Date: Thu, 2 Nov 2023 16:33:02 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9EWuKongIM=E5=BA=94?=
=?UTF-8?q?=E7=94=A8=20(#525)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* feat: ✨提交WuKongIM应用
* docs: 更新文档
---
apps/wukongim/1.0.0/data.yml | 39 +++++++++++++++++++++++++
apps/wukongim/1.0.0/docker-compose.yml | 24 +++++++++++++++
apps/wukongim/README.md | 14 +++++++++
apps/wukongim/data.yml | 20 +++++++++++++
apps/wukongim/logo.png | Bin 0 -> 26517 bytes
5 files changed, 97 insertions(+)
create mode 100644 apps/wukongim/1.0.0/data.yml
create mode 100644 apps/wukongim/1.0.0/docker-compose.yml
create mode 100644 apps/wukongim/README.md
create mode 100644 apps/wukongim/data.yml
create mode 100644 apps/wukongim/logo.png
diff --git a/apps/wukongim/1.0.0/data.yml b/apps/wukongim/1.0.0/data.yml
new file mode 100644
index 000000000..bb62a2925
--- /dev/null
+++ b/apps/wukongim/1.0.0/data.yml
@@ -0,0 +1,39 @@
+additionalProperties:
+ formFields:
+ - default: ""
+ envKey: EXTERNAL_IP
+ labelEn: ipAddress
+ labelZh: 外部访问IP
+ required: true
+ type: text
+ - default: 5001
+ envKey: WK_PORT_API
+ labelEn: WuKongIM api port
+ labelZh: 悟空IM api端口
+ required: true
+ type: number
+ - default: 5100
+ envKey: WK_PORT_TCP
+ labelEn: WuKongIM tcp port
+ labelZh: 悟空IM TCP端口
+ required: true
+ type: number
+ - default: 5200
+ envKey: WK_PORT_WS
+ labelEn: WuKongIM ws port
+ labelZh: 悟空IM WS端口
+ required: true
+ type: number
+ - default: "5300"
+ envKey: WK_PORT_WEB_SERVER
+ labelEn: WuKongIM web port
+ labelZh: 悟空IM监控端口
+ required: true
+ type: number
+ - default: 5172
+ envKey: WK_PORT_DEMO_SERVER
+ labelEn: WuKongIM demo port
+ labelZh: 悟空IM demo端口
+ required: true
+ type: number
+
diff --git a/apps/wukongim/1.0.0/docker-compose.yml b/apps/wukongim/1.0.0/docker-compose.yml
new file mode 100644
index 000000000..cd58722d3
--- /dev/null
+++ b/apps/wukongim/1.0.0/docker-compose.yml
@@ -0,0 +1,24 @@
+version: '1.0.0'
+services:
+ wukongim:
+ image: registry.cn-shanghai.aliyuncs.com/wukongim/wukongim:latest
+ restart: always
+ ports:
+ - "${WK_PORT_API}:5001"
+ - "${WK_PORT_TCP}:5100"
+ - "${WK_PORT_WS}:5200"
+ - "${WK_PORT_WEB_SERVER}:5300"
+ - "${WK_PORT_DEMO_SERVER}:5172"
+ volumes:
+ - ./wukongim:/root/wukongim
+ environment:
+ - WK_MODE=release
+ - WK_EXTERNAL_IP=${EXTERNAL_IP}
+ - WK_CONVERSATION_ON=true
+ - WK_DATASOURCE_CHANNELINFOON=true
+ - WK_TOKENAUTHON=true
+ networks:
+ - 1panel-network
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/wukongim/README.md b/apps/wukongim/README.md
new file mode 100644
index 000000000..21e03496b
--- /dev/null
+++ b/apps/wukongim/README.md
@@ -0,0 +1,14 @@
+# 什么是悟空 IM
+
+高性能通用即时通讯服务,支持聊天应用,消息推送,物联网通讯,音视频信令,直播弹幕,客服系统,AI 通讯,即时社区等场景。
+
+## 特性
+
+悟空 IM 具备以下特性:
+
+- 0⃣️ **零依赖**:没有依赖任何第三方组件,部署简单,一条命令即可启动
+- 📚 **完全自研**:自研消息数据库,消息分区永久存储,自研二进制协议,支持自定义协议
+- 🔐 **安全**:消息通道和消息内容全程加密,防中间人攻击和窜改消息内容。
+- 🚀 **性能强劲**:性能强劲,MAC 笔记本单机测试 16w 多/秒的消息(包含存储)吞吐量,频道支持万人同时订阅。
+- 🧱 **扩展性强**:采用频道设计理念,目前支持群组频道,点对点频道,后续可以根据自己业务自定义频道可实现机器人频道,客服频道等等。
+- 🔗 **兼容性强**:同时无差别支持 tcp,websocket。
diff --git a/apps/wukongim/data.yml b/apps/wukongim/data.yml
new file mode 100644
index 000000000..bb89d4a45
--- /dev/null
+++ b/apps/wukongim/data.yml
@@ -0,0 +1,20 @@
+name: WuKongIM
+tags:
+ - Tool
+title: 让信息传递更简单
+type: 工具
+description: 让企业轻松拥有自己的即时通讯
+additionalProperties:
+ key: wukongim
+ name: WuKongIM
+ tags:
+ - Tool
+ shortDescZh: 让信息传递更简单
+ shortDescEn: Make messaging easier
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://githubim.com/
+ github: https://github.com/TangSengDaoDao/TangSengDaoDaoServer
+ document: https://githubim.com/
diff --git a/apps/wukongim/logo.png b/apps/wukongim/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..3ee5b050f2de10a3bb3436eb40976b1cf7baefa5
GIT binary patch
literal 26517
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