日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
在Docker中如何高效部署NodeServer

在 docker 中如何高效部署 Node Server

作者: 山月行 2021-08-26 07:43:45

云計(jì)算 一個(gè)高效合理的部署方案,不僅能夠?qū)崿F(xiàn)快速升級(jí),滾動(dòng)更新,負(fù)載均衡,應(yīng)用隔離等部署特性,而且配有一套成熟穩(wěn)定的監(jiān)控。

成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、興城網(wǎng)絡(luò)推廣、成都小程序開發(fā)、興城網(wǎng)絡(luò)營銷、興城企業(yè)策劃、興城品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供興城建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com

大家好,我是山月。

一個(gè)高效合理的部署方案,不僅能夠?qū)崿F(xiàn)快速升級(jí),滾動(dòng)更新,負(fù)載均衡,應(yīng)用隔離等部署特性,而且配有一套成熟穩(wěn)定的監(jiān)控。

kubernetes 把 Node 應(yīng)用視作一個(gè)服務(wù)端應(yīng)用的黑盒子,完美匹配了以上條件,越來越多的團(tuán)隊(duì)把 node 部署在 k8s 上。

但在此之前,需要先把 Node 應(yīng)用跑在一個(gè) Docker 容器上,這也是本章的主題。

「目錄」

1. 一個(gè)簡單的 Node 應(yīng)用

2. NODE_ENV=production

3. 一個(gè) Node 服務(wù)的鏡像

4. node-gyp 與 Native Addon

5. 相關(guān)文章

1. 一個(gè)簡單的 Node 應(yīng)用

聚土成沙,集腋成裘。從一個(gè) hello, world 版的 Node Server 說起。

  
 
 
  1. const http = require('http')
  2. const app = async (req, res) => {
  3.   res.end('hello, world')
  4. }
  5. http.createServer(app).listen(3000, () => console.log(3000))

在啟動(dòng)一個(gè) Node Server 時(shí),在生產(chǎn)環(huán)境中有很多先決條件,無法通過簡單的 node index.js 啟動(dòng)服務(wù)。

此時(shí)在 package.json 中抽象一層,通過 npm start 啟動(dòng)服務(wù),方便在 Docker 鏡像中配置啟動(dòng)命令。

  
 
 
  1. "scripts": {
  2.   "start": "node index.js"
  3. },

但這僅僅是最簡單的 Node 應(yīng)用,真實(shí)環(huán)境中還有各種數(shù)據(jù)存儲(chǔ)、定時(shí)任務(wù)調(diào)度等,暫撇開不談,目前已經(jīng)足夠了。

2. NODE_ENV=production

在生產(chǎn)環(huán)境中,如果無構(gòu)建過程,則無需安裝 devDependencies 中依賴。NODE_ENV 環(huán)境變量設(shè)置為 production 時(shí)將會(huì)跳過 devDependencies 依賴的安裝。

  
 
 
  1. # 通過設(shè)置環(huán)境變量,只安裝生產(chǎn)環(huán)境依賴
  2. $ NODE_ENV=production npm ci
  3. # 通過顯式指定 flag,只安裝生產(chǎn)環(huán)境依賴
  4. $ npm ci --production

另一方面,「某些第三方庫會(huì)根據(jù) NODE_ENV 環(huán)境變量做出一些意料不到的配置」。因此在生產(chǎn)環(huán)境注意該環(huán)境變量的配置。

3. 一個(gè) Node 服務(wù)的鏡像

一個(gè)典型的、面向服務(wù)端的 Node 服務(wù)是這么跑起來的:

  • npm install
  • npm run config,從配置服務(wù)(consul/vault)拉取配置 ,如數(shù)據(jù)庫與緩存的賬號(hào)密碼,此時(shí)構(gòu)建服務(wù)器需要配置服務(wù)權(quán)限
  • npm run migrate,數(shù)據(jù)庫遷移腳本,執(zhí)行數(shù)據(jù)庫表列行更改操作,此時(shí)構(gòu)建服務(wù)器需要數(shù)據(jù)庫訪問權(quán)限
  • npm start,啟動(dòng)一個(gè) Node 服務(wù)

把運(yùn)行步驟翻譯為 Dockerfile:

  
 
 
  1. # 選擇一個(gè)體積小的鏡像 (~5MB)
  2. FROM node:12-alpine
  3. # 環(huán)境變量設(shè)置為生產(chǎn)環(huán)境,設(shè)置該環(huán)境變量,將不會(huì)下載 devDependencies 中依賴
  4. # 如果仍需要 devDependencies 依賴下載,則把該命令移動(dòng)到 RUN npm ci 之后
  5. ENV NODE_ENV production
  6. WORKDIR /code
  7. # 首先添加 package.json ,為了更好的根據(jù) Image Layer 利用緩存
  8. # 當(dāng) package.json 不變時(shí),node_modules 將會(huì)重用,則能夠利用緩存
  9. ADD package.json package-lock.json /code
  10. # 可考慮 npm ci 與 yarn
  11. RUN npm i
  12. # 把代碼置于鏡像
  13. ADD . /code
  14. # 配置服務(wù)及數(shù)據(jù)庫遷移
  15. RUN npm run config --if-present && npm run migrate --if-present
  16. EXPOSE 3000
  17. # 啟動(dòng) Node Server
  18. CMD npm start

這對(duì)于大部分 Node 應(yīng)用已經(jīng)是足夠了,精益求精,接下來進(jìn)行多階段構(gòu)建的優(yōu)化。

4. node-gyp 與 Native Addon

在 Node 中的一些依賴存在 Native Addon,它們通過 node-gyp 進(jìn)行編譯,而它依賴于 python,make 與 g++。

  
 
 
  1. $ apk --no-cache add python make g++

在帶有編譯過程的鏡像構(gòu)建中,源文件與構(gòu)建工具都會(huì)造成空間的浪費(fèi)。

借助鏡像的「多階段構(gòu)建」可以高效利用空間。Go 語言與前端相關(guān)的構(gòu)建也遵循此規(guī)則。

  • 多階段構(gòu)建 Go 應(yīng)用
  • 多階段構(gòu)建前端應(yīng)用

在構(gòu)建 Node 應(yīng)用鏡像時(shí),第一層鏡像用各種構(gòu)建工具以構(gòu)造 node_modules,第二層鏡像利用第一層鏡像構(gòu)造的 node_modules。

  
 
 
  1. # 選擇一個(gè)體積小的鏡像 (~5MB)
  2. FROM node:12-alpine as builder
  3. # 環(huán)境變量設(shè)置為生產(chǎn)環(huán)境
  4. ENV NODE_ENV production
  5. # 為某些特殊的依賴庫準(zhǔn)備編譯環(huán)境
  6. RUN apk --no-cache add python make g++
  7. # 更好的根據(jù) Image Layer 利用緩存
  8. ADD package.json package-lock.json ./
  9. RUN npm i
  10. # 多階段構(gòu)建之第二階段
  11. # 多階段構(gòu)建之第二階段
  12. # 多階段構(gòu)建之第二階段
  13. FROM node:12-alpine
  14. WORKDIR /code
  15. ENV NODE_ENV production
  16. ADD . .
  17. COPY --from=builder node_modules node_modules
  18. # 配置服務(wù)及數(shù)據(jù)庫遷移
  19. RUN npm run config --if-present && npm run migrate --if-present
  20. EXPOSE 3000
  21. CMD npm start

5. 相關(guān)文章 

  • N-API and getting started with writing C addons for Node.js
  • Using Docker for Node.js in Development and Production

分享標(biāo)題:在Docker中如何高效部署NodeServer
標(biāo)題網(wǎng)址:http://www.5511xx.com/article/ccoohcj.html