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

1)介绍 TailChat

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

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

2)TailChat 功能

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

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

3)使用场景

个人用户

  • 如果希望和朋友一起玩

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

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

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

企业用户

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

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

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

  • 开源代码方便审查

4)部署安装

4.1)安装 Docker 环境

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

4.2)开启 IPv4 forwarding

bash 复制代码
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
systemctl restart network
sysctl net.ipv4.ip_forward

4.3)安装 Docker-compose

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

4.4)创建 TailChat 目录

bash 复制代码
mkdir -p /docker/tailchat

cd /docker/tailchat

5)基于 Docker-compose 部署服务

bash 复制代码
vim docker-compose.yml
yaml 复制代码
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: P@ssw0rd123456
    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     # 11001 同上
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - internal
      - default

networks:
  internal:
    name: tailchat-internal

5.1)创建环境变量文件

bash 复制代码
vim docker-compose.env
bash 复制代码
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=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)拉取镜像

bash 复制代码
docker pull moonrailgun/tailchat
docker tag moonrailgun/tailchat tailchat # 修改 tag 以让配置文件能够识别

5.3)创建服务

bash 复制代码
cd /docker/tailchat    # 确保来到 docker-compose 文件所在的文件夹下

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

6)访问 TailChat

bash 复制代码
http://服务器IP地址:8080






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

相关推荐
lsjweiyi1 天前
极简AI工具箱网站开源啦!
opencv·开源·微信支付·支付宝支付·百度ai·极简ai工具箱·ai图像处理
开源社1 天前
一场开源视角的AI会议即将在南京举办
人工智能·开源
FreeIPCC1 天前
谈一下开源生态对 AI人工智能大模型的促进作用
大数据·人工智能·机器人·开源
海害嗨1 天前
阿里巴巴官方「SpringCloudAlibaba全彩学习手册」限时开源!
学习·开源
生命是有光的1 天前
【开源风云】从若依系列脚手架汲取编程之道(八)
开源
HuggingFace1 天前
Halo 正式开源: 使用可穿戴设备进行开源健康追踪
开源·健康追踪
时光追逐者1 天前
.NET 9 中 LINQ 新增功能实操
开发语言·开源·c#·.net·.netcore·linq·微软技术
檀越剑指大厂1 天前
Linux本地部署开源项目OpenHands基于AI的软件开发代理平台及公网访问
linux·人工智能·开源
胜天半子_王二_王半仙2 天前
c++源码阅读__ThreadPool__正文阅读
开发语言·c++·开源
FIT2CLOUD飞致云2 天前
案例研究|阿特斯的JumpServer分布式部署和多组织管理实践
运维·开源·堡垒机·jumpserver