Ubuntu 18.04 部署开源聊天工具 Rocket.Chat 教程

发布于 2018-08-02  4.77k 次阅读


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命令,也可以使用foreverPM2这类软件,或者也可以用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,因此也只能小范围内用用。