专栏名称: 院长技术
《院长技术》专注于DevOps技术栈研究,云原生、Istio,CICD、Docker、Prometheus、K8s、ServiceMesh、Jenkins、Linux、微服务、分布式存储、监控、日志收集、安全渗透、虚拟化等技术栈。
目录
相关文章推荐
奔腾融媒 新闻天天看  ·  【26-27日·天气预报】内蒙古晴天大风在线 ... ·  12 小时前  
内蒙古掌上12348  ·  关于《内蒙古自治区节约用水条例 ... ·  昨天  
内蒙古教育发布  ·  新学期 “新” 引力!叮!校园生活重启键已启动~ ·  2 天前  
内蒙古教育发布  ·  新学期 “新” 引力!叮!校园生活重启键已启动~ ·  2 天前  
51好读  ›  专栏  ›  院长技术

快速搭建一款插件化&易拓展的开源即时聊天(IM)平台

院长技术  · 公众号  ·  · 2024-04-20 07:00

正文

院长简介

作者:院长

职位:运维开发工程师

官网:https://deanit.cn

博客:https://blog.deanit.cn

擅长:

【虚拟化,容器化,自动化运维,CICD,监控,日志,中间件,双机热备,分布式存储,数据库,认证,组网隧道,Kali 安全渗透,网络攻击,负载均衡,Html,Css,Js,Jq,Vue3,Shell,Python,Go,前后端框架】

项目地址

文档:https://tailchat.msgbyte.com/

GitHub源码:https://github.com/msgbyte/tailchat

项目介绍

一个开源的即时聊天项目

功能介绍

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

对于个人用户

如果希望和朋友一起玩
创建一个群组
通过多个频道分割不同的话题
使用网页面板来分享喜欢的网页
如果希望聚集自己的粉丝圈
使用机器人来订阅自己的信息并转发到聊天面板
让自己的粉丝集中在一起,不需要创建无数个qq群/微信群
多个频道让多个话题能够一起产生
如果对于自己的隐私非常看中
自己部署让一切都能掌控在手中

部署安装

安装Docker

curl -sSL https://get.docker.com/ | sh

安装Docker-compose

下载 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 版本
docker-compose -v

创建目录

sudo -i

mkdir -p /root/data/docker_data/tailchat

cd /root/data/docker_data/tailchat

Docker-compose部署服务

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

创建环境变量

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=adswddWEQ@4  # 改成自己的密钥

# file
API_URL=https://chat.deanit.cn   # 改成自己的网站

# minio
MINIO_URL=minio:9000
MINIO_USER=tailchat
MINIO_PASS=com.msgbyte.tailchat

# SMTP
SMTP_SENDER=
SMTP_URI=

# metrics
PROMETHEUS=1

拉取镜像

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

创建服务

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

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

Web访问

http://ip:3036

招贤纳士

欢迎👏关注《院长技术》,只做原创,干货~~~

更多技术干货持续输出中......

知识星球,试运营中,

原价188¥在不断上涨, 现加入仅需129¥ ,文档正逐渐上传!







请到「今天看啥」查看全文