Skip to content

Repository files navigation

XChat

一款轻量、现代、可自行部署的 Web 即时通讯应用。

XChat 基于 Node.js、React 和 SQLite 构建,面向个人、小型团队与私有化部署场景。它提供私聊、群组、频道、文件共享、实时同步、离线恢复、Web Push 通知和 Bot 接口;所有业务数据均保存在你自己的服务器上。

XChat 目前不提供端到端加密。服务器管理员可以访问数据库、消息和附件,请根据自己的使用场景评估部署方式。

功能

  • 私聊、群组和频道
  • 回复、编辑、撤回、转发、收藏、置顶与表情回应
  • @提及、已读状态、正在输入和在线状态
  • 图片、文件、语音消息与音视频附件预览
  • 消息搜索、链接预览和群公告
  • WebSocket 实时同步、断线重连与离线 outbox
  • Web Push 通知和多设备会话管理
  • 邀请注册、成员权限、禁言、封禁与管理审计
  • Bot 身份、长轮询和签名 Webhook
  • 桌面三栏与移动端单栏布局
  • 浅色、深色、跟随系统主题,以及中文和英文界面

技术栈

部分 技术
服务端 Node.js 22、Fastify 5、ESM
Web 客户端 React 19、TypeScript、Vite 6
状态与缓存 TanStack Query、Zustand、Dexie
数据库 SQLite、WAL、better-sqlite3
实时通信 WebSocket
媒体处理 Sharp、ffmpeg / ffprobe

XChat 采用单机、单 Node 进程的部署模型,不需要单独运行数据库服务。生产环境建议由 Nginx 负责 HTTPS 和反向代理。

快速开始

环境要求

  • Node.js 22 或更高版本
  • pnpm 10.33.0
  • ffmpeg / ffprobe(生成音视频预览时需要)

安装与启动

corepack enable
corepack prepare pnpm@10.33.0 --activate

git clone https://github.com/help660vip/XChat.git
cd XChat
pnpm install --frozen-lockfile
pnpm start

打开 http://127.0.0.1:18282/setup 完成首位管理员初始化。

未提供 .env 时,应用会以本地开发配置启动:

  • 监听地址:127.0.0.1:18282
  • 数据目录:./data
  • 初始化 Token:xchat-development-setup-token

开发默认值只能用于本机测试,生产模式会拒绝使用该初始化 Token。

开发模式

pnpm dev

该命令会同时启动 Node.js watch 服务和 Vite 开发服务器。

配置

完整配置及说明位于 .env.example。生产环境可先复制一份:

cp .env.example .env

最重要的配置项如下:

配置项 说明
HOST Node.js 监听地址,生产环境建议保持 127.0.0.1
PORT 服务端口,默认 18282
NODE_ENV 生产环境必须设置为 production
DATA_DIR 数据库、附件、预览、秘密和备份目录
PUBLIC_ORIGIN 用户实际访问的 HTTPS 地址,不能带末尾斜线
SETUP_TOKEN 首次创建管理员使用的一次性 Token,生产环境至少 32 个字符
REGISTRATION_MODE 注册方式:openinviteclosed
COOKIE_SECURE 是否仅通过 HTTPS 发送会话 Cookie,生产环境必须为 true
ACCESS_TOKEN_TTL_SECONDS Access Token 有效期,单位为秒
REFRESH_TOKEN_TTL_SECONDS Refresh Token 有效期,单位为秒
MAX_MESSAGE_CHARS 单条文本消息允许的最大字符数
MAX_IMAGE_BYTES 单张图片大小上限
MAX_FILE_BYTES 单个普通文件大小上限
VIDEO_PREVIEW_ENABLED 是否生成视频预览
FFMPEG_PATH ffmpeg 可执行文件的绝对路径
FFPROBE_PATH ffprobe 可执行文件的绝对路径
WEB_PUSH_PUBLIC_KEY 可选的固定 VAPID 公钥,留空时自动生成
WEB_PUSH_PRIVATE_KEY 与 VAPID 公钥配套的私钥,必须妥善保管
EVENT_RETENTION_DAYS 实时同步事件的保留天数
LOG_LEVEL Pino 日志级别
TRUST_PROXY 部署在 Nginx 等反向代理后时设置为 true

生产环境启动前,XChat 会检查 HTTPS、Cookie、公开地址和初始化 Token 等安全配置。配置不符合要求时会直接拒绝启动。

不要将 .envDATA_DIR、数据库、附件、Token 或备份提交到 Git。

生产部署

仓库提供了 Debian 11 和 Debian 12 可用的部署示例:

推荐的目录布局:

/opt/xchat                 # 应用代码,只读
/var/lib/xchat             # 数据目录,可写
/etc/xchat/xchat.env       # 生产环境配置

部署前至少完成以下检查:

pnpm install --frozen-lockfile
pnpm check

然后将 .env.example 复制为 /etc/xchat/xchat.env,修改域名、数据目录和初始化 Token,再安装仓库内的 systemd 与 Nginx 示例配置。

启动后可检查服务状态:

curl --fail http://127.0.0.1:18282/health/live
curl --fail http://127.0.0.1:18282/health/ready

预期就绪响应:

{ "status": "ready", "database": "ok" }

首次部署完成后,访问 https://你的域名/setup,使用 SETUP_TOKEN 创建管理员。初始化成功后,该接口会永久关闭。

部署边界

  • 同一个数据目录只能由一个 XChat 进程写入。
  • 不要将活动中的 SQLite 数据库放在网络文件系统上。
  • 公网部署必须使用 HTTPS。
  • 反向代理需要正确转发 HostX-Forwarded-Proto 和 WebSocket Upgrade 请求头。
  • 调整附件大小限制时,需要同步修改 Nginx 的 client_max_body_size

更新、备份与恢复

更新前先创建备份:

pnpm backup

恢复备份必须在 XChat 服务停止后执行:

pnpm restore -- --from /path/to/backup --yes

恢复脚本会先检查备份清单和 SQLite 完整性,并保留恢复前的数据目录副本。备份中可能包含消息、附件和 Web Push 私钥,应存放在权限受控、加密且与应用主机隔离的位置。

管理员无法登录时,可以在停止服务后重置密码:

pnpm admin:reset-password -- --username admin

重置成功后,该账号已有的设备会话将全部失效。

常用命令

命令 用途
pnpm start 启动应用
pnpm dev 启动前后端开发环境
pnpm build 构建 Web 客户端
pnpm test 运行服务端和客户端测试
pnpm typecheck 执行 TypeScript 类型检查
pnpm lint 执行代码与文档约束检查
pnpm format:check 检查代码格式
pnpm check 运行完整质量检查
pnpm smoke 执行真实服务冒烟测试
pnpm stats 查看源码规模统计
pnpm backup 创建在线备份

项目结构

xchat/
├── main.js                 # 生产入口
├── client/                 # React 客户端源码和构建产物
├── server/                 # HTTP、领域服务、数据库与实时通信
├── shared/                 # 前后端共用协议常量
├── migrations/             # SQLite 数据库迁移
├── scripts/                # 开发、检查、备份和恢复脚本
├── deploy/                 # systemd、Nginx 与部署脚本
└── docs/                   # API 与扩展文档

文档

运行后还可以通过以下地址获取 OpenAPI 文档:

GET /api/v1/openapi.json

当前限制

XChat 当前主要面向单机自托管场景,暂不提供:

  • 端到端加密
  • 音视频通话
  • 多节点集群部署
  • 分片或断点续传式大文件上传

如果你的场景需要承载大量并发连接或超大规模历史消息,请先进行针对性压测,并评估数据库和实时事件架构的扩展方案。

安全

请不要在公开 Issue 中披露尚未修复的安全漏洞。报告方式、受支持版本和部署安全边界请参阅 SECURITY.md

License

XChat 使用 MIT License 开源。

About

一款轻量、现代、可自行部署的 Web 即时通讯应用,支持私聊、群组、频道、文件共享、实时同步与 Bot 扩展。

Topics

Resources

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages