Nodejs專案線上部署

艾倫先生發表於2017-12-14

前言

本文主要介紹Nodejs在ubuntu部署線上環境涉及到的知識點,包括環境配置、指令碼工具、PM2應用、Ngix反向代理等等,不斷完善中

推薦文章https://zhuanlan.zhihu.com/p/23778500

通過PM2部署線上專案

PM2是Nodejs應用用於成產過程管理的內建負載平衡器。它能夠讓應用持續執行,0秒過載,並能夠方便的進行常見的系統管理任務。

主要特性是: 1)內建負載均衡 2)後臺執行 3)0秒過載:維護升級不用停機,重新載入程式碼不失去連線 4)控制檯檢測

官方地址 官方API地址

部署

  • 安裝PM2指令

      $ npm install pm2 -g
    複製程式碼
  • 配置pm2.json

      {
        "apps" : [{
          "name"        : "www",
          "cwd"         : "/data/source/",
          "script"      : "bin/www",
          "watch"       : true,
          "node_args"   : "--harmony",
          "merge_logs"  : true,
          "error_file"  : "../logs/stderr.log",
          "out_file"    : "../logs/stdout.log",
          "pid_file"   : "../pids/child.pid",
          "exec_mode"  : "cluster_mode",
          "instances"  : 0,
          "log_date_format" : "YYYY-MM-DD HH:mm Z", 
          "env": {
            "NODE_ENV": "staging"
          }
        }]
      }
    複製程式碼

從在上面的package.json中我們制定了很多內容 name:設定當前專案在pm2中展示的名稱 cwd:指定專案原始碼位置 error_file:命令列錯誤輸出 out_file:命令列輸出 evn.Node_ENV:環境變數

  • 通過pm2配置檔案啟動專案

    start_node_project.sh

      #!/bin/bash
      #假設工程檔案壓縮包如下
      tagname="project.zip"
      #刪除伺服器釋出目錄原始碼
      cd /data/
      rm -rf source/*
      #解壓工程壓縮包到制定目錄
      unzip code/${tagname} -d source/
    複製程式碼

    #將壓縮包拼上時間字尾,移動到指定目錄,用於版本回退 mv code/${tagname} code/project_date +%Y%m%d%H%M.zip #切換到工具目錄 cd /data/deploy/ #通過配置檔案啟動專案 pm2 start pm2.json #檢視node程式 ps -ef|grep node

      ./start_node_project
    複製程式碼
  • 檢視專案執行情況

      pm2 list
    複製程式碼

02.png-333.2kB

  • 追蹤資源執行情況

      pm2 monit
    複製程式碼

03.png-16.7kB

  • 檢視應用詳細部署狀態 如果我們想要檢視一個應用詳細的執行狀態,可以執行:

      pm2 descrbe {appId}
    複製程式碼
  • 檢視日誌

      pm2 logs
    複製程式碼
  • 重啟應用

      pm2 restart {appId}
    複製程式碼
  • 停止執行程式

      pm2 stop pm2.json
    複製程式碼

參考文章

nodejs部署方式-pm2 nodejs線上部署小結

Nginx 反向代理

Nginx ("engine x") 是一個高效能的 HTTP 和 反向代理伺服器,也是一個 IMAP/POP3/SMTP 代理伺服器。

之所以使用Nginx來為Nodejs做反向代理,是因為儘管Node.JS的效能不錯,但處理靜態事務確實不是他的專長,如:gzip編碼,靜態檔案,HTTP快取,SSL處理,負載平衡和反向代理及多站點代理等,都可以通過nginx來完成,從而減小node.js的負載,並通過nginx強大的快取來節省您網站的流量從而提高網站的載入速度。

雖然node.js也有一些如http-proxy的代理模組可以實現一臺伺服器上面架設多個網站(每個域名對映到不同nodejs程式的埠),但這種基礎性的工作,其實更應該交給ngnix來完成,下面看看一些基本操作。

  • 安裝Nginx

      apt-get install nginx
    複製程式碼
  • 編寫一個簡單的配置檔案/usr/local/nginx/conf/gaidu/nginx.conf

    server { listen 80; server_name h.gaidu.cn;

      access_log /data/nginx_log/h.gaidu.cn/access.log short;
      error_log /data/nginx_log/h.gaidu.cn/error.log ;
    
      if ($http_user_agent ~* "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogou spider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot")
      {
      	return 403;
      }
      location /  {
              proxy_pass http://10.1.2.147:9099;
              proxy_set_header  Host "h.gaidu.cn";
              proxy_set_header  X-Real-IP  $remote_addr;
              proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header  X-Forwarded-Proto  $scheme;
      }
    複製程式碼

    }

  • 在nginx主配置檔案中引入剛建立的自定義配置檔案

      cd /usr/local/nginx/conf ,
      # 開啟nginx.conf, 在http 裡面新增 
      include /usr/local/nginx/conf/gaidu/*
    複製程式碼
  • 重啟nginx

      /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    複製程式碼
  • 通過站點訪問

      h.gaidu.cn
    複製程式碼
  • 備註:測試ngix配置檔案

      nginx -t -c /usr/local/nginx/conf/gaidu/nginx.conf
    複製程式碼

未完待續

相關文章