首页 > 其他分享 >使用 Docker 部署 TailChat 开源即时通讯平台

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

时间:2024-04-23 11:34:17浏览次数:18  
标签:compose TailChat redis 即时通讯 internal env Docker tailchat docker

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/tailchat

cd /docker/tailchat

5)基于 Docker-compose 部署服务

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: 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)创建环境变量文件

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=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

标签:compose,TailChat,redis,即时通讯,internal,env,Docker,tailchat,docker
From: https://www.cnblogs.com/wuhanjiayou/p/18152457/TailChat

相关文章

  • docker网络
    一:docker网络基础知识1:网络驱动docker网路子系统使用可插拔(理解一下)的驱动,默认的情况下有多个驱动的程序,并且提供核心的联网的功能1、bridge:桥接网络,这个是默认的网络驱动程序,不指定驱动成创建的容器默认是bridge驱动2、host:主机网络,消除了容器和主机网络隔离,直接使用主机的网......
  • ferry工单系统部署(docker)
    1.部署说明ferry工单系统部署参考官方文档,采用docker-compose的方式。 2.github地址https://github.com/lanyulei/ferry?tab=readme-ov-file#readme 3.部署步骤注:mysql、redis的镜像可以从dockerhub上下载,地址:https://hub.docker.com/ 3.1部署mysql(5.7.29),此处......
  • 使用Docker搭建MongoDB 5.0版本副本集集群
    1、mongodb集群首先我们需要了解mongodb的集群模式,mongodb安装分为单机安装和集群安装。集群安装分为:主从复制(Master-Slaver)集群、副本集(ReplicaSet)集群和分片集群(ShardedCluster)。MongoDB的主从复制(Master-SlaveReplication)已不再是官方推荐的特性,并且在未来的版本中可能会被......
  • docker 命令
    ###docker进程操作1查看docker的配置dockerinfo2根据overlay2下的目录查找对应的容器dockerps-q|xargsdockerinspect--format'{{.State.Pid}},{{.Id}},{{.Name}},{{.GraphDriver.Data.WorkDir}}'|grep"目录id"3 根据pid进程号查看时哪个容器cat/p......
  • docker安装elasticsearch和kibana
    来源:https://www.cnblogs.com/baoshu/p/16128127.html安装目标使用docker安装elasticsearch和kibana,版本均为7.17.1安装es1.dockerpull#去dockerhub看具体版本,这里用7.17.1Copydockerpullelasticsearch:7.17.1dockerpullkibana:7.17.12.临时安装生成文件#Copy......
  • docker安装redis
    下载最新的官方镜像dockerpullredis:latest在/app/redis下新建redis.conf:#开启密码验证(可选)requirepass123#允许redis外地连接,需要注释掉绑定的IP#bind127.0.0.1#关闭保护模式(可选)protected-modeno#注释掉daemonizeyes,或者配置成daemonizeno。因为该配......
  • docker - [06] 安装部署Tomcat
    题记部分   一、官方测试镜像官方文档给出以下命令,一般用来测试,用完即删,下载并运行镜像,退出镜像就会自动删除镜像?亲测不会自动删除dockerrun-it--rmtomcat:9.0使用快捷键:Ctrl+P+Q可以让其在后台运行(这里执行Ctrl+C之后,dockerimages还是有tomcat镜像) ......
  • docker - [05] 部署Nginx
    题记部分 一、查找镜像dockersearchnginx 二、拉取镜像dockerpullnginx 三、启动镜像Nginx默认端口号为80,可以在启动时指定Nginx使用的端口号(例如3344)那么容器外部访问Nginx使用3344端口,而容器内部则是80,两个端口号形成映射关系。dockerrun-d--namen......
  • docker下安装gitlab配置以及备份
    安装dockerrun--detach--publish443:443--publish9980:80--publish9922:22--namegitlab--restartalways--volume/srv/gitlab/config:/etc/gitlab--volume/srv/gitlab/logs:/var/log/gitlab--volume/srv/gitlab/data:/var/opt/gitlab--shm-siz......
  • 【Docker系列】Section 1: Docker and Container Fundamentals①
    本篇是根据《KubernetesandDocker–AnEnterpriseGuide》整理出来的,原著作者:ScottSurovich|MarcBoorshtein,大家可以关注一下。Whothisbookisfor❓我们创建这本书是为了帮助DevOps人员团队扩展他们的技能,超越Kubernetes的基础知识。它是根据我们在多个企业环境......