1.使用 Docker 部署 File Browser 文件管理系统03-082.使用 Docker 部署 MrDoc 在线文档管理系统03-083.使用 Docker 部署 GLPI 资产管理系统03-084.使用 Docker 部署 Answer 问答平台03-085.统一身份认证系统 OpenLDAP 完整部署03-086.使用 Docker 部署 Next Terminal 轻量级堡垒机03-107.使用 Docker 部署 Fiora 在线聊天室平台03-118.使用 Docker 部署 instantbox 轻量级 Linux 系统04-169.使用 Docker 部署 Photopea 在线 PS 工具04-1610.使用 Docker 部署 SurveyKing 调查问卷系统04-1611.使用 Docker 部署 Draw.io 在线流程图系统04-19
12.使用 Docker 部署 TailChat 开源即时通讯平台04-23
13.使用 Docker 部署 moments 微信朋友圈04-28
收起
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 环境
# 高版本 Docker 安装 curl -fsSL https://get.docker.com/ | sh # 关闭防火墙 systemctl disable --now firewalld setenforce 0 # 启用 Docker systemctl enable --now docker4.2)开启 IPv4 forwarding
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf systemctl restart network sysctl net.ipv4.ip_forward4.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 -v4.4)创建 TailChat 目录
mkdir -p /docker/tailchat cd /docker/tailchat5)基于 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" # Dont 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-internal5.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=15.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 -d6)访问 TailChat
http://服务器IP地址:8080