nuxt項目服務端渲染應用部署、使用pm2守護進程及遇到的問題處理

  服務端渲染應用部署應該先編譯構建,而後再啓動 Nuxt 服務,可經過如下兩個命令來完成:html

nuxt build
nuxt start

  咱們已經在pakage.json裏配置好script命令node

{ "scripts": {   "dev": "nuxt",   "build": "nuxt build",   "start": "nuxt start",   "generate": "nuxt generate"  }, }

  即先用npm run build編譯打包,而後用npm run start發佈項目,若是在本地http://localhost:3000  依然能夠啓動項目,說明打包是ok的nginx

  這時咱們只須要在本地npm run build打包後,會在.nuxt生成一些新的文件,咱們把.nuxt 、nuxt.config.js、pakage.json 、static四個文件/文件夾放到服務器上,而後安裝依賴:npm installgit

  最後用pm2來啓動項目github

  pm2 是一個帶有負載均衡功能的Node應用的進程管理器。當你要把你的獨立代碼利用所有的服務器上的全部CPU,並保證進程永遠都活着,0秒的重載, PM2是完美的。在服務器shell中,先安裝pm2,安裝後pm2 list查看進程列表,若是說pm2未找到,須要設置下環境變量shell

  安裝pm2,直接全局安裝 (pm2 官網地址:http://pm2.keymetrics.io )npm

npm install -g pm2

  pm2安裝ok後,進入nuxt項目目錄,執行json

pm2 start npm --name ‘project-name’ -- start

  project-name,就是package.json裏的name名segmentfault

  啓動項目,這時項目運行在你服務器上的3000端口上,咱們還須要使用nginx 做爲反向代理把這個端口專門映射到一個域名上api

  #經過upstream nodejs 能夠配置多臺nodejs節點,作負載均衡

  #keepalive 設置存活時間。若是不設置可能會產生大量的timewait

  #proxy_pass 反向代理轉發 http://nodejs

 upstream nodenuxt { server 127.0.0.1:3000; #nuxt項目 監聽端口 keepalive 64; }

  配置代碼參考了不少的文檔,主要參考這篇:next.js、nuxt.js等服務端渲染框架構建的項目部署到服務器,並用PM2守護程序,代碼以下

    worker_processes  1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream nodenuxt { server 127.0.0.1:3000; # nuxt 項目監聽PC端端口 keepalive 64; } server { listen 80; server_name localhost; location / { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Nginx-Proxy true; proxy_cache_bypass $http_upgrade; proxy_pass http://nodenuxt;
 }

       location ^~/api/ {
              proxy_pass   http://119.3.166.247:8080/;
          } error_page
500 502 503 504 /50x.html; location = /50x.html { root html; } } }

  若是以後須要更新代碼,本地重啓打包把上述文件替換到服務器上,而後重啓pm2便可

pm2 restart all

  在使用pm2中遇到的問題

  這是第一次使用Nodejs 啓動服務, pm2 也還有更多高級的配置須要學習, 記錄的過程也比較粗糙打算本身重複幾回完善一下 ,這裏有遇到一個pm2的一個問題, 在啓動服務的時候遇到這個錯誤

SyntaxError: Unexpected token : at createScript (vm.js:80:10) at Object.runInThisContext (vm.js:139:10) at Module._compile (module.js:616:28) at Object.Module._extensions..js (module.js:663:10) at Module.load (module.js:565:32) at tryModuleLoad (module.js:505:12) at Function.Module._load (module.js:497:3) at Object.<anonymous> (C:\Users\關文峯\AppData\Roaming\npm\node_modules\pm2\lib\ProcessContainerFork.js:27:21) at Module._compile (module.js:652:30) at Object.Module._extensions..js (module.js:663:10)

  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 文件使用指令啓動該文件

cnpm install node-cmd --save-dev

  而後啓動命令:pm2 start start.js

  這樣就解決了這個問題。解決完這個問題以後我發現啓動完一直有一個 npm 命令框存在也關不掉好像也沒啥影響就是看着有點不舒服

相關文章
相關標籤/搜索