激情畅聊!十分钟搭建一个插件化易拓展的开源国内即时聊天(IM)应用——Tailchat

激情畅聊!十分钟搭建一个插件化易拓展的开源国内即时聊天(IM)应用——Tailchat

1.1 介绍

Tailchat 是一款插件化易拓展的开源 IM 应用。可拓展架构赋予 Tailchat 无限可能性。

前端微内核架构 + 后端微服务架构 使得 Tailchat 能够驾驭任何定制化/私有化的场景

特性

  • 完整的即时通讯基础能力
  • 插件化架构的赋予的自由拓展能力
  • 微服务架构赋予的水平拓展能力

技术栈

  • 前端
    • React
    • Redux
    • MiniStar
    • tailwindcss
    • iconify
  • 后端
    • Nodejs
    • Socket.io
    • koa
    • moleculer

功能列表

  • 用户管理
    • 基于4位数字标识(战网like)的用户名系统
    • 好友管理
  • 聊天系统
    • 私聊
    • 群聊
    • 富文本消息
      • 图片
      • 链接
      • 提及(@)
      • 代码
  • 插件系统
    • 前端插件系统(基于ministar的微内核架构)
      • 自定义主题
      • 自定义面板
      • 自定义操作
      • 消息内容转换
      • ...
    • 后端插件系统(基于moleculer的微服务架构)
  • 开放平台
    • Connect ID
    • (其他正在开发中)
  • 快速跳转

1.2 图片

图片[1]飘荡技术分享站激情畅聊!十分钟搭建一个插件化易拓展的开源国内即时聊天(IM)应用——Tailchat
图片[2]飘荡技术分享站激情畅聊!十分钟搭建一个插件化易拓展的开源国内即时聊天(IM)应用——Tailchat
图片[3]飘荡技术分享站激情畅聊!十分钟搭建一个插件化易拓展的开源国内即时聊天(IM)应用——Tailchat

2.1 搭建环境

建议最低配置:1核2G
我推荐服务器配置为:2c4g
系统:Debian 11(非必需DD用原来的系统也OK,之后教程都是用Debian或者Ubuntu搭建~)
安装好Docker、Docker-compose
【非必需但建议】域名一枚,并做好解析到服务器上
【非必需】提前安装好宝塔面板海外版本aapanel,并安装好Nginx

2.2 开始搭建(第一种方法)

安装docker(点我跳转

创建安装目录

sudo -i

mkdir -p /root/data/docker_data/tailchat

cd /root/data/docker_data/tailchat
vim docker-compose.yml

输入以下内容

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     #11001同上
    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=........  # 改成自己的密钥

# file
API_URL=https://www.beiweidoge.top   # 改成自己的网站

# 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以让配置文件能够识别

最后

cd /root/data/docker_data/tailchat    # 确保来到docker-compose文件所在的文件夹下

# 确保配置文件(docker-compose.yml和docker-compose.env)在当前目录下
# 执行以下命令一键启动
docker-compose up -d
访问: http://<server ip>:8080 即可打开tailchat

2.3 开始搭建(第二种方法)

我们可以通过从公共镜像拉取已经编译好的镜像来快速搭建

使用Docker原生命令手动安装:

docker pull moonrailgun/tailchat 
docker tag moonrailgun/tailchat tailchat 

启动之前需要下载配置文件以告知 docker-compose 要如何启动镜像

mkdir tailchat && cd tailchat
wget https://raw.githubusercontent.com/msgbyte/tailchat/master/docker-compose.yml
wget https://raw.githubusercontent.com/msgbyte/tailchat/master/docker-compose.env

最后

docker compose up -d

访问: http://<server ip>:11000 即可打开

ENG 结尾

祝大家用得开心,有问题可以在评论区互相交流探讨

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容