有很多小伙伴都有过搭建一个自己的聊天服务应用的想法,摆脱微信、QQ等第三方应用,更加注重自己的隐私,或更好的存储自己的文件。
我发现了一款开源的聊天应用RocketChat,能够实现群组聊天,直接通信,私聊群,桌面通知,媒体嵌入,链接预览,文件上传,语音/视频 聊天,截图等等,还支持实时翻译,实现用户之间的自动实时消息转换,使用RocketChat可以完全控制交流通信。
准备
功能听起来还不错,我们一起来搭建一下,我这里使用以下配置:
# 基础环境, 我这里用的学生机,大家可以调高一点配置 1.CentOS 7.6 1CPU/2G/60G 2.开放公网3000端口
另外需要搭建起docker运行环境,在之前的教程中有讲过使用一键脚本,如果不清楚可以翻看前面的教程。
[root@mx ~]# docker -v Docker version 20.10.9, build c2ea9bc [root@mx ~]#
部署
部署MongoDB
首先创建一个自定义网络,用于容器间的相互隔离访问。
# 这里我创建一个mynet的网络 [root@mx ~]# docker network create --subnet=172.18.0.0/16 mynet e931682423fb3ce386fe8ccff2d4a1207a49de0f6cbb938290aaf94a680d2e33 [root@mx ~]# docker network ls NETWORK ID NAME DRIVER SCOPE a187d39a9c31 bridge bridge local a009b92afbec host host local e931682423fb mynet bridge local f7101068a933 none null local [root@mx ~]#
RocketChat依赖于MongoDB运行环境,先采用Docker方式部署一下
mkdir -p /opt/docker/mongodb # 新建一个配置文件 vim /opt/docker/mongodb/mongod.conf
下面是mongod.conf的内容,请粘贴到文件中, 然后使用esc和:x保存退出。
# mongod.conf # for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/ # Where and how to store data. storage: dbPath: /data/db journal: enabled: true # engine: # mmapv1: # wiredTiger: # network interfaces net: port: 27017 bindIp: 127.0.0.1 # how the process runs processManagement: timeZoneInfo: /usr/share/zoneinfo #security: # authorization: "enabled" #operationProfiling: replication: replSetName: "rs01" #sharding: ## Enterprise-Only Options: #auditLog: #snmp:
使用以下命令创建运行镜像。
docker run \ -itd \ -e PGID=1000 \ -e PUID=1000 \ --name=MongoDB \ --net=mynet \ --ip=172.18.0.2 \ -e TZ=Asia/Shanghai \ -p 27017:27017/tcp \ -v /opt/docker/mongodb/:/data/db:rw \ --hostname mongodatabase mongo \ -f /data/db/mongod.conf
由于docker的镜像服务器在国外,所以下载较慢,如果遇到以下类似的错误,请多试几遍。
使用命令查看运行状态,如果没有其它报错则安装正常。
# 查看正在运行的容器 docker ps
配置MongoDB
我们需要对MongoDB进行一系列的配置。
# 进入到容器内部 [root@mx ~]# docker exec -it MongoDB bash root@mongodatabase:/# # 容器内部进入mongodb root@mongodatabase:/# mongo # 使用以下命令,注意括号 mongodatabase:SECONDARY> rs.initiate() { "ok" : 0, "errmsg" : "already initialized", "code" : 23, "codeName" : "AlreadyInitialized", "$clusterTime" : { "clusterTime" : Timestamp(1635072585, 2), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } }, "operationTime" : Timestamp(1635072585, 2) } # 使用管理员操作数据库 mongodatabase:PRIMARY> use admin switched to db admin mongodatabase:PRIMARY> # 创建管理员和rocketchat数据库, 这里我把密码都修改为admin123,大家可对应修改 db.createUser({user: "root",pwd: "admin123",roles: [{ role: "root", db: "admin"}]}) db.createUser({user: "rocketchat",pwd: "admin123",roles: [{role: "readWrite", db: "local" }]}) # 切换用户 use rocketchat db.createUser({user: "rocketchat",pwd: "admin123",roles: [{role: "dbOwner",db: "rocketchat" }]})
如果你的操作结果与我类似,那么恭喜你创建成功。
将24-25行前的注释取消掉,保存后重启mongodb。
docker start MongoDB
部署RocketChat
使用下面的命令部署镜像,如果下载较慢或超时可以多试几次。
docker run \ -itd \ -e PGID=1000 \ -e PUID=1000 \ --name=RocketChat \ --net=mynet \ --ip=172.18.0.3 \ -e TZ=Asia/Shanghai \ -e MONGO_URL=mongodb://rocketchat:admin123@172.18.0.2:27017/rocketchat \ -e MONGO_OPLOG_URL=mongodb://rocketchat:admin123@172.18.0.2:27017/local?authSource=admin \ -p 3000:3000/tcp \ -v /opt/docker/rocketchat:/app/uploads:rw library/rocket.chat
最后就可以愉快地玩耍了,发个表情试试~
结语
安装成功后,可以使用ssl证书将网站加密,可以更加的安全。而且使用客户端连接到私有服务器时,http协议不会被连接。
如果你安装时遇到有问题,无法继续下去,可以私信联系我获得帮助(可提供shell一键脚本)。