centerOS部署nginx+node+pm2

1、服务器环境部署

1.node

(1)安装nodejavascript

wget http://nodejs.org/dist/v9.9.0/node-v9.9.0-linux-x64.tar.gz #下载
tar xvzf node-v9.9.0-linux-x64.tar.gz #解压
cd node-v9.9.0-linux-x64 #进入解压文件目录

(2)安装必要的文件html

sudo yum install gcc gcc-c++

(3)配置node、npm软链接vue

ln -s /root/node-v9.9.0-linux-x64/bin/node /usr/local/bin/node  
ln -s /root/node-v9.9.0-linux-x64/bin/npm /usr/local/bin/npm

(4)安装查看java

node -v #查看版本

 

2.pm2

(1)pm2的安装node

npm i pm2 -g

(2)配置pm2的软连接linux

ln -s /root/node-v9.9.0-linux-x64/bin/pm2 /usr/local/bin/pm2

 

3.Nginx

(1)nginx的安装nginx

yum install nginx

 

2、项目的安装配置

1.项目拷贝

git clone git@xxxxxxx/xxxxx.git  #或者直接上传项目文件夹

2.项目配置打包

cd xxx #进入项目目录
npm i #安装npm包
npm run build #打包项目,命令根据本身设定的

 

3、启动项目

1.配置必要文件(重要)

(1)pm2启动文件配置(可在项目文件夹根目录下)c++

方式1:yml配置git

apps:
  - script: /root/projects/VUE-SSR-TECH/server/server.js
    name: vue-todo
    env_production:
      NODE_ENV: production
      HOST: localhost
      PORT: 8888

ym2.ymlnpm

方式2:json配置

{
  "apps":
    {
      "name": "todo", 
      "cwd": "/root/projects/VUE-SSR-TECH",
      "script": "/root/projects/VUE-SSR-TECH/server/server.js",
      "exec_interpreter": "bash",
      "min_uptime": "60s",
      "max_restarts": 30,
      "exec_mode" : "cluster_mode",
      "error_file" : "./test-err.log",
      "out_file": "./test-out.log",
      "pid_file": "./test.pid",
      "watch": true,
      "env": {
        "NODE_ENV": "production",
        "HOST": "127.0.0.1",
        "PORT": "8888"
      }
    }
}

app.json

(2)nginx配置(可在项目文件夹根目录下)

upstream todo {
  server 127.0.0.1:8888; #这里要和启动项目的PORT端口一致
  keepalive 64;
}
server {
  listen 80;
  server_name www.helpping.top; #填写必须是已备案的域名,否则解析会出错。没有域名可填写服务器ip
  root         /root/projects/VUE-SSR-TECH; #项目favicon.ico所在文件夹
  location / {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwardered-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Nginx-Proxy true;
    proxy_set_header Connection '';
    proxy_pass http://todo; #这里要和最上面upstream后的应用名一致,能够自定义
  }
  location ~ \.(txt)$ {
    root /var/www/jnode/;
  }
}

todo.conf

 

说明:在centos里nginx有默认启动配置在etc/nginx/nginx.conf文件中

通常不修改这个文件,但有时由于权限须要,能够修改第5行的用户

修改用户为nginx用户

 

2.项目启动

# 启动nginx
sudo ln -s /root/projects/VUE-SSR-TECH/todo.conf /etc/nginx/conf.d/  #nginx启动文件的软连接
service nginx start #启动nginx服务
cd xxx #进入项目根目录

# 启动pm2(选择其中一条命令)
pm2 start pm2.yml #启动,启动端口为项目默认端口
pm2 start app.json #启动,启动端口为项目默认端口
pm2 start pm2.yml --env production  # 启动,启动端口为pm2.yml中env_production下指定端口
pm2 start app.json --env production  # 启动,启动端口为app.json中env_production下指定端口

 

此时输入浏览器中输入域名(本案例为: www.helpping.top),便可看到页面

 

关键

不少次设置域名后,启动不是跳nginx默认页面就是502,实质上都是nginx启动成功后找不到pm2页面的启动端口所致。不少时候咱们查看pm2 list发现项目启动运行了,ps -ef | grep  nginx发现nginx也启动了,但就是找不到网关,很大缘由就是这个端口设置和启动方式不匹配的缘由(花了好久才发现问题所在TVT)

jtodo.conf中的upstream todo {server 127.0.0.1:8888}端口设置和启动命令选择的端口要一致。

我这里设置的todo.conf和ym2.yml(或者app.json)设置都是8888的端口,因此启动的时候命令要使用yml/json中新设置的

pm2 start pm2.yml --env production  # 启动,启动端口为pm2.yml中env_production下指定端口
pm2 start app.json --env production  # 启动,启动端口为app.json中env_production下指定端口

这样才能找到

若是不想带env的参数,就要在项目的server.js文件中查找启动端口

我这里很明显是端口号是3333

upstream todo {
  server 127.0.0.1:3333; #这里要和启动项目的PORT端口一致
  keepalive 64;
}

那么,设置todo.conf的端口就要为3333

启动命令能够简化(2选1)

pm2 start pm2.yml #启动,启动端口为项目默认端口
pm2 start app.json #启动,启动端口为项目默认端口

 

4、更新配置生效

1.pm2更新启动

pm2 -i /root/projects/VUE-SSR-TECH/pm2.yml & #添加pm2软连接
pm2 start pm2.yml #启动pm2

2.conf更新启动

rm /etc/nginx/conf.d/todo.conf -rf #强制删除以前已存在的nginx启动软连接文件
sudo ln -s /root/projects/VUE-SSR-TECH/todo.conf /etc/nginx/conf.d/ #从新添加nginx启动软连接
lsof -i tcp:80 #查看服务器域名(端口默认80)所在进程
kill 12344 #杀死nginx的进程
sudo /usr/sbin/nginx  #启动nginx(service nginx start)

 

5、nginx部署多个node站点示例

server {
    listen 80;
    server_name a.com;
 
    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://127.0.0.1:8082;
    }
}
 
server {
    listen 80;
    server_name b.com;
 
    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://127.0.0.1:8083;
    }

conf文件配置

 


参考文档

1.在CentOS 7上安装Node.js的4种方法(包含npm):http://www.javashuo.com/article/p-omzdorsl-ma.html

2.nginx学习-超详细nginx配置文件:https://www.cnblogs.com/2nao/p/8031866.html

3.Nginx配置文件nginx.conf详解:http://www.javashuo.com/article/p-dbvjthmd-bb.html

4.nginx部署多个node站点:https://blog.csdn.net/ziwoods/article/details/77164927

相关文章
相关标签/搜索