前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >centerOS部署nginx+node+pm2

centerOS部署nginx+node+pm2

作者头像
晓歌
发布2018-09-28 15:16:03
2.4K0
发布2018-09-28 15:16:03
举报
文章被收录于专栏:破晓之歌破晓之歌

一、服务器环境部署

1.node

(1)安装node

代码语言:javascript
复制
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)安装必要的文件

代码语言:javascript
复制
sudo yum install gcc gcc-c++

(3)配置node、npm软连接

代码语言:javascript
复制
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)安装查看

代码语言:javascript
复制
node -v #查看版本

2.pm2

(1)pm2的安装

代码语言:javascript
复制
npm i pm2 -g

(2)配置pm2的软链接

代码语言:javascript
复制
ln -s /root/node-v9.9.0-linux-x64/bin/pm2 /usr/local/bin/pm2

3.Nginx

(1)nginx的安装

代码语言:javascript
复制
yum install nginx

二、项目的安装配置

1.项目拷贝

代码语言:javascript
复制
git clone git@xxxxxxx/xxxxx.git  #或者直接上传项目文件夹

2.项目配置打包

代码语言:javascript
复制
cd xxx #进入项目目录
npm i #安装npm包
npm run build #打包项目,命令根据自己设定的

三、启动项目

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

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

方式1:yml配置

代码语言:javascript
复制
apps:
  - script: /root/projects/VUE-SSR-TECH/server/server.js
    name: vue-todo
    env_production:
      NODE_ENV: production
      HOST: localhost
      PORT: 8888

ym2.yml

方式2:json配置

代码语言:javascript
复制
{
  "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配置(可在项目文件夹根目录下)

代码语言:javascript
复制
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.项目启动

代码语言:javascript
复制
# 启动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中新设置的

代码语言:javascript
复制
pm2 start pm2.yml --env production  # 启动,启动端口为pm2.yml中env_production下指定端口
pm2 start app.json --env production  # 启动,启动端口为app.json中env_production下指定端口

这样才能找到

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

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

代码语言:javascript
复制
upstream todo {
  server 127.0.0.1:3333; #这里要和启动项目的PORT端口一致
  keepalive 64;
}

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

启动命令可以简化(2选1)

代码语言:javascript
复制
pm2 start pm2.yml #启动,启动端口为项目默认端口
pm2 start app.json #启动,启动端口为项目默认端口

四、更新配置生效

1.pm2更新启动

代码语言:javascript
复制
pm2 -i /root/projects/VUE-SSR-TECH/pm2.yml & #添加pm2软链接
pm2 start pm2.yml #启动pm2

2.conf更新启动

代码语言:javascript
复制
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)

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

代码语言:javascript
复制
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):https://blog.csdn.net/xuaa/article/details/52262586

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

3.Nginx配置文件nginx.conf详解:https://www.cnblogs.com/xuey/p/7631690.html

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、服务器环境部署
    • 1.node
      • 2.pm2
        • 3.Nginx
        • 二、项目的安装配置
          • 1.项目拷贝
            • 2.项目配置打包
            • 三、启动项目
              • 1.配置必要文件(重要)
                • 2.项目启动
                • 四、更新配置生效
                • 五、nginx部署多个node站点示例
                相关产品与服务
                ICP备案
                在中华人民共和国境内从事互联网信息服务的网站或APP主办者,应当依法履行备案手续。腾讯云为您提供高效便捷的 ICP 备案服务。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档