diff --git a/apps/list.json b/apps/list.json index ae554fd9..21f0184b 100644 --- a/apps/list.json +++ b/apps/list.json @@ -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", diff --git a/apps/tailchat/metadata/logo.png b/apps/tailchat/metadata/logo.png new file mode 100644 index 00000000..55c5ab6c Binary files /dev/null and b/apps/tailchat/metadata/logo.png differ diff --git a/apps/tailchat/versions/1.7.3/README.md b/apps/tailchat/versions/1.7.3/README.md new file mode 100644 index 00000000..cce59ca0 --- /dev/null +++ b/apps/tailchat/versions/1.7.3/README.md @@ -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` 的二次开发来说非常简单且易用。 diff --git a/apps/tailchat/versions/1.7.3/config.json b/apps/tailchat/versions/1.7.3/config.json new file mode 100644 index 00000000..9f020e7a --- /dev/null +++ b/apps/tailchat/versions/1.7.3/config.json @@ -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 + } + ] +} diff --git a/apps/tailchat/versions/1.7.3/docker-compose.yml b/apps/tailchat/versions/1.7.3/docker-compose.yml new file mode 100644 index 00000000..32a8d368 --- /dev/null +++ b/apps/tailchat/versions/1.7.3/docker-compose.yml @@ -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