一、服務器環境部署
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