背景
之前發布Nuxt 項目都是使用 npm run generate 指令發布到服務器上面,性能存在問題所以想要 更換發布方式,因為是Windows平台所以嘗試使用 iisnode 托管在iis,但是訪問圖片的路徑是虛擬目錄一直訪問不到圖片, 使用反向代理折騰了一天沒有找到解決方案之后嘗試使用 pm2 托管node 再在iis 上重寫路由。
過程
安裝pm2,直接全局安裝 (pm2 官網地址:http://pm2.keymetrics.io )
npm install -g pm2
常用指令
pm2 list 查看pm2托管線程列表 pm2 start 啟動服務 pm2 stop 停止服務 pm2 restart 重啟服務 pm2 delete 刪除服務
如果是在本地打包好再上傳到服務器的化 執行
npm run build
需要將一下四個文件及文件夾上傳到服務器上在執行
npm install
安裝相關依賴
托管到pm2
執行指令
pm2 start npm -- start
執行成功
就可以瀏覽器直接訪問 http://localhost:3000 可以打開
使用 application request routing 反向代理
安裝:下載地址(http://www.iis.net/downloads/microsoft/application-request-routing)
安裝完成后,打開IIS->選中服務器名稱->雙擊 右側功能視圖 IIS 節點下的Application Request Routing Cache->點擊 右側操作視圖Proxy節點下的Server Proxy Settings->勾選上Enable Proxy前面的復選框
給你的iis web服務配置URL重寫規則
添加規則
添加虛擬目錄
總結
這是第一次使用Nodejs 啟動服務, pm2 也還有更多高級的配置需要學習, 記錄的過程也比較粗糙 打算自己重復幾次 完善一下 這里有遇到一個pm2的一個, 在啟動服務的時候遇到這個錯誤,
(function (exports, require, module, __filename, __dirname) { :: Created by npm, please don't edit manually. ^ SyntaxError: Unexpected token : at createScript (vm.js:56:10) at Object.runInThisContext (vm.js:97:10) at Module._compile (module.js:542:28) at Object.Module._extensions..js (module.js:579:10) at Module.load (module.js:487:32) at tryModuleLoad (module.js:446:12) at Function.Module._load (module.js:438:3) at Object.<anonymous> (C:\Users\admin\AppData\Roaming\npm\node_modules\pm2\lib\ProcessContainerFork.js:53:21) at Module._compile (module.js:570:32) at Object.Module._extensions..js (module.js:579:10) C:\PROGRAM FILES\NODEJS\NPM.CMD:1 (function (exports, require, module, __filename, __dirname) { :: Created by npm, please don't edit manually. ^
GitHub 上面有解決方案 https://github.com/Unitech/pm2/issues/2808
There's your problem - when you do that, you're telling pm2 to interpret the "npm script" with an argument of start. Try putting a npm-cmd call into a start script called startscript.js, and then doing pm2 start startscript.js. Eg npm install node-cmd --save; in startscript.js: var cmd=require('node-cmd'); cmd.run('npm start'); pm2 start startscript.js
需要安裝 node-cmd 這個包,之后創建一個 start.js 文件使用指令啟動該文件
pm2 start start.js
解決完這個 問題之后 我發現啟動完 一直有一個 npm 命令框存在也關不掉 好像也沒啥影響就是看着有點不舒服