Nodejs服务器部署

技术札记2018-01-083 分钟Node.js部署

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

一、Nodejs的安装

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

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

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

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

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

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 的源码安装包下载下来,然后解压编译

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 的时候可能会报这个错误:

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

解决办法,手动编译

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

nodejs安装目录

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

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

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

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

这里我将它放到/website/

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

或者用rsync

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

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

scp permission denied

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

# chmod 755 ./data1

三、安装mongodb

apt-get update
apt-get install mongo

如果不update会报如下错误:

Unable to locate package mongo

四、安装pm2

直接在服务器上执行

npm install -g pm2

五、安装并配置Nginx解析

安装

sudo apt-get install nginx

查看nginx是否安装成功

nginx -v

nginx 的配置文件路径

/etc/nginx

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

解决办法

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

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

配置代理如下:

server {
    listen 80;
    server_name xxx.xxx.xxx.xxx;
    location / {
        proxy_pass http://localhost:3000;
    }
}

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

sudo nginx -t

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

sudo service nginx reload

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

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

-- 更新于 2022/10/21 --