使用 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.mzph.cn/web/2177.shtml

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

相关文章

【前端】vue的基础知识及开发指引

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Vue是什么二、学习 Vue.js 的基础知识三、熟悉 Vue.js 的生态系统四、掌握常用工具和库五、实践和项目开发六、 持续学习和跟进 前言 随着开发语言及人工智…

使用Docker搭建本地Nexus私有仓库

0-1开始Java语言编程之路 一、Ubuntu下Java语言环境搭建 二、Ubuntu下Docker环境安装 三、使用Docker搭建本地Nexus Maven私有仓库 四、Ubuntu下使用VisualStudioCode进行Java开发 你需要Nexus Java应用编译构建的一种主流方式就是通过Maven, Maven可以很方便的管理Java应用的…

全国832个贫困县名单及精准扶贫脱贫(摘帽名单)数据(2016-2020.11)

01、数据简介 自党的十八大以来,我国脱贫攻坚战取得了举世瞩目的伟大胜利。经过全党全国各族人民的共同努力,现行标准下9899万农村贫困人口全部脱贫,832个贫困县全部摘帽,12.8万个贫困村全部出列,区域性整体贫困得到解…

金融风控信用评分卡建模(Kaggle give me credit数据集)

1 数据预处理数据 数据来源于Kaggle的Give Me Some Credit,包括25万条个人财务情况的样本数据 1.1 导包读数据 import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.ensemble import RandomForestRegressor import seaborn as …

Excel图表智能排序

实例需求:表格中的多个图表如下图左侧所示,对于表格进行排序时,希望第一列中的图表跟随相应数据。 方法1: Sub SortTableWithChart()Dim oSht As Worksheet, RowCnt As Long, ColCnt As LongDim arrData, i As Long, oCht As Cha…

基于STM32CubeMX的嵌入式开发基础

内部没有上拉电阻,外部就要加一个 上拉或者下拉电阻,最基本上的作用是将状态不确定的信号通过一个电阻将其稳定在高电平或低电平 上拉下拉其实起的是稳定电平的作用 问题:单片机的外围电路设计及程序编写大多是以低电平有效来驱动电路的&…

【主流电商API接口数据采集】聚合电商API接口平台:让数据成为生产力!

API接口接入测试||文档 随着数字化商业时代的到来,API接口已成为电商资源连接利器,也是全球传统互联网企业转型的基础。 2021年 Google Cloud 研究显示,全球互联网企业近3/4的企业持续投入数字化转型,2/3的企业在持续增加投入&a…

轻松学会微信小程序开发(一)

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

Java进阶-Stream流

概述 在Java8中,得益于lambda所带来的函数式编程,引入了一个全新的Stream流的概念目的:用于简化集合和数组操作的api 案例 需求:创建一个集合存储多个字符串元素,将集合中所有以“z”开头的元素存储到新的集合中&am…

Torch 模型 感受野可视化

前言:感受野是卷积神经网络 (CNN) 中一个重要的概念,它表示 CNN 每一层输出的特征图上的像素点在输入图像上映射的区域。感受野的大小和形状直接影响到网络对输入图像的感知范围和精度,进而调整网络结构、卷积核大小和步长等参数,…

javaweb-maven

前端HTML,CSS,JS,Vue,Element,Nginx最后去复习, Java开发工程师 主要学习方向是服务端 所以进入javaweb的服务端的第一个知识点 maven 什么是maven 用于管理和构建java项目的工具 maven的官方网站 Maven – Welcome to Apache Maven …

Flink面试(1)

1.Flink 的并行度的怎么设置的? Flink设置并行度的几种方式 1.代码中设置setParallelism() 全局设置: 1 env.setParallelism(3);  算子设置(部分设置): 1 sum(1).setParallelism(3) 2.客户端CLI设置&#xff0…

邀请全球创作者参与 The Sandbox 创作者训练营

作为首屈一指的元宇宙平台之一,The Sandbox 的使命是成为全球创作者的中心。随着我们对 Game Maker 的不断改进、旨在激发创作者灵感的定期 Game Jams、革命性的 "创作者挑战 "以及众多其他活动的开展,我们见证了大量个人加入我们充满活力的创…

opencv_5_图像像素的算术操作

方法1:调用库函数 void ColorInvert::mat_operator(Mat& image) { Mat dst; Mat m Mat::zeros(image.size(), image.type()); m Scalar(2, 2, 2); multiply(image, m, dst); m1 Scalar(50,50, 50); //divide(image, m, dst); //add(im…

WordPress social-warfare插件XSS和RCE漏洞【CVE-2019-9978】

WordPress social-warfare插件XSS和RCE漏洞 ~~ 漏洞编号 : CVE-2019-9978 影响版本 : WordPress social-warfare < 3.5.3 漏洞描述 : WordPress是一套使用PHP语言开发的博客平台&#xff0c;该平台支持在PHP和MySQL的服务器上架设个人博客网站。social-warfare plugin是使用…

AIGC元年大模型发展现状手册

零、AIGC大模型概览 AIGC大模型在人工智能领域取得了重大突破&#xff0c;涵盖了LLM大模型、多模态大模型、图像生成大模型以及视频生成大模型等四种类型。这些模型不仅拓宽了人工智能的应用范围&#xff0c;也提升了其处理复杂任务的能力。a.) LLM大模型通过深度学习和自然语…

MSR是个什么寄存器

MSR 这种寄存器专门用于调试、程序执行跟踪、计算机性能监控、简化软件编程、电源控制等等各种实验性功能。 什么是 MSR MSR 的概念是不易理解&#xff0c;所以这一节只说一些 MSR 的外在&#xff0c;比如形容和指令等&#xff0c;然后展开说说&#xff0c;看完整篇文章你应该…

计算机视觉 CV 八股分享 [自用](更新中......)

目录 一、深度学习中解决过拟合方法 二、深度学习中解决欠拟合方法 三、梯度消失和梯度爆炸 解决梯度消失的方法 解决梯度爆炸的方法 四、神经网络权重初始化方法 五、梯度下降法 六、BatchNorm 七、归一化方法 八、卷积 九、池化 十、激活函数 十一、预训练 十二…

【uniapp】 合成海报组件

之前公司的同事写过一个微信小程序用的 合成海报的组件 非常十分好用 最近的项目是uni的 把组件改造一下也可以用 记录一下 <template><view><canvas type"2d" class"_mycanvas" id"my-canvas" canvas-id"my-canvas" …

RT-Thread电源管理组件

电源管理组件 嵌入式系统低功耗管理的目的在于满足用户对性能需求的前提下&#xff0c;尽可能降低系统能耗以延长设备待机时间。 高性能与有限的电池能量在嵌入式系统中矛盾最为突出&#xff0c;硬件低功耗设计与软件低功耗管理的联合应用成为解决矛盾的有效手段。 现在的各种…