一、速览

入门

Fiora 是一个基于 Node.js、React 与 Socket.IO 开发的开源聊天应用,后端、Web 前端、Android 与 iOS 客户端都在同一个仓库里维护。它是一个「即开即用」的私有聊天室方案:注册账号、进入群组或创建群组、加好友私聊,整个流程和主流聊天软件的体验一致。

它解决的痛点很具体:如果你需要一套能部署在自己服务器上的聊天服务,又不想从零开发后端实时通信逻辑,Fiora 可以直接拿来用。数据落在自己的 MongoDB 里,消息走 WebSocket 实时推送,前端界面默认支持主题定制与多消息类型,这些都不需要你额外开发。

它的技术栈对前端开发者门槛很低。Node.js 对上手过 Express 的人不陌生,Socket.IO 将实时通信封装得足够友好,React 前端也能直接改样式或功能。

二、快速部署

入门

Fiora 官方推荐基于 Docker 部署,整个服务分成两部分:fiora-server(Socket.IO 服务端)与 fiora-client(React Web 端)。两者加上一个 MongoDB 实例,就是一套完整的聊天服务。

Docker 部署最小组合如下:

git clone https://github.com/yinxin630/fiora.git
cd fiora

# 构建服务端与客户端镜像
docker build -t fiora-server ./packages/server
docker build -t fiora-web ./packages/client

构建完成后,建议直接用一个 docker-compose 编排起 MongoDB、服务端和 Web 端。新建 docker-compose.yml

version: "3"
services:
  mongo:
    image: mongo:6
    container_name: fiora-mongo
    volumes:
      - ./data/mongo:/data/db
    restart: always

  server:
    image: fiora-server
    container_name: fiora-server
    environment:
      - PORT=9200
      - MONGODB=mongodb://mongo:27017/fiora
    ports:
      - "9200:9200"
    depends_on:
      - mongo
    restart: always

  web:
    image: fiora-web
    container_name: fiora-web
    environment:
      - SERVER_URL=http://localhost:9200
    ports:
      - "8080:80"
    depends_on:
      - server
    restart: always
docker compose up -d

浏览器访问 http://服务器IP:8080,看到登录页即部署成功。

注意SERVER_URL 是给浏览器用的地址。如果你是云服务器并对公网开放,这里要填 http://你的服务器公网IP:9200,否则浏览器会尝试连接用户本机的 9200 端口。

不打算用 Docker 时也可以直接源码跑。要求 Node.js 14.16 及以上版本与 MongoDB 实例:

git clone https://github.com/yinxin630/fiora.git
cd fiora
yarn install
yarn build
yarn start

服务端默认监听 9200 端口,Web 端默认在 8080 端口提供页面。

三、配置详解

进阶 · 推荐细读

部署起来只是第一步,Fiora 的配置项直接决定它在生产环境能不能稳定跑。核心配置主要是服务端的环境变量与 MongoDB 数据源。

项目 环境变量 默认值 说明
服务端监听端口 PORT 9200 Socket.IO 长连接服务端口
MongoDB 连接串 MONGODB mongodb://127.0.0.1:27017/fiora 容器内编排时填 MongoDB 容器名
Web 端服务端地址 SERVER_URL 无(必填) 浏览器访问的服务端地址,含端口
客户端静态端口 80 客户端镜像内置 Nginx 提供静态文件

Fiora 自身的业务数据(用户、群组、聊天记录)全部存在 MongoDB 里,因此容器的持久化重点在数据库。Docker 部署时,MongoDB 容器的数据目录为 /data/db,上面 compose 文件里已经映射到了宿主机的 ./data/mongo

生产环境有一个常见问题:客户端端口直接暴露 8080,服务端暴露 9200,两个端口都裸奔在公网上,既不好看也不好管。建议用 Nginx 做反向代理,让浏览器统一走 443 端口,WebSocket 反向代理时还需要单独处理升级请求。

server {
    listen 443 ssl;
    server_name chat.example.com;

    ssl_certificate     /etc/nginx/ssl/example.crt;
    ssl_certificate_key /etc/nginx/ssl/example.key;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }

    location /socket.io/ {
        proxy_pass http://127.0.0.1:9200;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}

配置好后,给客户端设置 SERVER_URL=https://chat.example.com,不要再把 9200 端口直接映射到公网。

四、功能导览

入门

Fiora 聊天界面

部署完成后,注册一个账号即可进入主界面。Fiora 的核心交互围绕左侧频道列表与中央消息区展开,新用户上手基本不需要学习成本。

聊天本身支持文本、Emoji 表情、图片、代码块、文件与指令消息。输入框里写 Markdown 格式的代码块,发送后会自动渲染为带高亮的代码卡片,这对技术团队内部沟通是很实用的能力。

群组与私聊是两套独立体系:任何人都可以创建新群组,群组消息会广播给所有成员;私聊则要求双方先加为好友。好友关系是单向的,发起申请后对方确认即建立连接。

个性化是 Fiora 的另一个亮点。设置里可以更换主题色与聊天背景,相当于给自己搭了一个有品牌感的私人聊天室,而不是套用现成的 IM 皮肤。

管理员能力集中在服务端控制台与指令上。群组创建者可以将成员设为管理员,管理员拥有禁言、踢人等基础管理操作,适合社区或团队自建服务时做成员约束。

五、常见问题与运维进阶

<span

项目信息

项目
仓库 yinxin630/fiora
语言 TypeScript
Star 7,168
Fork 1,401
主页 https://fiora.suisuijiang.com

参考链接