标签搜索

目 录CONTENT

文章目录

开源版 Discord!用 NAS/VPS 搭建属于自己的聊天神器

yyzq
2025-10-02 / 0 评论 / 1 点赞 / 35 阅读 / 2,425 字

前言

在这个社交和团队协作日益重要的时代,Discord 因其强大的功能和跨平台支持,成为了众多团队和玩家的首选。然而,使用公共服务器总会有隐私和数据安全的顾虑。

今天,我将教你如何在自己的 NAS 或 VPS 上,部署一套 开源版 Discord,打造属于你自己的聊天与团队沟通工具。不仅支持网页端和桌面端,更兼容手机 App,让你随时随地高效协作。

跟着本教程,你将拥有一套完全 自主管理、数据安全、功能强大的私有聊天平台,不依赖第三方服务,享受开源带来的自由与便捷。

项目简介

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

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

面向企业与私域用户打造,高度自由的群组管理与定制化的面板展示可以让私域主能够更好的展示自己的作品,管理用户,打造自己的品牌与圈子。

项目图片

主界面
image-1759394759108
image-1759396602734
插件市场
image-1759396637625

服务状态
image-1759396690637

功能特性

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

亮点

基于mini-star的前端微内核架构与基于moleculer的后端微服务架构可以适应各种用户用量,便于拓展
完整的聊天系统,支持提及、面板跳转、富文本、markdown、url链接等各种语法
消息reaction机制,让你通过表情表达自己
文件分享与图片发送
支持语音通话与视频通话
完善的身份组管理,权限控制颗粒化
用户管理与用户禁言
邮箱认证与密码找回
多种面板: 网页嵌入, 自定义html, 话题面板
简易消息推送与github通知订阅
后台管理平台
开放平台
机器人
OAuth
插件带来的更多奇妙化学反应
自定义主题
在线听音乐
消息加密
url获取元数据
隔空投送
任务管理
在线绘图
字体放大
工具箱

客户端

除了web版还有部分客户端
1.安卓端
image-1759394925363
点我下载
2.window版
image-1759395247715
点我下载

3.其他客户端暂时还没有

压测报告

查看官网

部署方法

使用Docker安装

本教程使用docker的方式安装部署,简单便捷
164b6ac419e23bc5390dc46601a202bf

准备条件

1)一台服务器

我们使用莱卡云VPS和飞牛云NAS来演示

需要vps的可以看以下信息
莱卡云官网

内存占用情况-建议2G内存以上
image-1759395391125

2)本项目使用到的开源项目

https://github.com/msgbyte/tailchat
更多功能或者二次修改可以访问开源项目地址

3)域名(可选)

域名可以根据自己的需求绑定

① VPS部署

一、Docker环境部署

在vps安装docker和docker-compose
Docker官方安装文档(英文)
https://duan.yyzq.eu.org/docker-001
Docker-Compose官方安装文档(英文)
https://duan.yyzq.eu.org/docker-002
Centos安装Docker和Docker-compose(中文)
https://duan.yyzq.eu.org//03
Ubuntu安装Docker和Docker-compose(中文)
https://duan.yyzq.eu.org//04

推荐直接用一键脚本

docker安装脚本

bash <(curl -sSL https://cdn.jsdelivr.net/gh/SuperManito/LinuxMirrors@main/DockerInstallation.sh)

docker-compose安装脚本

curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose

二、创建docker-compose.yml文件

登录服务器使用root账户执行以下步骤

创建一个目录,并进入此目录

mkdir  tailchat;cd tailchat

新建env环境变量docker-compose.env

vim docker-compose.env

主要改下API_URL为自己的服务器ip或者域名

LOGGER=true                     # 是否启用日志记录
LOGLEVEL=info                   # 日志级别 (info, warn, error, debug)
SERVICEDIR=services             # 服务目录路径

TRANSPORTER=redis://redis:6379  # 服务间通信使用的 Redis 地址

REDIS_URL=redis://redis:6379    # Redis 连接地址
MONGO_URL=mongodb://mongo/tailchat  # MongoDB 数据库地址
SECRET=                         # 系统密钥(JWT/加密用),需设置安全值

API_URL=192.168.31.40          # API 访问地址(可以改为你的服务器 IP 或域名)

MINIO_URL=minio:9000            # MinIO 对象存储服务地址
MINIO_USER=tailchat             # MinIO 用户名
MINIO_PASS=com.msgbyte.tailchat # MinIO 密码

SMTP_SENDER=                    # SMTP 发件人邮箱地址
SMTP_URI=                       # SMTP 邮件服务 URI,用于邮件通知

PROMETHEUS=1                    # 是否启用 Prometheus 监控 (1=启用, 0=关闭)

ADMIN_USER=tailchat             # 管理员账号
ADMIN_PASS=                      # 管理员密码(需设置安全值)

然后再新建docker-compose.yml

vim docker-compose.yml

主要看下 - 12001:80中的12001端口是否占用

services:
  service-core:     # Tailchat 核心服务
    build:          # 构建设置
      context: .    # 使用当前目录作为构建上下文
    image: moonrailgun/tailchat:latest   # 使用的镜像
    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                            # MongoDB 数据库
      - redis                            # Redis 缓存
      - minio                            # MinIO 存储
    labels:                              # Traefik 路由配置
      - "traefik.enable=true"            # 启用 Traefik
      - "traefik.http.routers.api-gw.rule=PathPrefix(`/`)"   # API 路由规则
      - "traefik.http.services.api-gw.loadbalancer.server.port=3000"  # 后端端口映射
    networks:
      - internal                         # 使用内部网络

  service-openapi:     # 开放平台服务
    build:
      context: .                         # 使用当前目录作为构建上下文
    image: moonrailgun/tailchat:latest   # 镜像
    restart: unless-stopped              # 自动重启
    env_file: docker-compose.env         # 引入环境变量
    environment:
      SERVICES: openapi/app,openapi/bot,openapi/integration,openapi/oidc/oidc  # 加载 OpenAPI 相关模块
      OPENAPI_PORT: 3003                 # 服务运行端口
      OPENAPI_UNDER_PROXY: "true"        # 在反向代理下运行
    depends_on:
      - mongo                            # 依赖 MongoDB
      - redis                            # 依赖 Redis
      - minio                            # 依赖 MinIO
    labels:
      - "traefik.enable=true"            # 启用 Traefik
      - "traefik.http.routers.openapi-oidc.rule=PathPrefix(`/open`)"   # OpenAPI 路由
      - "traefik.http.services.openapi-oidc.loadbalancer.server.port=3003"   # 后端端口
    networks:
      - internal                         # 内部网络

  service-all-plugins:      # 插件服务(加载所有插件)
    build:
      context: .                         # 构建上下文
    image: moonrailgun/tailchat:latest   # 镜像
    restart: unless-stopped              # 自动重启
    env_file: docker-compose.env         # 引入环境变量
    environment:
      SERVICEDIR: plugins                # 指定插件目录
    depends_on:
      - mongo                            # 依赖 MongoDB
      - redis                            # 依赖 Redis
      - minio                            # 依赖 MinIO
    networks:
      - internal                         # 内部网络

  mongo:       # MongoDB 数据库
    image: mongo:4                       # 使用 MongoDB v4 镜像
    restart: on-failure                  # 失败时重启
    volumes:
      - data:/data/db                    # 持久化存储数据
    networks:
      - internal                         # 内部网络

  redis:       # Redis 缓存 & 服务间通信
    image: redis:alpine                  # 使用轻量版 Redis
    restart: on-failure                  # 失败时重启
    networks:
      - internal                         # 内部网络

  minio:        # MinIO 对象存储
    image: minio/minio                   # MinIO 镜像
    restart: on-failure                  # 失败时重启
    networks:
      - internal                         # 内部网络
    environment:
      MINIO_ROOT_USER: tailchat          # MinIO 用户名
      MINIO_ROOT_PASSWORD: com.msgbyte.tailchat   # MinIO 密码
    volumes:
      - storage:/data                    # 数据持久化存储
    command: minio server /data --console-address ":9001"  # MinIO 启动命令,管理端口 9001

  traefik:      # Traefik 反向代理和路由
    image: traefik:v2.1                  # 使用 Traefik v2.1
    restart: unless-stopped              # 自动重启
    command:
      - "--api.insecure=true"            # 启用不安全的 Web UI(生产环境不要用)
      - "--providers.docker=true"        # 启用 Docker 提供者
      - "--providers.docker.exposedbydefault=false" # 默认不暴露容器
      - "--entryPoints.web.address=:80"  # Web 入口端口
      - "--entryPoints.web.forwardedHeaders.insecure" # 允许不安全的请求头(生产环境不推荐)
    ports:
      - 12001:80                         # 将宿主机 12001 端口映射到 Traefik 80
      - 127.0.0.1:11001:8080             # 本地访问 Traefik Dashboard
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro  # 授权 Traefik 访问 Docker
    networks:
      - internal                         # 内部网络
      - default                          # 默认网络

networks:
  internal:                              # 定义内部网络
    name: tailchat-internal              # 内部网络名称

volumes:
  data:                                  # MongoDB 数据卷
  storage:                               # MinIO 数据卷

三、执行容器运行命令

docker-compose up -d #运行容器
docker-compose ps  #查看是否开启成功

正常启动如下所示

docker-compose ps
NAME                             IMAGE                         COMMAND                  SERVICE               CREATED         STATUS         PORTS
tailchat-minio-1                 minio/minio                   "/usr/bin/docker-ent…"   minio                 4 seconds ago   Up 3 seconds   9000/tcp
tailchat-mongo-1                 mongo:4                       "docker-entrypoint.s…"   mongo                 4 seconds ago   Up 3 seconds   27017/tcp
tailchat-redis-1                 redis:alpine                  "docker-entrypoint.s…"   redis                 4 seconds ago   Up 3 seconds   6379/tcp
tailchat-service-all-plugins-1   moonrailgun/tailchat:latest   "docker-entrypoint.s…"   service-all-plugins   4 seconds ago   Up 2 seconds   3000/tcp
tailchat-service-core-1          moonrailgun/tailchat:latest   "docker-entrypoint.s…"   service-core          4 seconds ago   Up 2 seconds   3000/tcp
tailchat-service-openapi-1       moonrailgun/tailchat:latest   "docker-entrypoint.s…"   service-openapi       4 seconds ago   Up 2 seconds   3000/tcp
tailchat-traefik-1               traefik:v2.1                  "/entrypoint.sh --ap…"   traefik               4 seconds ago   Up 3 seconds   0.0.0.0:12001->80/tcp, [::]:12001->80/tcp, 127.0.0.1:11001->8080/tcp

四、打开web页面使用

成功以后需要打开自己相应的端口12001)防火墙就可以web端访问了

主界面-初始化

http://ip:12001

image-1759396304635

注册完即可使用

更多功能自行研究

② 飞牛云NAS部署

新建项目

tailchat

其他步骤参考VPS的教程

绑定域名

如需绑定域名的自行绑定

视频教程

B站

YouTube

绑定域名可以参考
NginxProxyManager
https://duan.yyzq.eu.org//npm-ch

有任何问题可以直接留言或者问我
有任何问题可以直接留言或者问我
有任何问题可以直接留言或者问我

欢迎关注我们的微信公众号!
微信公众号

1

评论区