本篇BLOG主要分為7個小節講解,每個小節獨立一篇,方便編寫和閱讀:
- 第一節 :前期准備工作
- 第二節 :安裝docker環境
- 第三節 :nginx+nodejs部署后端服務
- 第四節 :安裝並配置mysql環境
- 第五節 :使用vue創建前端展示
- 第六節 :Jenkins的自動化發布部署
- 第七節 :完美代碼托管服務git
(最后更新日期:未完)
第三節:nginx+nodejs部署后端服務
1.docker安裝nginx
使用如下命令查詢docker鏡像庫中nginx的版本信息:
sudo docker search nginx

使用命令拉取最新版本的nginx鏡像:
sudo docker pull nginx
命令結束后,通過如下命令查看已拉取的鏡像:
sudo docker images

使用如下命令以latest版本的鏡像創建容器,並映射8004端口,容器命名為mynginx。
sudo docker run -d -p 8004:8004 --name mynginx nginx:latest
使用如下命令查看容器,到這一步,證明nginx的容器已成功創建。
sudo docker ps

2.docker安裝node.js
安裝步驟基本與docker安裝nginx一致,唯一不同就是創建node.js的容器命令,如下:
sudo docker run -d -p 8888:8888 --name mynode node:latest
安裝完成,通過查看容器的命令,可以看到如:

3.在node.js容器npm安裝express框架,使用pm2管理node.js
這里說明一下,express是一個簡潔而靈活的 node.js Web應用框架, 提供了一系列強大特性幫助你創建各種 Web 應用,和豐富的 HTTP 工具。express框架的好處,后續可以一起開發。這里先引用試一下水深。
通過如下命令,進入mynode容器:
sudo docker exec -it mynode /bin/bash

此時可以使用以下命令查看node的版本:
node -v

因為新版node.js已集成npm(node包管理工具),同樣可以使用以下命令查看npm的版本:
npm -v

4.在node.js容器npm安裝pm2
pm2是一個node.js的管理器,可以很方便管理,有效監控node.js的運行情況。
執行如下命令來安裝pm2:
npm install -g pm2
有可能安裝到最后有兩個警告,可以忽略不計。安裝完后,可以看到:

5.使用pm2管理node.js
本節的例子引用echarts,作一個簡單展示,后續講解vue的時候,會另作例子說明。
創建目錄/root/node_demo/node_express/04,並創建文件text.html和node_express_04.js,內容分別如下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>第一個 ECharts 實例</title> <script src="https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js"></script> </head> <body> <div id="main" style="width: 600px;height:400px;"></div> <script type="text/javascript"> var myChart = echarts.init(document.getElementById('main')); var option = { title: {text: '第一個 ECharts 實例'}, tooltip: {}, legend: {data:['銷量']}, xAxis: {data: ["襯衫","羊毛衫","雪紡衫","褲子","高跟鞋","襪子"]}, yAxis: {}, series: [{ name: '銷量', type: 'bar', data: [5, 20, 36, 10, 10, 20] }] };
myChart.setOption(option); </script> </body> </html>
var express = require('express'); var app = express(); app.get('/text.html', function (req, res) { res.sendFile( __dirname + "/" + "text.html" ); }) var server = app.listen(8888, function () { var host = server.address().address var port = server.address().port console.log("應用實例,訪問地址為 http://%s:%s", host, port) })
以上的js文件內容,大致意思是,引用express框架,創建一個web服務,返回一個指定頁面。
接下落可以使用pm2啟動node.js,先執行如下命令查看目前node.js運行情況:
/usr/local/bin/pm2 list

再執行啟動node.js的命令:
/usr/local/bin/pm2 start /root/node_demo/node_express/04/node_express_04.js -i max
到這一步時,已經可以先看一下半成品,激勵一下自己了。打開瀏覽器,雲主機的IP+端口8888
但這不是我們的目的,我們目的是構建經nginx做反向代理,node.js做服務邏輯處理過程,接下來咱們繼續。
pm2資料補充,常用的命令有見如下,詳細可查看nodeJS進程管理器pm2的blog。
pm2 start app.js -i 4 #后台運行pm2,啟動4個app.js # 也可以把'max' 參數傳遞給 start # 正確的進程數目依賴於Cpu的核心數目 pm2 start app.js --name my-api # 命名進程 pm2 list # 顯示所有進程狀態 pm2 monit # 監視所有進程 pm2 logs # 顯示所有進程日志 pm2 stop all # 停止所有進程 pm2 restart all # 重啟所有進程 pm2 reload all # 0秒停機重載進程 (用於 NETWORKED 進程) pm2 stop 0 # 停止指定的進程 pm2 restart 0 # 重啟指定的進程 pm2 startup # 產生 init 腳本 保持進程活着 pm2 web # 運行健壯的 computer API endpoint (http://localhost:9615) pm2 delete 0 # 殺死指定的進程 pm2 delete all # 殺死全部進程
6.設置nginx作反向代理
執行完第2到5步后,已經完成了用node.js部署web服務的環節,但不是我們此次框架的目標。我們是要使用nginx作為反向代理,統一處理對外部請求的分配和負載均衡等等操作,再通過內部網絡指向node.js服務,處理業務邏輯計算。
下面以最簡單的方式開始配置nginx:
在雲主機終端上輸入如下命令,獲取node.js服務容器的內部IP,以便接下來的配置使用。

接下來,進入第1點中介紹的nginx容器mynginx,並進入如下指定的目錄、
sudo docker exec -it mynginx /bin/bash
cd /etc/nginx/conf.d

創建文件odoo.conf,里面內容如下:
server{ listen 8004; location /{ proxy_pass http://172.18.0.2:8888; #反向代理,指向具體的node監聽端口,配置node內部IP和端口 root /root/node_demo/node_express/04; index text.html; proxy_redirect off; #關閉地址的重定向 # 在代理請求頭中加入下面的信息,方便我們用nodejs獲取一些客戶端信息 proxy_set_header Host $host; #本機地址(ip或域名) proxy_set_header X-Real-IP $remote_addr; #客戶端真實ip proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#客戶端真實ip } }
在nginx容器里,通過如下命令重啟nginx服務。

此時,可以在瀏覽器上輸入地址,雲主機的IP+端口8004。如同樣訪問到node.js的web服務。
7.總結:訪問雲主機的IP+端口8888,就是直接訪問一node.js服務器;而訪問雲主機的IP+端口8004,是訪問nginx服務器,由nginx做反向代理指到node.js服務處理request和返回response。正式環境下,對外不會開放端口8888的,只會由端口8004統一對外的接口。
第三節完,如有任何問題,請留意。
---------------------------------------------------------------------
