【实用Docker项目】插件化易拓展的开源即时聊天应用——Tailchat
本文最后更新于 2024-05-19,
若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益, 请联系我 删除。
本站只有Telegram群组为唯一交流群组, 点击加入
文章内容有误?申请成为本站文章修订者或作者? 向站长提出申请
功能
-
注重隐私,只有被邀请的成员才能加入群组
-
防止陌生人,只有通过昵称+一串随机的数字才能添加好友
-
二维的群组空间,通过频道来分割不同的话题
-
高度自定义的群组空间, 通过分组和拖拽来创建独创的群组空间。同时可以通过更多的插件来增加更多的能力
-
可以严谨,也可以乐趣。通过插件的组合可以创造用于不同场景的 Tailchat。可以是面向娱乐,也可以是面向企业
-
后端微服务架构,已经为大规模部署做好了准备。不用担心用户量大了以后怎么办
-
用户管理
- 基于4位数字标识(战网like)的用户名系统
- 好友管理
-
聊天系统
- 私聊
- 群聊
- 富文本消息
- 图片
- 链接
- 提及(@)
- 代码
-
插件系统
-
前端插件系统(基于
ministar
的微内核架构)- 自定义主题
- 自定义面板
- 自定义操作
- 消息内容转换
- …
-
后端插件系统(基于
moleculer
的微服务架构)
-
-
开放平台
- Connect ID
- (其他正在开发中)
-
快速跳转
使用场景
Tailchat 的设计之处就是以插件化的架构来满足不同人群对于不同需求的实现。
对于个人用户
- 如果希望和朋友一起玩
- 创建一个群组
- 通过多个频道分割不同的话题
- 使用网页面板来分享喜欢的网页
- 如果希望聚集自己的粉丝圈
- 使用机器人来订阅自己的信息并转发到聊天面板
- 让自己的粉丝集中在一起,不需要创建无数个qq群/微信群
- 多个频道让多个话题能够一起产生
- 如果对于自己的隐私非常看中
- 自己部署让一切都能掌控在手中
对于企业用户
- 面板化设计满足企业自定义化设计需求
- 插件化架构可以方便基于核心进行二次开发
- 自部署的实现可以让企业价值得到保护,让企业安心
- 开源代码方便审查
项目文档:https://tailchat.msgbyte.com/
项目代码:https://github.com/msgbyte/tailchat
插件中心
各类主题
Github订阅机器人
安装Docker🐳
利用Docker-compose搭建,易于更新
先建立一个文件夹
mkdir -p ~/tailchat &&cd $_
vim docker-compose.yml
docker-compose填入以下内容:
环境变量可以自行参考文档按需修改
version: "3.3"
services:
# 应用网关
service-gateway:
build:
context: .
image: tailchat
restart: unless-stopped
env_file: docker-compose.env
environment:
SERVICES: core/gateway
PORT: 3000
depends_on:
- mongo
- redis
labels:
- "traefik.enable=true"
- "traefik.http.routers.api-gw.rule=PathPrefix(/)"
- "traefik.http.services.api-gw.loadbalancer.server.port=3000"
networks:
- internal
# 用户服务
service-user:
build:
context: .
image: tailchat
restart: unless-stopped
env_file: docker-compose.env
environment:
SERVICES: core/user/*
depends_on:
- mongo
- redis
networks:
- internal
# 群组服务
service-group:
build:
context: .
image: tailchat
restart: unless-stopped
env_file: docker-compose.env
environment:
SERVICES: core/group/*
depends_on:
- mongo
- redis
networks:
- internal
# 聊天服务
service-chat:
build:
context: .
image: tailchat
restart: unless-stopped
env_file: docker-compose.env
environment:
SERVICES: core/chat/*
depends_on:
- mongo
- redis
networks:
- internal
# 文件服务 / 插件注册中心 / 配置服务
service-file:
build:
context: .
image: tailchat
restart: unless-stopped
env_file: docker-compose.env
environment:
SERVICES: core/file,core/plugin/registry,core/config
depends_on:
- mongo
- redis
- minio
networks:
- internal
service-openapi:
build:
context: .
image: tailchat
restart: unless-stopped
env_file: docker-compose.env
environment:
SERVICES: openapi/app,openapi/oidc/oidc
OPENAPI_PORT: 3003
OPENAPI_UNDER_PROXY: "true"
depends_on:
- mongo
- redis
- minio
labels:
- "traefik.enable=true"
- "traefik.http.routers.openapi-oidc.rule=PathPrefix(/open)"
- "traefik.http.services.openapi-oidc.loadbalancer.server.port=3003"
networks:
- internal
# 插件服务(所有插件)
service-all-plugins:
build:
context: .
image: tailchat
restart: unless-stopped
env_file: docker-compose.env
environment:
SERVICEDIR: plugins
depends_on:
- mongo
- redis
- minio
networks:
- internal
# 数据库
mongo:
image: mongo:4
restart: on-failure
volumes:
- ./data:/data/db
networks:
- internal
# 数据缓存与中转通讯
redis:
image: redis:alpine
restart: on-failure
networks:
- internal
# 存储服务
minio:
image: minio/minio
restart: on-failure
networks:
- internal
environment:
MINIO_ROOT_USER: tailchat
MINIO_ROOT_PASSWORD: com.msgbyte.tailchat
volumes:
- ./storage:/data
command: minio server /data --console-address ":9001"
# 路由转发
traefik:
image: traefik:v2.1
restart: unless-stopped
command:
- "--api.insecure=true" # Don't do that in production!
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entryPoints.web.address=:80"
- "--entryPoints.web.forwardedHeaders.insecure" # Not good
ports:
- 8080:80 # 8080可以改成自己服务器上没有被占用的端口
- 127.0.0.1:11001:8080 #同上
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- internal
- default
networks:
internal:
name: tailchat-internal
修改好之后,注意切换成英文输入法,然后按一下 esc
,然后 :wq
保存退出。
再次编辑 vim docker-compose.env
写入下面的内容
LOGGER=true
LOGLEVEL=info
SERVICEDIR=services
TRANSPORTER=redis://redis:6379
CACHER=redis://redis:6379
REDIS_URL=redis://redis:6379
MONGO_URL=mongodb://mongo/tailchat
SECRET=adswddWEQ@4 # 改成自己的密钥
# file
API_URL=https://chat.poiblog.com # 改成自己的网站
# minio
MINIO_URL=minio:9000
MINIO_USER=tailchat
MINIO_PASS=com.msgbyte.tailchat
# SMTP
SMTP_SENDER=
SMTP_URI=
# metrics
PROMETHEUS=1
按一下 esc
,然后 :wq
保存退出,之后
docker pull moonrailgun/tailchat
docker tag moonrailgun/tailchat tailchat # 修改tag以让配置文件能够识别
运行
docker-compose up -d
我们现在可以输入 http://ip:8080/
访问了。
在 docker-compose.env
文件中提供了部分环境变量可供配置。
tailchat
的 docker-compose.yml
配置默认提供了如下配置:
mongodb
: 持久化数据库redis
: KV数据库与消息中转服务minio
: 分布式文件服务
更新
cd ~/tailchat # 进入docker-compose所在的文件夹
docker-compose pull # 拉取最新的镜像
docker-compose up -d # 重新更新当前镜像
docker image prune # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像
卸载
cd ~/tailchat # 进入docker-compose所在的文件夹
docker-compose down # 停止容器,此时不会删除映射到本地的数据
rm -rf ~/tailchat # 完全删除映射到本地的数据
反向代理
参考教程:安装及使用
⚠️Nginx Proxy Manager(以下简称NPM)会用到80、443端口,所以本机不能占用(比如原来就有Nginx)
互联网使用请确保完成了域名解析