mac电脑在linux上部署node流程

199 阅读5分钟

使用 XShell 或者其它 SSH 工具即可远程连接云服务器,进一步安装你所需要的软件和应用程序。在 Git Bash 中,可以使用 ssh 命令进行连接

ssh root@xxx.xx.xxx.xxx
# 输入密码,连接成功

一、基础软件安装

1、nginx 安装

yum info nginx
yum install nginx
# linux上面可以直接使用yum命令
# 默认安装在 /etc/nginx目录
# nginx.conf 是默认配置文件

nginx常用命令有:

# 检测修改后配置文件是否有语法错误
nginx -t
#启动 nginx 服务
nginx -c /etc/nginx/nginx.conf
# 停止 nginx 服务
nginx -s stop
# 重启 nginx 服务
nginx -s reload

2、node 安装
如何安装各个版本和设置环境变量可以参考这个
www.runoob.com/nodejs/node…

# 下载nodejs v12
wget https://nodejs.org/dist/v12.14.1/node-v12.14.1-linux-x64.tar.xz

# 解压
tar xf node-v12.14.1-linux-x64.tar.xz 

# 重命名文件夹
mv node-v12.14.1-linux-x64 node12

# 解压文件的 bin 目录底下包含了 node、npm 等命令,我们可以使用 ln 命令来设置软连接:
# 注意换成自己的文件地址,pwd查看一下地址
sudo ln -s /home/lighthouse/node12/bin/npm   /usr/local/bin/ 
sudo ln -s /home/lighthouse/node12/bin/npm   /usr/local/bin/

# 测试node安装是否成功
node -v
npm -v

# npm设置镜像
npm config set registry https://registry.npmmirror.com/

二、利用ssh传输文件

在linux下一般用scp这个命令来通过ssh传输文件。
用ssh连接:

1、从服务器上下载文件
scp username@servername:/path/filename /var/www/local_dir(本地目录)

 例如scp root@192.168.0.101:/var/www/test.txt  把192.168.0.101上的/var/www/test.txt 的文件下载到/var/www/local_dir(本地目录)

2、上传本地文件到服务器
scp /path/filename username@servername:/path   

例如scp /var/www/test.php  root@192.168.0.101:/var/www/  把本机/var/www/目录下的test.php文件上传到192.168.0.101这台服务器上的/var/www/目录中

3、从服务器下载整个目录
scp -r username@servername:/var/www/remote_dir/(远程目录) /var/www/local_dir(本地目录)

例如:scp -r root@192.168.0.101:/var/www/test  /var/www/  

4、上传目录到服务器
scp  -r local_dir username@servername:remote_dir
例如:scp -r test  root@192.168.0.101:/var/www/   把当前目录下的test目录上传到服务器的/var/www/ 目录

传输的代码如下,或者直接在服务器直接创建一个server.js
代码主要功能是返回一个mock的json数据,5秒钟后宕机报错

const express = require('express')
const Mock = require('mockjs')

const app = express()

app.get("/api/users", (req, res) => {
  const userList = Mock.mock({
    'userList|10': [{
      'id|+1': 1,
      'name': '@cname',
      'email': '@email'
    }]
  })
  
  setTimeout(()=> {
      throw new Error('服务器故障')
  }, 5000)

  res.status(200)
  res.json(userList)
})

app.listen(3000, () => {
  console.log("服务启动: 3000")
})

三、使用 PM2 管理应用

在开发阶段,我们可以使用 nodemon 来做实时监听和自动重启,提高开发效率。在生产环境,就需要祭出大杀器—PM2 了。

首先全局安装 pm2:

# npm i -g pm2
# 创建软连接,不然全局找不到
sudo ln -s ln -s /home/lighthouse/node12/lib/node_modules/pm2/bin/pm2 /usr/local/bin

执行 pm2 -v 命令查看是否安装成功:

[root@ecs-221238 ~]# pm2 -v5.2.0

切换到项目目录,先把依赖装上:

npm i express mockjs -s

然后使用 pm2 命令来启动应用:

pm2 start server.js -i max // 或者pm2 start server.js -i 2

PM2 管理应用有 forkcluster 两种模式。在启动应用时,通过使用 -i 参数指定创建实例的个数,会自动开启 cluster 模式。此时就具备了负载均衡的能力。

-iinstance,实例的个数。可以写具体的数字,也可以配置成 max,PM2会自动检查可用的 CPU 的数量,然后尽可能多地启动进程。

image.png

PM2 常用命令小结

# Fork模式
pm2 start app.js --name app # 设定应用的名字为 app

# Cluster模式
# 使用负载均衡启动4个进程
pm2 start app.js -i 4     

# 将使用负载均衡启动4个进程,具体取决于可用的 CPU
pm2 start app.js -i 0   

# 等同于上面命令的作用
pm2 start app.js -i max 

 # 给 app 扩展额外的3个进程
pm2 scale app +3

# 将 app 扩展或者收缩到2个进程
pm2 scale app 2              

# 查看应用状态
# 展示所有进程的状态
pm2 list  

# 用原始 JSON 格式打印所有进程列表
pm2 jlist

# 用美化的 JSON 打印所有进程列表
pm2 prettylist  

# 展示特定进程的所有信息
pm2 describe 0

# 使用仪表盘监控所有进程
pm2 monit             

# 日志管理

# 实时展示所有应用的日志
pm2 logs          

# 实时展示 app 应用的日志 
pm2 logs app

# 使用json格式实时展示日志,不输出旧日志,只输出新产生的日志
pm2 logs --json

# 应用管理

# 停止所有进程
pm2 stop all

# 重启所有进程
pm2 restart all       

# 停止指定id的进程
pm2 stop 0     

# 重启指定id的进程
pm2 restart 0         

# 删除id为0进程
pm2 delete 0

# 删除所有的进程
pm2 delete all         
记得开通防火墙3000!

image.png

此时通过公网ip:3000/api/users打开就成功了~ image.png

四、Nginx 代理转发接口

上面我们直接将 nodejs 项目的 3000 端口暴露了出去。一般我们都会使用 nginx 做一个代理转发,只对外暴露 80 端口。 使用 yum 安装:

添加CentOS 7 Nginx yum资源库,不然找不到nginx
# sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# yum install -y nginx

然后启动 nginx:

# sudo systemctl start nginx

设置开机启动 nginx:

# sudo systemctl enable nginx.service

此时打开公网能看到自己nginx页面了~ image.png

配置接口转发

为项目新建一个配置文件:

# vim /etc/nginx/conf.d/express.conf

监听 80 端口,将所有请求转发给服务器本地的 3000 端口的程序处理:

server {
    listen       80;
    server_name  47.xx.xx.xx; //自己的公网ip
    location / {
          proxy_pass http://localhost:3000;
    }
}

修改完配置文件,一定要重启服务:

# sudo systemctl restart nginx

或者 重启 nginx 服务

sudo nginx -t
sudo nginx -s reload

此时去掉3000端口访问:

image.png