Nodejs服务器部署

凡是可以用 Javascript 来写的应用,最终都会用Javascript来写。
近些年 Nodejs 异常的火爆,因此有一些服务端也开始使用 js 来写了。
作为前端开发工程师,nodejs也是必须要掌握的一项技能了。
最近在网上买了个云服务器,于是想搭个 Node 服务出来,顺便学习了如何搭建服务器 nodejs 环境。

一、Nodejs的安装

现在,在 Windows 上和 Mac 等拥有图形界面的机器上安装 nodejs 还是很方便的,去官网下载安装包,然后下一步、下一步、下一步…就可以了。
而在没有图形界面的机器,比如服务器上安装就稍微麻烦些了,没有固定的安装包。
此时,我们有两种方式来在服务器上安装

1
2
1)直接下载二进制文件进行安装,这种方式下载下来配置下环境变量就可以用了。
2)通过下载 Nodejs 的源码,然后手动编译,最终编译成二进制文件(进入第一中方式),然后配置环境变量。

官方下载地址: https://nodejs.org/en/download/

注意:
如果使用第一种方式,选择直接下载二进制文件,需要注意系统的版本,如果版本对不上可能会出现运行报错的情况。
第二种方式,下载源码直接在服务器上手动编译。

方法1、通过二进制文件安装(推荐)

1
2
3
4
5
6
7
wget https://nodejs.org/dist/v16.18.0/node-v16.18.0-linux-x64.tar.xz # 获取nodejs最新包,版本号可选最新的
xz -d node-v16.18.0-linux-x64.tar.xz # 两次解压
tar -xvf node-v16.18.0-linux-x64.tar

cd node-v16.18.0-linux-x64
export PATH=/home/xxx/nodejs/node-v16.18.0-linux-x64/bin:$PATH # 在 ~/.bashrc 文件中追加此句,设置环境变量
source ~/.bashrc # 重新加载此配置文件

方法2、通过源码编译安装

首先将 nodejs 的源码安装包下载下来,然后解压编译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
apt-get update # 更新已安装的包 若提示权限不足,在前面加上sudo
wget https://nodejs.org/dist/v16.18.0/node-v16.18.0.tar.gz # 获取nodejs最新包,版本号可选最新的
tar -zxvf node-v16.18.0.tar.gz # 解压 nodejs 源码包
cd node-v16.18.0
./configure
make # make编译需要花较长的时间
make install # 如果发现权限异常,需要在命令前面加上sudo
./node -v # 编译成功之后,在当前目录下能看到名为 node 的文件,执行 ./node -v 可以看到最新 nodejs 的版本号

# 此时说明 nodejs 二进制文件可执行,但是此时还不能在全局上使用 node 命令,需要配置环境变量。
# 配置环境变量的方式网上很多,比如编辑 .bashrc 文件,然后执行 source .bashrc 重新加载此文件
export PATH=/home/xxx/nodejs/node-v16.18.0-linux-x64/bin:$PATH # 在.bashrc 文件中追加此句,设置环境变量

node -v #v16.18.0 查看当前安装的Node的版本,安装完成

make 的时候可能会报这个错误:

1
WARNING: failed to autodetect C++ compiler version (CXX=g++)

解决办法,手动编译

1
2
apt-get install build-essential # 安装此代码包
make install # 重新编译

nodejs安装目录

1
2
3
which node # ubuntu & mac 系统都可用
whereis node # ubuntu 系统
where node # macos 系统

注意:此方式可能没有安装 npm 包(需要想办法自己安装 npm 包),推荐直接下载编译后的二进制包(方法1)。

二、将本地的小网站上传到服务器上去

首先确定服务器上的网站存放目录。

这里我将它放到/website/

1
scp -r ~/test ubuntu/@123.xxx.xxx.xxx:/website

或者用rsync

1
rsync -a ~/* root@118.193.173.25:~/website/

上传过长中出了一个错误,如果是直接上传到 tmp 就可以,其它的目录就会报错:

1
scp permission denied

网上查了下是因为权限不足,于是试了下上传到tmp目录,发现可行,确定是权限的问题之后就将自己的目录权限设置一下,就能正常上传了。
权限问题需谨慎,这里给了最高权限,实际生产环境自己调整适当的权限。

1
# chmod 755 ./data1

三、安装mongodb

1
2
apt-get update
apt-get install mongo

如果不update会报如下错误:

1
Unable to locate package mongo

四、安装pm2

直接在服务器上执行

1
npm install -g pm2

五、安装并配置Nginx解析

安装

1
sudo apt-get install nginx

查看nginx是否安装成功

1
nginx -v

nginx 的配置文件路径

1
/etc/nginx

配置过程中遇到个坑,老是返回 hello nginx 页面

解决办法

1
2
3
注释掉 /etc/nginx/nginx.conf 里面的 
include /etc/nginx/sites-enabled/*
这一行

然后增加如下 nginx 配置,将 80 端口反代理到项目端口
比如我在服务端写了个简单的 node 程序,端口为3000

配置代理如下:

1
2
3
4
5
6
7
server {
listen 80;
server_name xxx.xxx.xxx.xxx;
location / {
proxy_pass http://xxx.xxx.xxx.xxx:3000;
}
}

配置完毕,检测 Nginx 配置是否正确

1
sudo nginx -t

检测错误,则对应具体信息做修改
检测正确,重启Nginx 服务生效

1
sudo service nginx reload

然后访问 xxx.xxx.xxx.xxx:80 即可访问到Node程序了

至此服务端 Node 搭建网站告一段落
下一步就是申请域名了。

– 更新于 2022/10/21 –