简体中文 | [English](./README.en.md)

# IM即时聊天

### 介绍
Raingad-IM是一个开源的即时通信demo，需要前后端配合使用，主要用于学习交流，为大家提供即时通讯的开发思路，许多功能需要自行开发，开发的初衷旨在快速建立企业内部通讯系统、内网交流、社区交流。

|  类型 | 链接 |备注|
| --------- | ---- |---- |
| 技术分享站上线（官网）    | https://www.shooyu.cn | 书瑜网 |
| 前端源码（含后台管理）    | https://gitee.com/raingad/im-chat-front | 只维护后台管理 |
| 后端源码（已编译前端） | https://gitee.com/raingad/im-instant-chat |  |
| web端演示 | http://im.raingad.com/index.html |  |
| 移动端H5演示 | http://im.raingad.com/h5 | 需要付费获取 |
| 桌面端/安卓端 | 请进前端演示页下载 |  需要付费获取 |


体验账号：13800000002  密码：123456

尾号2、3、4......18、19、20 都是

体验账号：13800000020  密码：123456 

### 支持功能

- 支持单聊和群聊，支持发送表情、图片、语音、视频和文件消息
- 单聊支持消息已读未读的状态显示，在线状态显示
- 群聊创建、删除和群成员管理、群公告、群禁言、@群成员等
- 支持置顶联系人，消息免打扰；
- 支持设置新消息声音提醒，浏览器通知
- 支持管理员撤回群成员消息，支持群成员不能互相添加好友
- 支持一对一音视频通话（已打通web端和移动端，小程序不支持）
- 支持文件、图片和绝大部分媒体文件在线预览
- 支持移动端（由uniapp开发，可打包H5、APP和小程序）
- 全新支持企业模式和社区模式，社区模式支持注册、添加好友功能
- APP支持单聊消息在线、离线推送（需要自行申请unipush服务）
- 支持简易后台管理，包括用户管理、群组管理、系统设置等

### 最新更新
请查看右侧发行版更新日志

**v6.0.0** (2025年5月20日) 

1. 新增移动端和桌面端国际化，可以自由新增语言。
2. 新增群头像、消息已读、消息转发等消息队列处理；采用默认头像，取消后台生成文字头像，提升性能。
3. 新增定时清理消息可以删除文件，避免文件占用太大空间。
4. 移动端调整大量的UI界面和配色，更换了导航栏图标。
5. 移动端更换了新的保活插件，支持IOS，支持APP提示直接去系统设置消息通知权限和调整省电策略。
6. 移动端会话列表支持下拉刷新消息，支持双击导航栏消息图标，快速定位未读会话和@我的会话。
7. 移动端聊天记录列表采用虚拟列表，再多的数据也不对卡顿，采用z-paging，可以丝滑加载更多聊天记录。
8. 移动端聊天记录滚动时，可以看到新消息数量。
9. web端后台管理新增建议用户数据统计，可以查看在线用户数和设备数。
10. 桌面端新增音视频通话窗口移动，支持最小化到右下角，让聊天无遮挡，通话体验更佳！
11. 优化Lemon-IMUI组件的国际化，以及更新chatarea组件为最新版本。
12. 修复若干BUG！

### 软件架构

后端技术栈：`thinkphp6+workerman+redis`

前端技术栈：`vue2+Lemon-IMUI+element-UI` [仅更新后台管理，体验完整功能需要购买桌面端]

桌面端：`vue2+Lemon-IMUI+element-UI + electron` [联系作者，捐赠获取]

移动端：`uniapp for vue3 + pinia` [联系作者，捐赠获取]

### 安装教程

<b style="color:red">由于即时通讯的特殊性，严禁将源码用于木马、病毒、色情、赌博、诈骗等违反国家法律法规的行业，以及从事违法犯罪活动，如发现有使用本软件进行非法活动，将向有关部门举报和协助相关行政执法机关清查！</b>

> 本安装教程主要是服务端的安装，请认真仔细按照安装教程来，不要自作主张根据自己的想法来。请结合各个项目中根目录的项目说明文件`README.md`进行相应端的开发和发布。

> 安装程序需要有一定的PHP经验和服务器运维经验，如果没有请加入交流群联系作者，作者提供付费部署服务！

#### 准备工作

需要先安装好运行环境，推荐使用宝塔服务器【服务器最低配置2核2G】，安装LNMP的架构，建议使用nginx作为服务器，不建议使用apache。需要安装以下软件：
|  所需环境 | 版本 | 备注 | 推荐版本 |
| --------- | ---- | ---- | ---|
| linux    | >= 7.0 |  以下的版本未做测试   | 7.9 |
| nginx    | >= 1.17 |     | 最新的 |
| php | >= 7.1 |  不兼容8    | 7.3 |
| mysql    | >= 5.7 | 必须要5.7及以上     | 5.7 |
| redis    | >= 5.0 |     | 7.0 |

**重要操作**
>使用宝塔面板更易安装

<b style="color:red">以下内容，非常重要！！！！！如果出现错误，重新检查是否以满足条件。</b>

1、PHP需要安装扩展：`redis` `fileinfo`

2、PHP需要取消禁用函数：`shell_exec` `chown` `exec` `putenv` `proc_open` `pcntl_exec` `pcntl_alarm` `pcntl_fork` `pcntl_waitpid` `pcntl_wait` `pcntl_signal` `pcntl_signal_dispatch`

<b style="color:red">以上内容，非常重要！！！！！如果出现错误，重新检查是否以满足条件。</b>

#### 源码下载

下载发行版【推荐】
- 【推荐使用】下载完整源码放到自己的服务器上。请注意看gitee项目主页顶部右侧 [发行版链接（戳我下载）](https://gitee.com/raingad/im-instant-chat/releases) ，请在发行版中下载最新发布的版本。



#### 开始安装
1. 把代码上传至服务器，将整个目录权限给 `www` 用户，并赋予 `755`权限，创建网站，把网站的运行目录指向项目根目录下的 `public` 目录，运行目录一定要是这个。

2. 设置伪静态和反向代理，下面只展示nginx的伪静态和反向代理配置，apache的请自行百度或者使用chatGPT转换。【直接复制下面全部代码到伪静态中即可】


``` 
#伪静态配置
location ~* (runtime|application)/{
	return 403;
}
location / {
	if (!-e $request_filename){
		rewrite  ^(.*)$  /index.php?s=$1  last;   break;
	}
}

#反向代理配置，如果有修改端口，需要替换下方的8282端口

location /wss
    {
      proxy_pass http://127.0.0.1:8282;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "Upgrade";
      proxy_set_header X-Real-IP $remote_addr;
    }
```

3. 如果有域名并且要使用音视频通话、语音消息等服务还需要配置证书来开启HTTPS，可以使用免费的 `Let's Encrypt` 证书，如果不需要这些服务，可以直接使用HTTP协议和IP地址访问，但是功能会受限。
   
4. 访问你的ip或者域名即可进入自定义安装向导，如果访问出错，就是自己的准备工作没有按照要求进行，请检查。

5. 部署完成之后管理员账号密码为：`administrator`  `123456`，管理入口在聊天界面的左下角。
   
6. 安装成功后是无法实时接收消息的，请参考下一章“启动消息推送服务”。

#### 如果安装失败
1.  进入 `public\sql\database.sql` 将数据库导入自己的数据库。

2.  进入项目根目录，修改 `example.env` 为 `.env` ，并修改数据库相应的参数，**请仔细阅读env中的配置说明**。

PS：如需开启聊天文件存入oss，需要在后台中进行配置，配置后不要再对环境配置文件进行修改。

### 启动消息推送服务
因为是聊天软件需要用到websockt，所以我们需要启动workerman，系统已经内置了相应的服务，可以在后台管理首页 **（管理员账号登录后，从左下角进入）** 进行运行服务。如果后台运行启动不成功，需要进行以下调试：

**系统服务启动失败的原因：**

1. 你可能在终端启动了 `php think worker:gateway start` 或者 `php start.php start` 这两个命令，导致了重复启动消息推送造成了冲突，请在终端中运行 ` killall -9 php ` 或者重启启动服务器再重新到后台管理中启动系统服务。

2. 可能是php不是默认版本，终端执行 `php -v` 查看版本号是否和创建网站是选定的php版本不一致，如果不一致，需要把网站的版本修改为默认的php版本，并php安装对应的依赖和取消禁用函数。

3. 可能是执行的目录权限不够。重新对所有目录设置为 用户 `www` 权限 `755` ，再次重试。

**如果启动失败可进行调试**

1. 进入项目根目录 运行 `php think worker:gateway start` 即可运行消息服务，如果运行失败，请查看上方的准备工作。由于Workerman在Windows下有诸多使用限制，舍弃windows环境。如果没有出现报错，请将运行的命令终止，或者执行`php think worker:gateway stop` ，调试了没有问题的话，可以直接在管理后台启动消息推送服务

2. 消息服务需要放行 8282 端口，如需修改，请修改环境配置文件中`WORKER` 板块的相应参数。
   
3. 系统采用直接用域名作为websocket服务的地址，所以需要在网站的nginx中配置代理并监听8282端口，已在伪静态中写了代理配置的参数。

4. 更多关于workerman的使用，请进入[workerman官网](https://www.workerman.net/)官网进行查阅。


### 视频教程（无声）

[哟，原来有视频教程！！！](https://files.raingad.com/static/video/jiaocheng.mp4)

### 安装部署服务

作者提供本系统的安装服务，包括后端和前端部署到线上，保证项目的完美运行，200元/次，安装服务可赠送详细的安装教程以及接口文档，如有需要可以进群联系作者！

### 交流群
请先认真查看本页文档，如果有什么问题，可以留言，有购买移动端需求可以加入我们的QQ群。

【仅限有问题或者购买移动端需求才可以申请加入交流群（长时间不活跃的将被定期清理），加群前请先点Star，否则不予通过】

[QQ 交流群：1031495465](https://qm.qq.com/q/RgHdvLGiMk)


## 免责声明

### 1. 基本声明

本软件作为开源项目提供，在法律允许的最大范围内，开发者不对软件的功能性、安全性或适用性作出任何形式的保证，无论是明示的还是暗示的。

### 2. 使用风险声明

2.1 本软件按"现状"提供，使用者需自行承担使用本软件的全部风险。  
2.2 开发者不对软件的运行可靠性、适用性或与特定需求的兼容性提供任何保证。  
2.3 使用者应在充分评估风险的基础上决定是否使用本软件。

### 3. 责任限制与豁免

在任何情况下，开发者及其关联方均不对因使用或无法使用本软件而导致的任何损失或损害承担责任，包括但不限于：

- 数据丢失或泄露
- 利润损失
- 系统中断
- 商业机会损失
- 其他直接、间接或衍生性损失

### 4. 用户义务与责任

4.1 使用者应确保其对本软件的使用符合所有适用的法律法规要求。  
4.2 对本软件进行修改、分发或二次开发的使用者，需自行承担由此产生的全部责任，包括但不限于：

- 法律风险
- 知识产权风险
- 安全风险
- 数据保护责任

### 5. 开发者权利

5.1 开发者保留对本软件进行更新、修改、调整或停止维护的权利。  
5.2 开发者可能在不事先通知的情况下修改本软件或相关服务。  
5.3 开发者保留对本免责声明进行修改的权利。

### 6. 其他条款

6.1 本免责声明的任何部分被认定为无效或不可执行时，其余部分仍然有效。  
6.2 本免责声明的最终解释权归开发者所有。
