使用 Docker 部署 TailChat 开源即时通讯平台

1)介绍 TailChat

官网: https://tailchat.msgbyte.com/
作者:https://www.moonrailgun.com/about/
GitHub : https://github.com/msgbyte/tailchat

TailChat 是一款插件化易拓展的开源 IM 应用。可拓展架构赋予 Tailchat 无限可能性。前端微内核架构 + 后端微服务架构。使得 Tailchat 能够驾驭任何定制化 / 私有化的场景。面向企业与私域用户打造,高度自由的群组管理与定制化的面板展示可以让私域主能够更好的展示自己的作品,管理用户,打造自己的品牌与圈子。

image.png

2)TailChat 功能

参考:https://blog.laoda.de/archives/docker-compose-install-tailchat

  • 注重隐私:只有被邀请的成员才能加入群组
  • 防止陌生人: 只有通过昵称 + 一串随机的数字才能添加好友
  • 二维的群组空间: 通过频道来分割不同的话题
  • 高度自定义的群组空间: 通过分组和拖拽来创建独创的群组空间。
    • 同时可以通过更多的插件来增加更多的能力
  • 可以严谨,也可以乐趣。 通过插件的组合可以创造用于不同场景的 Tailchat。可以是面向娱乐,也可以是面向企业。
  • 后端微服务架构: 已经为大规模部署做好了准备。不用担心用户量大了以后怎么办
  • 用户管理
    • 基于 4 位数字标识 (战网like) 的用户名系统
    • 好友管理
  • 聊天系统
    • 私聊
    • 群聊
    • 富文本消息
      • 图片
      • 链接
      • 提及(@)
      • 代码
  • 插件系统
    • 前端插件系统 (基于 ministar 的微内核架构)
      • 自定义主题
      • 自定义面板
      • 自定义操作
      • 消息内容转换
    • 后端插件系统 ( 基于 moleculer 的微服务架构 )

3)使用场景

个人用户

  • 如果希望和朋友一起玩

    • 创建一个群组
    • 通过多个频道分割不同的话题
    • 使用网页面板来分享喜欢的网页
  • 如果希望聚集自己的粉丝圈

    • 使用机器人来订阅自己的信息并转发到聊天面板
    • 让自己的粉丝集中在一起,不需要创建无数个 qq 群/微信群
    • 多个频道让多个话题能够一起产生
  • 如果对于自己的隐私非常看中

    • 自己部署让一切都能掌控在手中

企业用户

  • 面板化设计满足企业自定义化设计需求

  • 插件化架构可以方便基于核心进行二次开发

  • 自部署的实现可以让企业价值得到保护,让企业安心

  • 开源代码方便审查

4)部署安装

4.1)安装 Docker 环境

# 高版本 Docker 安装
curl -fsSL https://get.docker.com/ | sh
# 关闭防火墙
systemctl disable --now firewalld
setenforce 0
# 启用 Docker
systemctl enable --now docker

4.2)开启 IPv4 forwarding

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
systemctl restart network
sysctl net.ipv4.ip_forward

4.3)安装 Docker-compose

curl -L https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -v

4.4)创建 TailChat 目录

mkdir -p /docker/tailchatcd /docker/tailchat

5)基于 Docker-compose 部署服务

vim docker-compose.yml
version: "3.3"services:# 应用网关service-gateway:build:context: .image: tailchatrestart: unless-stoppedenv_file: docker-compose.envenvironment:SERVICES: core/gatewayPORT: 3000depends_on:- mongo- redislabels:- "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: tailchatrestart: unless-stoppedenv_file: docker-compose.envenvironment:SERVICES: core/user/*depends_on:- mongo- redisnetworks:- internal# 群组服务service-group:build:context: .image: tailchatrestart: unless-stoppedenv_file: docker-compose.envenvironment:SERVICES: core/group/*depends_on:- mongo- redisnetworks:- internal# 聊天服务service-chat:build:context: .image: tailchatrestart: unless-stoppedenv_file: docker-compose.envenvironment:SERVICES: core/chat/*depends_on:- mongo- redisnetworks:- internal# 文件服务 / 插件注册中心 / 配置服务service-file:build:context: .image: tailchatrestart: unless-stoppedenv_file: docker-compose.envenvironment:SERVICES: core/file,core/plugin/registry,core/configdepends_on:- mongo- redis- minionetworks:- internalservice-openapi:build:context: .image: tailchatrestart: unless-stoppedenv_file: docker-compose.envenvironment:SERVICES: openapi/app,openapi/oidc/oidcOPENAPI_PORT: 3003OPENAPI_UNDER_PROXY: "true"depends_on:- mongo- redis- miniolabels:- "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: tailchatrestart: unless-stoppedenv_file: docker-compose.envenvironment:SERVICEDIR: pluginsdepends_on:- mongo- redis- minionetworks:- internal# 数据库mongo:image: mongo:4restart: on-failurevolumes:- ./data:/data/dbnetworks:- internal# 数据缓存与中转通讯redis:image: redis:alpinerestart: on-failurenetworks:- internal# 存储服务minio:image: minio/miniorestart: on-failurenetworks:- internalenvironment:MINIO_ROOT_USER: tailchatMINIO_ROOT_PASSWORD: P@ssw0rd123456volumes:- ./storage:/datacommand: minio server /data --console-address ":9001"# 路由转发traefik:image: traefik:v2.1restart: unless-stoppedcommand:- "--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 goodports:- 8080:80            			 # 8080 可以改成自己服务器上没有被占用的端口- 127.0.0.1:11001:8080     # 11001 同上volumes:- /var/run/docker.sock:/var/run/docker.sock:ronetworks:- internal- defaultnetworks:internal:name: tailchat-internal

5.1)创建环境变量文件

vim docker-compose.env
LOGGER=true
LOGLEVEL=info
SERVICEDIR=servicesTRANSPORTER=redis://redis:6379CACHER=redis://redis:6379REDIS_URL=redis://redis:6379
MONGO_URL=mongodb://mongo/tailchat
SECRET=P@ssw0rd123456  # 改成自己的密钥# file
API_URL=http://192.168.80.8  # 改成自己的网站# minio
MINIO_URL=minio:9000
MINIO_USER=tailchat
MINIO_PASS=P@ssw0rd123456# SMTP
SMTP_SENDER=
SMTP_URI=# metrics
PROMETHEUS=1

5.2)拉取镜像

docker pull moonrailgun/tailchat
docker tag moonrailgun/tailchat tailchat # 修改 tag 以让配置文件能够识别

5.3)创建服务

cd /docker/tailchat    # 确保来到 docker-compose 文件所在的文件夹下# 确保配置文件 ( docker-compose.yml 和 docker-compose.env ) 在当前目录下
# 执行如下命令一键启动
docker-compose up -d

6)访问 TailChat

http://服务器IP地址:8080

image.png
image.png
image.png
image.png
image.png
image.png

参考: 【好玩儿的Docker项目】激情畅聊!十分钟搭建一个插件化易拓展的开源即时聊天(IM)应用——Tailchat

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/651024.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言必刷题】7. 百钱百鸡

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 |《MySQL探索之旅》 |《Web世界探险家》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更…

【Linux】如何进行用户之间的切换——指令su

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

019基于JavaWeb的在线音乐系统(含论文)

019基于JavaWeb的在线音乐系统(含论文) 开发环境: Jdk7(8)Tomcat7(8)MysqlIntelliJ IDEA(Eclipse) 数据库: MySQL 技术: JavaServletJqueryJavaScriptAjaxJSPBootstrap 适用于: 课程设计,毕…

基于51单片机的天然气检测报警设计

基于51单片机的天然气检测报警 (仿真+程序原理图+设计报告) 功能介绍 具体功能: 1.MQ-5检测煤气浓度; 2.浓度分为低、中、高三档,分别用LED灯绿、黄、红来提示; 3.当浓度到达中档…

每日一题(力扣45):跳跃游戏2--贪心

由于题目已经告诉了我们一定可以跳到,所以我们只需去考虑前进最快的方法。即 判断当前下一步能跳的各个位置中,哪个能带你去去向最远的地方(why? 因为其他位置所能提供的最大范围都没最远那个大,所以最远的那个已经可以…

杰发科技AC7840——ADC简介(1)_双路ADC同时使用

0. 简介 1. 特性 2. 双路ADC Sample里面没有双路的,以为那个规则组只有一个通道,看了外设寄存器才发现,原来他的通道是双路的。 注意1: ADC硬件引脚的配置 注意2: 规则组长度设置和 RSEQ序列号和CH通道号组合应该就对应了转换顺序&#xff0…

只需几步,即可享有笔记小程序

本示例是一个简单的外卖查看店铺点菜的外卖微信小程序,小程序后端服务使用了MemFire Cloud,其中使用到的MemFire Cloud功能包括: 其中使用到的MemFire Cloud功能包括: 云数据库:存储外卖微信小程序所有数据表的信息。…

OpenHarmony实战开发-创建网格 (Grid/GridItem)

概述 网格布局是由“行”和“列”分割的单元格所组成,通过指定“项目”所在的单元格做出各种各样的布局。网格布局具有较强的页面均分能力,子组件占比控制能力,是一种重要自适应布局,其使用场景有九宫格图片展示、日历、计算器等…

M-LAG的基本概念

如图所示,用户侧设备Switch(可以是交换机或主机)通过M-LAG机制与另外两台设备(SwitchA和SwitchB)进行跨设备链路聚合,共同组成一个双活系统。这样可以实现SwitchA和SwitchB共同进行流量转发的功能&#xff…

Maya vs Blender:制作3D动画首选哪一个?

就 3D 动画而言,有两款3D软件引发了最多的争论:Blender 与 Maya。这两个强大的平台都提供强大的工具集,使动画故事和角色栩栩如生。但作为一名3D动画师,您应该投入时间学习和创作哪一个呢?下面我将从以下六点给您一个清…

随手记:树结构翻页和定位指定数据逻辑

业务背景: 树形组件展示数据,数据包含过去数据,现在数据,未来数据,用户在首次进入页面时,展示的是当天的数据,如果当天没有数据,则显示最近一条的过去数据。数据按照时间越长数据会…

《QT实用小工具·三十五》基于PathView,Qt/QML做的一个可以无限滚动的日历控件

1、概述 源码放在文章末尾 改项目实现了基于PathView,Qt/QML做的一个可以无限滚动的日历控件,下面是demo演示: 项目部分代码如下所示: import QtQuick 2.7 import QtQuick.Controls 1.4 import QtQuick.Controls.Styles 1.4Bu…