feat: add tailchat (#89)

Co-authored-by: zhengkunwang223 <31820853+zhengkunwang223@users.noreply.github.com>
This commit is contained in:
moonrailgun 2023-05-15 14:54:41 +08:00 committed by GitHub
parent 5600b1def0
commit d7e05406b7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 280 additions and 7 deletions

View File

@ -260,7 +260,7 @@
"github": "https://github.com/requarks/wiki",
"document": "https://docs.requarks.io/"
},
{
{
"key": "uptime-kuma",
"name": "Uptime Kuma",
"tags": ["Tool"],
@ -333,7 +333,7 @@
"github": "https://github.com/php/php-src",
"document": "https://www.php.net/docs.php"
},
{
{
"key": "gitea",
"name": "Gitea",
"tags": ["CI/CD"],
@ -347,7 +347,7 @@
"github": "https://github.com/go-gitea/gitea",
"document": "https://docs.gitea.io/"
},
{
{
"key": "qBittorrent",
"name": "qBittorrent",
"tags": ["Tool"],
@ -361,7 +361,7 @@
"github": "https://github.com/qbittorrent/qBittorrent",
"document": "http://wiki.qbittorrent.org/"
},
{
{
"key": "jellyfin",
"name": "Jellyfin",
"tags": ["Tool"],
@ -375,7 +375,7 @@
"github": "https://github.com/jellyfin/jellyfin",
"document": "https://jellyfin.org/docs/"
},
{
{
"key": "alist",
"name": "alist",
"tags": ["Tool"],
@ -389,7 +389,7 @@
"github": "https://github.com/alist-org/alist",
"document": "https://alist.nn.ci/zh/"
},
{
{
"key": "watchtower",
"name": "watchtower",
"tags": ["Tool"],
@ -403,7 +403,7 @@
"github": "https://github.com/containrrr/watchtower",
"document": "https://containrrr.dev/watchtower/"
},
{
{
"key": "flarum",
"name": "flarum",
"tags": ["WebSite"],
@ -431,6 +431,20 @@
"github": "https://github.com/xiahao90/adminer",
"document": "https://github.com/xiahao90/adminer"
},
{
"key": "tailchat",
"name": "Tailchat",
"tags": ["WebSite"],
"versions": ["1.7.3"],
"shortDescZh": "在你自己工作区的下一代noIM应用",
"shortDescEn": "The next-generation noIM Application in your own workspace",
"type": "website",
"limit": 1,
"crossVersionUpdate": true,
"website": "https://tailchat.msgbyte.com/",
"github": "https://github.com/msgbyte/tailchat",
"document": "https://tailchat.msgbyte.com/docs/intro"
},
{
"key": "nps",
"name": "nps",

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

View File

@ -0,0 +1,53 @@
# 关于 1panel 安装
本应用不包含开放平台OAuth相关能力与Admin管理平台
如需要相关能力需要另行安装.
# 本应用介绍
官方网站: [https://tailchat.msgbyte.com/](https://tailchat.msgbyte.com/)
Github: [https://github.com/msgbyte/tailchat](https://github.com/msgbyte/tailchat)
![tailchat](https://socialify.git.ci/msgbyte/tailchat/image?description=1&font=Inter&forks=1&issues=1&language=1&logo=https%3A%2F%2Favatars.githubusercontent.com%2Fu%2F86033898%3Fs%3D200%26v%3D4&name=1&owner=1&pattern=Circuit%20Board&stargazers=1&theme=Light)
## 在您自己工作区中的下一代 noIM 应用程序
### 不仅仅是另一个 `Slack`, `Discord`, `Rocket.Chat`....
如果您对`noIM`的概念感兴趣,欢迎阅读我的博客:
- [是时候正式步入noIM的时代了](https://tailchat.msgbyte.com/zh-Hans/blog/2023/03/01/the-era-of-noIM)
官方文档: [https://tailchat.msgbyte.com/](https://tailchat.msgbyte.com/)
**Nightly版** 在线体验: [https://nightly.paw.msgbyte.com/](https://nightly.paw.msgbyte.com/)
> Nightly版 为自动编译版本, 即每次提交代码都会自动编译。
> 不保证数据的可靠性与稳定性
## 动机
目前现有的IM应用都仅仅把目光局限在聊天本身而IM天然作为一个多人协作方式在我看来应当能够承担更多的职责将外部的应用以IM为转发方式形成自己独特的工作流。
因此,我提出了 `noIM` 的观点,意味着 **Not only IM**。而是设计了以IM为中心第三方应用为增强功能中间以插件系统作为胶水连接层的个人/团队高度自定义的应用平台。
为此,将功能进行抽象,并且花费了大量时间设计底层的机制,诞生了 `Tailchat` 这样的一个从底层设计之初就为了拓展而存在的即时通讯应用。通过`Tailchat`的插件系统,开发者可以很轻松的将喜欢的应用以一种非常自然的方式作为`Tailchat`的一部分。与传统的类似如`Slack`的集成方式不同的是,`Tailchat`的集成更加自由,就仿佛天然就是一个原生的功能一般。
## 特性
- 注重隐私,只有被邀请的成员才能加入群组
- 防止陌生人,只有通过昵称+一串随机的数字才能添加好友
- 二维的群组空间,通过频道来分割不同的话题
- 高度自定义的群组空间, 通过分组和拖拽来创建独创的群组空间。同时可以通过更多的插件来增加更多的能力
- 可以严谨,也可以乐趣。通过插件的组合可以创造用于不同场景的 Tailchat。可以是面向娱乐也可以是面向企业
- 后端微服务架构,已经为大规模部署做好了准备。不用担心用户量大了以后怎么办
## 性能与拓展
`Tailchat` 是一个基于 **React** + **Typescript** 的现代开源 noIM 应用程序
前端微内核架构+后端微服务架构,`Tailchat` 已经为集群化部署做好了准备。
前端通过插件机制为应用赋能,对于 `Tailchat` 的二次开发来说非常简单且易用。

View File

@ -0,0 +1,175 @@
{
"formFields": [
{
"type": "number",
"labelZh": "端口",
"labelEn": "Port",
"required": true,
"default": 11000,
"rule": "paramPort",
"envKey": "PANEL_APP_PORT_HTTP",
"edit": true
},
{
"type": "service",
"key": "redis",
"labelZh": "缓存服务服务",
"labelEn": "Redis Service",
"required": true,
"default": "",
"envKey": "REDIS_HOST",
"edit": true
},
{
"type": "number",
"labelZh": "缓存服务服务端口",
"labelEn": "Redis Service Port",
"required": true,
"default": "6379",
"envKey": "REDIS_PORT",
"rule": "paramPort",
"edit": true
},
{
"type": "password",
"labelZh": "缓存服务服务密码",
"labelEn": "Redis Service Password",
"required": true,
"default": "",
"rule": "paramCommon",
"envKey": "REDIS_PASS",
"edit": true
},
{
"type": "service",
"key": "mongodb",
"labelZh": "数据库服务",
"labelEn": "Database Service",
"required": true,
"default": "",
"envKey": "MONGO_HOST",
"edit": true
},
{
"type": "number",
"labelZh": "数据库服务端口",
"labelEn": "Database Service Port",
"required": true,
"default": "27017",
"envKey": "MONGO_PORT",
"rule": "paramPort",
"edit": true
},
{
"type": "text",
"labelZh": "数据库名",
"labelEn": "Database Name",
"required": true,
"default": "tailchat",
"rule": "paramCommon",
"envKey": "MONGO_DB",
"edit": true
},
{
"type": "text",
"labelZh": "数据库用户名",
"labelEn": "Database User Name",
"required": true,
"default": "",
"rule": "paramCommon",
"envKey": "MONGO_USER",
"edit": true
},
{
"type": "password",
"labelZh": "数据库密码",
"labelEn": "Database User Password",
"required": true,
"default": "",
"rule": "paramCommon",
"envKey": "MONGO_PASS",
"edit": true
},
{
"type": "service",
"key": "minio",
"labelZh": "文件存储服务",
"labelEn": "Storage Service",
"required": true,
"default": "",
"envKey": "MINIO_HOST",
"edit": true
},
{
"type": "number",
"labelZh": "文件存储服务API端口",
"labelEn": "Storage Service Port",
"required": true,
"default": "9001",
"envKey": "MINIO_PORT",
"rule": "paramPort",
"edit": true
},
{
"type": "text",
"labelZh": "文件存储服务用户名",
"labelEn": "User",
"required": true,
"default": "",
"rule": "paramCommon",
"envKey": "MINIO_USER",
"edit": true
},
{
"type": "password",
"labelZh": "文件存储服务密码",
"labelEn": "User",
"required": true,
"default": "",
"rule": "paramComplexity",
"envKey": "MINIO_PASS",
"edit": true
},
{
"type": "text",
"labelZh": "秘钥",
"labelEn": "Secret",
"required": true,
"default": "any-random-text",
"random": true,
"rule": "paramExtUrl",
"envKey": "SECRET",
"edit": true
},
{
"type": "text",
"labelZh": "外部访问地址",
"labelEn": "External URL",
"required": true,
"default": "http://localhost:11000",
"rule": "paramExtUrl",
"envKey": "API_URL",
"edit": true
},
{
"type": "text",
"labelZh": "邮件服务发送人",
"labelEn": "SMTP Sender",
"required": false,
"default": "",
"rule": "paramExtUrl",
"envKey": "SMTP_SENDER",
"edit": true
},
{
"type": "text",
"labelZh": "邮件服务URI",
"labelEn": "SMTP Sender",
"required": false,
"default": "",
"rule": "paramExtUrl",
"envKey": "SMTP_URI",
"edit": true
}
]
}

View File

@ -0,0 +1,31 @@
version: "3"
services:
tailchat:
container_name: ${CONTAINER_NAME}
restart: unless-stopped
image: "moonrailgun/tailchat:1.7.3"
networks:
- 1panel-network
environment:
- SERVICEDIR=services,plugins
- LOGGER=true
- LOGLEVEL=info
- PORT=11000
- REDIS_URL=redis://:${REDIS_PASS}@${REDIS_HOST}:${REDIS_PORT}
- TRANSPORTER=redis://:${REDIS_PASS}@${REDIS_HOST}:${REDIS_PORT}
- MONGO_URL=mongodb://${MONGO_USER}:${MONGO_PASS}@${MONGO_HOST}:${MONGO_PORT}/${MONGO_DB}?authSource=admin
- MINIO_URL=${MINIO_HOST}:${MINIO_PORT}
- MINIO_USER=${MINIO_USER}
- MINIO_PASS=${MINIO_PASS}
- SMTP_SENDER=${SMTP_SENDER}
- SMTP_URI=${SMTP_URI}
- SECRET=${SECRET}
- API_URL=${API_URL}
ports:
- "${PANEL_APP_PORT_HTTP}:11000"
labels:
createdBy: "Apps"
networks:
1panel-network:
external: true