最近突然发现一款开源im系统,界面简单,仿微信页面及功能,感觉挺好玩,但是官方的文档有点不便于像我这样的小白操作,于是便想使用宝塔来代替一大堆命令
盒子作者的自述
今天是2024.08.04,盒子IM3.0版本今天正式上线,过来更新一波文档。
自从去年2.0版本上线以来,盒子IM的关注度有了明显的增长,star数量仅今年就已经增长了1k+,甚至有几位抖音和公众号博主自发地对盒子进行了介绍和推广,让我收获了满满的成就感。
截止到今年3月份之前,本着为爱发电的精神,盒子IM一直都是纯开源且免费的。但是如果一直“发电”,终有被耗干的一天。所以今年3月份开始推出了第一个付费功能-单人音视频通话,6月底又推出了多人音音视频通话,未来还会推出更为完善的商业版。
不过尽管盒子IM未来会一定程度走商业化的路线,但是开源版本的功能也是会一直更新的,并且已经开源的功能也会一直开源下去。
这一年以来,盒子IM一直保持了高强度的更新,同时也几乎耗尽了我几乎所有的业余时间。很多小伙伴的私信和群里的消息,可能没有办法一一回复,还请见谅。
盒子im介绍
- 特点
●盒子IM是一个仿微信实现的开源聊天软件,支持内网部署,不依赖任何收费SDK或组件
●支持web端和移动端同时在线以及消息同步
●后端服务支持集群化部署,具有良好的横向扩展能力
●消息推送功能已进行SDK封装,可快速接入企业项目 - 合适人群
如果您是以下人群之一,那么盒子IM将会非常适合您:
●企业中的项目需要开发IM模块,希望快速整合盒子IM的部分功能
●对IM系统比较感兴趣,想学习如何独立编写一个优雅且高性能的IM系统 - 前置技能
尽管作者已经十分努力的降低盒子IM的使用门槛,但是在学习盒子IM前,还是需要您已经掌握以下技能:
后端:Springboot、Mybatis-plus、Netty、Mysql、Redis
前端:Vue、Uniapp - 功能展示
特点
●盒子IM是一个仿微信实现的开源聊天软件,支持内网部署,不依赖任何收费SDK或组件
●支持web端和移动端同时在线以及消息同步
●后端服务支持集群化部署,具有良好的横向扩展能力
●消息推送功能已进行SDK封装,可快速接入企业项目 - 合适人群
如果您是以下人群之一,那么盒子IM将会非常适合您:
●企业中的项目需要开发IM模块,希望快速整合盒子IM的部分功能
●对IM系统比较感兴趣,想学习如何独立编写一个优雅且高性能的IM系统 - 前置技能
尽管作者已经十分努力的降低盒子IM的使用门槛,但是在学习盒子IM前,还是需要您已经掌握以下技能:
后端:Springboot、Mybatis-plus、Netty、Mysql、Redis
前端:Vue、Uniapp - 功能展示

那么,废话不多说开始我的踩坑之路
准备工作
本文档使用单一一台服务器进行部署,相关环境如下:
系统 | centos7.6 |
内网IP | 192.168.43.10 |
外网IP | 42.194.187.243 |
域名 | www.boxim.online |
文档中所涉及的IP和域名,请自行替换
1. 准备工作
1. 服务器
购买(云)服务器,并开放以下端口:
端口 | 协议 | 端口占用组件 |
80 | tcp | nginx |
443 | tcp | nginx |
3306 | tcp | mysql |
6379 | tcp | redis |
9001 | tcp | minio |
9002 | tcp | minio |
3478 | tcp/udp | coturn |
5349 | tcp | coturn |
40000-65535 | udp | coturn |
注意:腾讯云服务器开放范围端口是用”,”分隔,所以最后一条开放端口应配置:40000,65535
ssl证书
注:非必须,如果需要使用语音和视频功能,则必须要有ssl证书,可以选购买或自签的方式获取证书
购买证书
可以直接选择向云厂商购买ssl证书,然后将证书放置/opt/ssl目录下,将私钥命名为server.key,证书命名为server.crt
自签证书(浏览器会有警告)
# 进入/opt/ssl目录
mkdir /opt/ssl
cd /opt/ssl
# 安装依赖包
yum install -y openssl openssl-devel
# 生成私钥,需要输入两遍相同的密码
openssl genrsa -des3 -out server.key 2048
# 生成CSR,需输入相关信息,乱填也行
openssl req -new -key server.key -out server.csr
# 取消私钥当中的密码,需输入刚才的密码
openssl rsa -in server.key -out server.key
# 生成SSL证书
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
域名
注:非必须,但如果要上线微信小程序,则必须要有域名
域名可向云厂商购买,大陆的服务器需要进行域名备案才可正常使用。
环境安装
宝塔面板安装(宝塔面板通用安装命令
if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh ed8484bec
安装nginx,minio,redis6.2,mysql8.0,java、安装jdk17
mkdir /usr/local/data
cd /usr/local/data
wget 这里可以自己找一下,我是传到自己服务器的/OpenJDK17U-jdk_x64_linux_hotspot_17.0.14_7.tar.gz
tar -xvf /usr/local/data/OpenJDK17U-jdk_x64_linux_hotspot_17.0.14_7.tar.gz -C /opt/
mv /opt/jdk-17.0.14+7/ /opt/jdk17
配置环境变量
在/etc/profile最下方添加
export JAVA_HOME=/opt/jdk17
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
刷新环境变量
source /etc/profile
java -version
下载并安装minio
cd /usr/local/data
wget https://dl.minio.org.cn/server/minio/release/linux-amd64/archive/minio.RELEASE.2024-07-26T20-48-21Z
mv minio.RELEASE.2024-07-26T20-48-21Z minio
chmod +x minio
mkdir /opt/minio
cp minio /opt/minio/
创建配置文件
在/opt/minio下创建minio.conf
#数据存放目录
MINIO_VOLUMES="/data/minio"
#端口号设置
MINIO_OPTS="--console-address :9002 --address :9001"
#用户名
MINIO_ROOT_USER="admin"
#密码
MINIO_ROOT_PASSWORD="3fBSt****uD77D6"
安装服务
在/etc/systemd/system下创建minio.service
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.targetmsts
After=network-online.target
#minio文件具体位置
AssertFileIsExecutable=/opt/minio/minio
[Service]
# User and group 用户 组
User=root
Group=root
#创建的配置文件 minio.conf
EnvironmentFile=/opt/minio/minio.conf
ExecStart=/opt/minio/minio server $MINIO_OPTS $MINIO_VOLUMES
# Let systemd restart this service always
Restart=always
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536
# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no
[Install]
WantedBy=multi-user.target
启动服务
# 启动
systemctl start minio.service
# 开机启动
systemctl enable minio.service
安装redis

安装好后,点击配置

设置密码并保存
点击配置文件,进行以下修改(Ctrl+F进行快捷搜索),修改后点击保存
# 以守护进程的方式运行
daemonize yes
# 支持远程访问
bind 0.0.0.0
# 关闭保护模式
protected-mode no

安装mysql8.0

安装成功后,点击侧边栏数据库,点击添加数据库,按照如下填写配置,点击确定

添加好后,点击导入,将box-im-master\db中的数据库文件(im-platform.sql,敏感词库初始化.sql)导入
【如果你是企业版/个人版,还需要新建一个名为im_admin的数据库,导入im-admin.sql文件导入到im_admin数据库中】
注意:这里要给你创建的数据库用户名权限(当然你也可以直接使用root用户和密码)
#调出数据库命令,输入root密码(宝塔里可以查看)
mysql -u root -p
#授予权限(im是我创建的数据库用户名)
SHOW GRANTS FOR 'im'@'localhost';
安装nginx
上传ssl证书到根目录 /opt/ssl/文件夹中(没有就创建),将私钥命名为server.key,证书命名为server.crt
下载1.22.1版本,下载后点击设置

点击配置文件

复制下面直接覆盖到原配置文件,修改后点击保存
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
client_max_body_size 50M;
sendfile on;
keepalive_timeout 65;
server {
listen 443 ssl;
server_name 192.168.43.10;
root html;
index index.html index.htm;
ssl_certificate /opt/ssl/server.crt;
ssl_certificate_key /opt/ssl/server.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
root im-web;
index index.html index.htm;
}
location /h5 {
alias im-h5;
index index.html index.htm;
}
location /api/ {
proxy_pass http://127.0.0.1:8888;
rewrite "^/api/(.*)$" /$1 break;
}
location /admin {
alias im-admin;
index index.html index.htm;
try_files $uri $uri/ /admin/index.html;
}
location /adm/api/ {
proxy_pass http://127.0.0.1:8889;
rewrite "^/adm/api/(.*)$" /$1 break;
}
location /download {
alias download;
}
location /protocol {
alias protocol;
}
location /file/ {
proxy_pass http://127.0.0.1:9001;
rewrite "^/file/(.*)$" /$1 break;
}
location = /im {
proxy_pass http://127.0.0.1:8878;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
server {
listen 80;
server_name 192.168.43.10;
rewrite ^(.*)$ https://$host$1 permanent;
}
}
安装coturn(视频聊天)
上传到服务器的/usr/local/data目录
cd /usr/local/data
tar -zxvf coturn-4.5.1.1.tar.gz
cd coturn-4.5.1.1
./configure --prefix=/opt/coturn
make
make install
创建用户
cd /opt/coturn/bin
./turnadmin -k -u admin -r www.boxim.online -p UrHH****nFvBTMV
生成证书
mkdir /opt/coturn/ssl
openssl dhparam -out /opt/coturn/ssl/dhparams.pem 2048
openssl req -x509 -newkey rsa:2048 -keyout /opt/coturn/ssl/turn_server_pkey.pem -out /opt/coturn/ssl/turn_server_cert.pem -days 99999 -nodes
修改配置(/opt/coturn/etc/turnserver.conf)
# 网卡名(ip addr命令查看自己的网卡名) relay-device=eth0 # 密码 cli-password=UrHH****nFvBTMV # 内网IP listening-ip=192.168.43.10 listening-port=3478 tls-listening-port=5349 # 内网IP relay-ip=192.168.43.10 relay-threads=500 # 外网IP external-ip=42.194.187.243 # 设置用户名和密码,跟上面创建的用户的账号密码一致 user=admin:UrHH****nFvBTMV # udp端口范围 min-port=40000 max-port=65535 # 外网IP绑定的域名 realm=www.boxim.online # 打开密码验证 lt-cred-mech # 证书 cert=/opt/coturn/ssl/turn_server_cert.pem pkey=/opt/coturn/ssl/turn_server_pkey.pem dh-file=/opt/coturn/ssl/dhparams.pem
启动
/opt/coturn/bin/turnserver -v -r www.boxim.online:3478 -a -o -c /opt/coturn/etc/turnserver.conf
- 检测生效网站:点这里,出现done提示表示成功
- 后端接口修改路径box-im-main\im-platform\src\main\resources\application-prod.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/im_platform?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true
username: im
password: naQR****Gv2j7PX_
data:
redis:
host: localhost
port: 6379
password: PmEpfRj****N6CgW
minio:
endpoint: http://127.0.0.1:9001 #内网地址
domain: https://www.boxim.online/file #外网访问地址
accessKey: admin
secretKey: 3fBSt****uD77D6
bucketName: box-im
imagePath: image
filePath: file
videoPath: video
webrtc:
max-channel: 9 # 多人通话最大通道数量,最大不能超过16,建议值:4,9,16
iceServers: #coturn配置
- urls: stun:www.boxim.online:3478
username: admin
credential: UrHH****nFvBTMV
- urls: turn:www.boxim.online:3478
username: admin
credential: UrHH****nFvBTMV
box-im-main\im-server\src\main\resources\application-prod.yml
spring:
data:
redis:
host: 127.0.0.1
port: 6379
password: PmEpfRj****N6CgW
编译
进入盒子IM代码根目录,执行
mvn clean package -Dmaven.test.skip=true
如果报错,试试
mvn clean package "-Dmaven.test.skip=true"
将生成的box-im-main\im-platform\target\im-platform.jar和box-im-main\im-server\target\im-server.jar拷贝到生产机器的/data/boxim目录(也可以是你自定义目录,怎么方便怎么来。我这边是放在宝塔的网站目录)
启动
在jar包所在目录执行终端命令(宝塔内含)
# 启动im-platform nohup java -jar im-platform.jar --spring.profiles.active=prod & # 启动im-server nohup java -jar im-server.jar --spring.profiles.active=prod &
- 部署web端,APP,H5端请前往官方文档,没什么太复杂的点这里进入盒子官方文档不过要注意一点,在hbuilder里,要执行安装一下quill-image-resize-mp,我这边打包回报错没这个依赖npm install quill-image-resize-mpweb和h5要上传到宝塔内Nginx目录下,一般为/www/server/nginx(因为没整明白直接创建网站怎么访问,可能需要配置伪静态,不太懂,有懂的可以交流交流)
- 打包后台服务
安装node:v18.19.0,安装jdk:17,安装maven:3.9.6(具体安装步骤请百度,这里不做详细安装教程)
后端需要创建im-admin数据库,并进行导入,步骤与上面im-platform相似,请往上翻
你还需要修改\box-im-admin-main\im-admin\ruoyi-admin\src\main\resources\application-prod.yml中的相应配置(mysql,redis,minio)
这题提醒一下,可能redis要把localhost改成127.0.0.1(我这里用localhost报错)进入 im-admin目录,打开控制台mvn clean package快速构建项目而不运行测试,可以使用以下命令跳过测试:mvn clean install -DskipTests将jar包上传到服务器目录,然后执行启动命令 - nohup java -jar im-admin.jar –spring.profiles.active=prod &
- 打包后台ui
进入 im-admin-ui目录,打开控制台npm installnpm run build将build出来的目录传到服务器如果想使用原域名+后缀进行访问
请把build出来的目录传到/www/server/nginx目录下,并修改目录名为im-admin,在nginx的配置文件中增加
location /admin { alias im-admin; index index.html index.htm; } location /adm/api/ { proxy_pass http://127.0.0.1:8889; rewrite "^/adm/api/(.*)$" /$1 break; }
宝塔安装盒子im - 来源:道谕轩
作者:道 谕轩
转载请注明:https://xinzt.ren/?p=4587