Rocket.Chat是一款功能强大的开源聊天软件。它支持大多数主流客户端,而且有着丰富的扩展功能。如果想要自己搭一个聊天室玩玩,它应该是一个不错的选择。
废话不多说,接下来我就来介绍一下如何在Ubuntu Server上搭建Rocket.Chat服务端。
1.Rocket.Chat介绍
项目地址:https://github.com/RocketChat/Rocket.Chat
官方网站:https://rocket.chat/
2.搭建条件
想要搭建一个Rocket.Chat服务端,至少得满足以下条件:
- 服务器内存在1GB及以上
- 手头有一个域名
3.搭建步骤
3.1.安装依赖
Rocket.Chat需要以下依赖:
- Node.js
- MongoDB
- CURL
- Graphicsmagick
Node.js当然还是使用由NodeSource编译的源。
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
由于直接使用apt
安装的MongoDB版本比较落后,这里推荐用添加软件源的形式来安装。
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4 echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list
添加好Node.js与MongoDB的源之后先更新一下然后再来安装四个依赖。
apt update apt install nodejs mongodb-org curl graphicsmagick -y
目前(2018年8月3日)官方推荐用8.9.3版本的npm编译Rocket.Chat。运行下面的命令安装npm版本修改工具并修改npm版本。
npm install -g n n 8.9.3
至此,Rocket.Chat所需要的依赖已全部安装完毕。
3.2.域名解析
由于新添加的域名解析到生效需要一定的时间,建议现在先来解析一下域名。这里就以域名chat.example.com
为例进行接下来的介绍。
域名解析不用多说,设置一条A
记录即可。
域名解析完了之后,需要改一下主机名。
首先,修改/etc/hostname
文件。
vim /etc/hostname
将里面的内容换成解析到该服务器上面的域名所用的主机名。(例如我把chat.example.com
解析到了我的服务器上,那么主机名就是前面的chat
)
然后,修改/etc/hosts
文件。
vim /etc/hosts
这个文件里面应该有很多行。找到127.0.0.1
开头的那一行,把它修改成像是这样的格式:
127.0.0.1 example.com chat localhost localhost.localdomain
修改完毕之后重启服务器,从而让新的主机名生效。(你肯定知道重启的命令是reboot
(o゜▽゜)o☆)
3.3.创建MongoDB服务
有可能刚刚安装的MongoDB没有顺带安装MongoDB服务。
如果你运行service mongod status
这条命令时,系统提示“Failed to start mongod.service: Unit not found”,那就自己创建一个服务吧。
cat >> /etc/systemd/system/mongod.service << EOF [Unit] Description=High-performance, schema-free document-oriented database After=network.target [Service] User=mongodb ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf [Install] WantedBy=multi-user.target EOF
把上面的东西全部复制进终端之后,一个MongoDB服务就已经创建好了。现在先来测试一下MongoDB能否通过这个服务启动。
systemctl start mongod systemctl status mongod
运行正常的话就表示MongoDB已经能够通过这个服务来启动或者关闭了。需要开机启动的话输入下面这个命令回车。
systemctl enable mongod
3.4.优化MongoDB(可选)
对MongoDB进行一些优化可以提升Rocket.Chat的运行效率。由于这一步并不是必须要做的,你也可以选择跳过这部分的内容。
3.5.安装Rocket.Chat
个人推荐把Rocket.Chat安装到/var/www
目录。(其实安装到别的目录并没有什么影响)
首先,先创建并且进入这个目录。
mkdir /var/www && cd /var/www
接着下载最新的Rocket.Chat的源码到这个目录。
wget https://releases.rocket.chat/latest/download -O /var/www/rocketchat.tar
解压并删除压缩包,同时将解压后得到的文件夹改名为rocketchat
。
tar -xvf rocketchat.tar && rm rocketchat.tar && mv bundle rocketchat
使用npm编译安装Rocket.Chat。
cd rocketchat/programs/server npm install
安装完毕之后,先来添加几个必要的环境变量。别忘了把第一个环境变量里面的域名换成你自己的。
export ROOT_URL=http://example.com:3000/ export MONGO_URL=mongodb://localhost:27017/rocketchat export PORT=3000
然后运行一下Rocket.Chat试试。
cd ../.. node main.js
运行正常的话就按CTRL+C
关闭Rocket.Chat服务端。
3.6.创建Rocket.Chat服务
显然用上面那条命令来运行Rocket.Chat服务端不是个明智的选择。
让它保持在后台运行的方法有很多,可以使用nohup
命令,也可以使用forever
、PM2
这类软件,或者也可以用screen
。这里就不一一介绍了。下面介绍的是以创建服务的方法让Rocket.Chat服务端保持在后台运行。
把下面这些命令全部贴到终端里面以创建一个Rocket.Chat服务。相信你肯定知道要把里面的域名换成自己的。
cat >> /etc/systemd/system/rocketchat.service << EOF [Unit] Description=RocketChat Server After=network.target remote-fs.target nss-lookup.target mongod.target nginx.target [Service] ExecStart=/usr/local/bin/node /var/www/rocketchat/main.js Restart=always RestartSec=10 StandardOutput=syslog StandardError=syslog SyslogIdentifier=nodejs-example #User=<alternate user> #Group=<alternate group> Environment=NODE_ENV=production PORT=3000 ROOT_URL=https://chat.example.com MONGO_URL=mongodb://localhost:27017/rocketchat [Install] WantedBy=multi-user.target EOF
创建完毕之后开启测试一下。
systemctl start rocketchat systemctl status rocketchat
没问题的话,接下来就可以通过这个服务来开关Rocket.Chat服务端了。
想要开机启动的话就输入这条命令:
systemctl enable rocketchat
3.7.配置Nginx反向代理
如果你是完全按照上面的步骤来搭建Rocket.Chat服务端的话,那么它默认将会运行在3000端口。相信你在浏览器中访问时肯定不大愿意在域名后面再跟一个:3000
,多麻烦啊。那就来配置个Nginx反向代理吧,配置完了你就可以通过80和443端口访问了。
第一步,当然是安装Nginx咯。这里建议用Ondřej Surý大佬制作的PPA来安装。
apt install software-properties-common add-apt-repository ppa:ondrej/nginx-mainline apt update apt install nginx -y
安装完毕之后就可以创建一个配置文件了。这里建议用vim
来创建,因为cat >> file << EOF
会吃掉配置文件里面的所有变量。
vim /etc/nginx/conf.d/rocketchat.conf
配置文件格式大致如下,直接拿来用也无妨,但是记得把域名和SSL证书路径换成自己的。
(后排提醒:由于写这个配置文件时的我水平比现在还菜,所以写法不是很好,并不推荐使用~)
upstream backend { server 127.0.0.1:3000; } server { listen 443; server_name chat.example.com; error_log /var/log/nginx/rocketchat.access.log; ssl on; ssl_certificate /etc/nginx/ssl/rocket-chat.crt; ssl_certificate_key /etc/nginx/ssl/rocket-chat.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; location / { proxy_pass http://backend/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forward-For $proxy_add_x_forwarded_for; proxy_set_header X-Forward-Proto http; proxy_set_header X-Nginx-Proxy true; proxy_redirect off; } } server { listen 80; server_name chat.example.com; return 301 https://chat.example.com$request_uri; }
配置文件创建完毕之后运行这条命令测试一下。
nginx -t
没问题的话就重启下nginx服务,使配置文件生效。
service nginx restart
至此,Rocket.Chat服务端终于全部部署完毕。可喜可贺,可喜可贺。ヽ( ̄ω ̄( ̄ω ̄〃)ゝ
赶紧访问你的域名,创建第一个管理员账号吧~
4.个人吐槽
稍微用了用这个聊天工具,感觉用户体验毫不逊色于当前国内主流的任何一款聊天工具。就是我没办法把身边人全忽悠来用Rocket.Chat,因此也只能小范围内用用。
6 Comments
IvanShen 博主
最近部署这个,好多功能还不行,英文文献看不懂也是烦
Omega 博主
@IvanShen
没办法,这个软件在中文圈子里面不是很火,要搞的话不得不去啃英文文档_(:з)∠)_
IvanShen 博主
@Omega
小姐姐,要不你帮我看一下https://github.com/RocketChat/Rocket.Chat/issues/1927这个描述的问题,我现在是部署成功后,Windows端,与网页端都能正常使用。但是手机端与IOS能不能连接。我是看了你的教程,结合了https://blog.biezhi.me/2018/11/installing-rocketchat-with-ubuntu.html 采用snap方式安装,因为这样服务端方便更新。但是却碰见了这样一个移动端不能访问的问题。我实在是英文太差,Google翻译,已经加上自己了洪荒之力。
Omega 博主
@IvanShen
看了一下,这个问题的大致解决办法是把手机端和服务端全部更新成最新版本,如果依旧不行的话就检查一下Nginx配置文件。另外那个Issue中有人贴出了似乎能用的配置文件,不妨参考一下进行适当修改~
IvanShen 博主
@Omega
问题已经解决了,还是nginx配置的问题。感谢感谢。
Omega 博主
@IvanShen
恭喜~这样就能在手机端愉快地使用啦