本文发布于409天前,最后更新于275天前,其中的信息可能有所发展或是发生改变。
项目地址:msgbyte/tailchat
文档:概述 | Tailchat (msgbyte.com)
Tailchat
是一款插件化易拓展的开源 IM 应用。可拓展架构赋予 Tailchat
无限可能性。
前端微内核架构 + 后端微服务架构 使得 Tailchat
能够驾驭任何定制化/私有化的场景
面向企业与私域用户打造,高度自由的群组管理与定制化的面板展示可以让私域主能够更好的展示自己的作品,管理用户,打造自己的品牌与圈子。
Tailchat 的设计之处就是以插件化的架构来满足不同人群对于不同需求的实现。
系统为Ubuntu22.04
你需要安装docker和docker-compose,其中docker-compose版本推荐使用最新的2.23.0。
具体方法可以看夜梦的这篇文章:在服务器上安装docker
建议最低配置 1核2G
如果只有1C1G,建议添加SWAP。
具体添加方法可以看夜梦的这篇文章:手动添加SWAP
从公共镜像库拉取 tailchat镜像
docker pull moonrailgun/tailchat
将下载的镜像改名为tailchat(和源码编译保持一致,如果不改的话会走源码编译流程)
docker tag moonrailgun/tailchat tailchat
新建文件夹
cd ~ && mkdir tailchat && cd tailchat
创建配置文件
vim docker-compose.yml
一般来说直接复制粘贴下面的内容填入就可以了:
version: "3.5"
services:
# Tailchat Core Services
service-core:
build:
context: .
image: tailchat
restart: unless-stopped
env_file: docker-compose.env
environment:
SERVICES: core/gateway,core/user/*.service.js,core/group/*.service.js,core/chat/*.service.js,core/file,core/plugin/registry,core/config
PORT: 3000
depends_on:
- mongo
- redis
- minio
labels:
- "traefik.enable=true"
- "traefik.http.routers.api-gw.rule=PathPrefix(`/`)"
- "traefik.http.services.api-gw.loadbalancer.server.port=3000"
networks:
- internal
# Open Platform
service-openapi:
build:
context: .
image: tailchat
restart: unless-stopped
env_file: docker-compose.env
environment:
SERVICES: openapi/app,openapi/bot,openapi/integration,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
# Plugin Service (All Plugins)
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
# Database
mongo:
image: mongo:4
restart: on-failure
volumes:
- data:/data/db
networks:
- internal
# Data cache and Transporter
redis:
image: redis:alpine
restart: on-failure
networks:
- internal
# Persist Storage
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"
# Router
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:
- 11000:80
- 127.0.0.1:11001:8080
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- internal
- default
networks:
internal:
name: tailchat-internal
volumes:
data:
storage:
保存后退出即可。然后我们配置环境变量
vim docker-compose.env
修改 docker-compose.env
文件的配置,以下字段推荐修改:
API_URL
对外可访问的url地址,用于文件服务访问, 可以是域名(如果设置了域名需要进行反向代理)也可以是ip。 如果出现发送图片不能正常显示就是这个变量没有设置SECRET
服务端加密秘钥,用于生成Token. 默认为 tailchat
LOGGER=true
LOGLEVEL=info
SERVICEDIR=services
TRANSPORTER=redis://redis:6379
REDIS_URL=redis://redis:6379
MONGO_URL=mongodb://mongo/tailchat
SECRET=
# file
API_URL=https://tailchat-nightly.moonrailgun.com
# minio
MINIO_URL=minio:9000
MINIO_USER=tailchat
MINIO_PASS=com.msgbyte.tailchat
# SMTP
SMTP_SENDER=
SMTP_URI=
# metrics
PROMETHEUS=1
# Admin
ADMIN_USER=tailchat
ADMIN_PASS=
确保配置文件(docker-compose.yml和docker-compose.env)在当前目录下,执行以下命令一键启动
docker-compose up -d
访问 http://<server ip>:11000
即可打开tailchat
注意部分云服务可能需要手动开放防火墙端口。
在docker-compose.env
文件中提供了部分环境变量可供配置。
tailchat
的docker-compose.yml
配置默认提供了如下配置:
mongodb
: 持久化数据库redis
: KV数据库与消息中转服务minio
: 分布式文件服务其中持久化文件(数据库, 文件存储)通过 docker volume
统一管理
创建管理后台配置:
vim admin.yml
贴入配置文件
version: "3.3"
services:
# 后台应用
tailchat-admin:
build:
context: ../
image: tailchat
restart: unless-stopped
env_file: docker-compose.env
depends_on:
- mongo
- redis
labels:
- "traefik.enable=true"
- "traefik.http.routers.admin.rule=PathPrefix(`/admin`)"
- "traefik.http.services.admin.loadbalancer.server.port=3000"
networks:
- internal
command: pnpm start:admin
在环境变量 docker-compose.env
中设置管理后台的账号和密码:
vim docker-compose.env
ADMIN_USER=tailchat
ADMIN_PASS=<这里写入独立的后台密码, 不要告知其他人>
然后使用多文件方式启动应用:
docker compose -f docker-compose.yml -f admin.yml up -d
注意先后顺序,因为admin.yml
依赖docker-compose.yml
所以要放在后面
此时访问后台地址后面追加/admin/
即可访问:
https://tailchat.example.com/admin/
或者 http://<server ip>:11000/admin/
注意不要忘记在最后有一个/
登录界面
使用界面
后台界面
如果你想通过域名进行访问,不仅要在配置文件中进行设置,而且需要进行反向代理。
具体操作可以看夜梦的这两篇文章: