05 使用node.js配置Anonymous chatroom

项目地址:https://github.com/velor2012/anonymous-chat-room

这位作者老兄不可谓不懒,写的说明简略得不能再简略。但好处也是有的,如果只是简单抄几行代码或者来个一键脚本就可以搞定,那还怎么在摸索中对Linux产生又爱又恨的情感呢。

一、安装并测试Dev

首先确认一下Git是否安装。

git --version

如果不出现版本,则安装git:

sudo apt install git

这里,用apt或apt-get是等效的,apt相当于是集中了apt-get、apt-cache、apt-config中常见命令的集合。因此通常情况下apt就够用了。

然后安装node.js、npm,然后用npm来安装yarn:

sudo apt install nodejs
sudo apt install npm
sudo npm install --global yarn

这里,为什么要用--global来安装yarn?因为yarn是一个命令行工具,我们希望在任何位置来使用它。

好了,按照作者的提示,现在node.js、npm、yarn都装好了,他说,你可以运行:

git clone git@github.com:velor2012/anonymous-chat-room.git

实际上,运行并没有成功,因为该VPS服务器没有将公钥添加到我的Github账户中。然而这不是一个必选项,因为我们可以通过网址的方式直接Git:

git clone https://github.com/velor2012/anonymous-chat-room.git

此时应可clone成功。它默认在/root下创建了一个目录:anonymous-chat-room,注意,我们可能需要刷新winscp或重新登录才能看到该目录。项目中有一些文件是隐藏的,例如关键的配置文件.env.example。因此建议在winscp的选项的“面板”设置里显示隐藏文件。

按照作者的提示,我们进入项目路径,并执行install:

cd anonymous-chat-room
yarn install

不出意外,意外又发生了,install过程中,提示node.js版本过低。奇怪不奇怪?惊喜不惊喜?我们需要借助一个叫“n”的nodejs版本管理工具来升级node.js。

sudo npm install n -g

其中,参数-g是--global的缩写。

然后,用n来升级nodejs:

sudo n stable

stable意思是升级到最新的稳定版本。它会下载一个最新版本,但不一定会当场替换它,我们可能还需要根据sudo n stable的输出提示,执行一个hash命令:

hash -r

再用 node -v来检查当前的node.js版本:

node -v

确定版本满足yarn install的要求。好了,现在可以重新install(确保当前目录位于项目路径:/root/anonymous-chat-room):

yarn install

安装成功之后,首先要进行配置。由于项目依赖于livekit.io提供的服务,我们需要到https://cloud.livekit.io/上注册一个帐号,创建一个项目,然后从项目的Settings-KEYS中,获取websocket url、api_key、api_secret(这个需要点一下reveal secret按钮)。将这些值记录下来,然后回到项目路径:/root/anonymous-chat-room,将.env.example重命名为.env.local,然后编辑其内容,将前面三个值依葫芦画瓢填进去。

注意,.env.local最后一行NODE_TLS_REJECT_UNAUTHORIZED默认值是0,暂时不要改,因为我们首先需要在http模式下测试它。

打开防火墙的3000端口:

sudo ufw allow from any to any port 3000

用npm来启动项目:

npm run dev

它启动后会出现一些提示,并且停留在运行界面。这时候用IP:3000已经可以访问网站了。

二、Build生产环境,配置后台运行、开机启动运行

很快发现,如果断开putty连接,进程终止,则网站也停止了。同时,发现dev模式下,网站打开的速度极慢。用Chrome分析发现,关键的js大小超过1M,加载甚至达到25s以上。这是因为dev默认是加载了vue全家桶,其中绝大部分是用不着的,我们需要通过build来优化它。

重新putty连接服务器,先不要运行它,进入项目路径/root/anonymous-chat-room。

执行build:

yarn build

它将生成一个标准的,用于生产环境的.nextjs网站。用yarn来启动它:

yarn start

再次测试网址:IP:3000,会发现已经秒开网站,速度的问题解决了。

如何让它后台运行,并每次开机自动运行呢?需要用到pm2工具。首先安装它:

npm install -g pm2

用pm2来执行yard start命令,并将它重命名为chatroom:

pm2 start "yarn start" --name chatroom

这时候,chatroom网站已经在后台运行了。我们需要进一步将它设置为开机启动:

pm2 startup

这时候pm2会写入一些配置文件,以使得ubuntu在启动时自动执行pm2程序清单。为确保万无一失,还可以再手动执行一下save命令:

pm2 save

此时可以重启服务器测试一下,发现IP:3000已经可以做到自动启动。

三、完成网站配置

由于Anonymous chatroom的通话等功能必须使用加密通道,因此SSL是必须的。这一步就比较简单了。把SSL信息保存到服务器,配置一个通常的SSL网站,并设置反向代理:

location / {
	proxy_pass http://【公网IP】:3000;
}

同时,为了确保安全,打开项目配置文件.env.local,将最后一行的NODE_TLS_REJECT_UNAUTHORIZED值改为1。

刷新nginx配置:

nginx -s reload

这时候,已经可以正常使用https://【域名】来访问Anonymous chatroom服务了。