centerOS部署nginx+node+pm2

一、服務器環境部署

1.node

(1)安裝node

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)安裝必要的文件

sudo yum install gcc gcc-c++

(3)配置node、npm軟連接

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)安裝查看

node -v #查看版本

2.pm2

(1)pm2的安裝

npm i pm2 -g

(2)配置pm2的軟鏈接

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

3.Nginx

(1)nginx的安裝

yum install nginx

二、項目的安裝配置

1.項目拷貝

git clone git@xxxxxxx/xxxxx.git  #或者直接上傳項目文件夾

2.項目配置打包

cd xxx #進入項目目錄
npm i #安裝npm包
npm run build #打包項目,命令根據自己設定的

三、啓動項目

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

(1)pm2啓動文件配置(可在項目文件夾根目錄下)

方式1:yml配置

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配置

{
  "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 #啓動,啓動端口爲項目默認端口

四、更新配置生效

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)

五、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):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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章