Docker最全教程之使用Node.js搭建團隊技術文件站(二十三)

雪雁發表於2019-06-05

前言              

各種程式語言均有其優勢和生態,有興趣的朋友完全可以涉獵多門語言。在平常的工作之中,也可以嘗試選擇相對適合的程式語言來完成相關的工作。

在團隊技術文件站搭建這塊,筆者嘗試了許多框架,最終還是選擇了Hexo,主要是由於其豐富的主題和外掛,並且靈活和高度可定製化,改起來也非常方便。我們團隊文件站即使用Hexo來構建,並且基於容器配置了完整的程式碼流水線:docs.xin-lai.com

如果對站點配置、主題、外掛存在疑問,可以加群溝通。


 目錄

  • 官方映象 
  • 編寫一個簡單的Web伺服器 
  1. 編碼 
  2. 編寫Dockerfile 
  3. 構建並執行 
  • 使用Hexo搭建團隊技術文件站 
  1. 安裝 
  2. 初始化 
  3. 配置站點資訊 
  4. 生成靜態檔案 
  5. 使用hexo-server進行託管 
  6. 使用容器構建和託管 

 Node.js 是一個基於 Chrome V8 引擎構建的JavaScript執行環境,是一個讓JavaScript能夠執行在服務端的開發平臺。Node.js可以方便地搭建響應速度快、易於擴充套件的Web應用。Node.js 使用事件驅動, 非阻塞I/O模型而得以輕量和高效,非常適合在分散式裝置上執行資料密集型的實時應用。

Node.js的誕生給前端開發人員帶來了極大的驚喜,傳統的Web 開發者,前端使用JavaScript進行程式設計,伺服器端程式碼得用另外一種語言,比如Java、.NET、PHP 等等。但是 Node.js 出現之後,前端開發者使用JavaScript就可以前後端通吃了。


官方映象

官方映象地址:https://hub.docker.com/_/node

 


 編寫一個簡單的Web伺服器

1.編碼

使用Node.js編寫一個簡單的Web伺服器非常簡單,主要需要用到http模組,http模組主要用於搭建 HTTP 服務端和客戶端,全部程式碼如下所示:

// 載入http模組
const http = require('http');
// 設定埠

const port = 80;

// 建立Web伺服器

const server = http.createServer((req, res) => {

// 設定響應的狀態碼

res.statusCode = 200;

// 設定響應的請求頭

res.setHeader('Content-Type', 'text/plain');

// 設定響應輸出文字

res.end('Hello World !');

});

// 設定Web伺服器監聽埠

server.listen(port);

 

2.編寫Dockerfile

Dockerfile檔案如下所示:

#指定node映象的版本
FROM node:8.9-alpine

#對外暴露的埠

EXPOSE 80

# 複製檔案

COPY . .

# 執行

ENTRYPOINT ["node","app.js"]

 

3.構建並執行

構建命令如下所示:

docker build --rm -f "dockerfile" -t nodetest1:latest .

 

執行:

docker run --rm -p 4000:80 nodetest1:latest

 

在日常開發中,一些簡單的指令碼的編寫,為了避免反覆的構建過程,大家同樣可以參考PHP一節,然後直接執行Node.js的映象來執行Node.js的指令碼。

參考指令碼如下所示:

docker run -it --rm `

--name node-running-script `

-v D:\temp\node:/usr/src/myapp `

-w /usr/src/myapp `

node:8.9-alpine node app.js

使用Hexo搭建團隊技術文件站

Hexo 是一個快速、簡潔且高效的部落格(不僅僅是部落格)框架,他可以使用 Markdown(或其他渲染引擎)解析文章,在幾秒內,即可利用靚麗的主題生成靜態網頁。我們可以用其來搭建部落格、文件站點或者其他官網。接下來,我們將使用Hexo來搭建團隊技術文件站。之所以選擇Hexo,主要原因如下:

  • 主題豐富

Hexo的主題很多,我們在官網就能找到很多可用的主題,而且均已開源,如下所示:

 

  • 外掛豐富

在官網,我們就可以找到很多各種各樣的外掛,比如搜尋、字數統計、自動分類、百度網址提交、靜態資源壓縮等等各種各樣的開源外掛:

 

  • 靈活可擴充套件

無論是主題還是外掛,均為開源。相關主題的修改也非常簡單,您只要具備一定的JavaScript和Html的知識,就可以完成對主題和外掛的修改。

  • 支援對Markdown進行渲染

無論是搭建部落格還是技術文件站,使用Markdown進行文章編寫都是需要優先考慮的。團隊成員僅需提交Markdown,就可以生成一個漂亮美觀的靜態站點,這是一件多麼愜意的事情啊!

接下來,我們就演示如何一步一步的使用Hexo來構建團隊技術站點:

1.安裝

在安裝Hexo之前,我們先必須安裝好以下內容:

接下來,我們僅需使用以下命令來安裝Hexo:

npm install -g hexo-cli

npm是Node.js的包管理工具,在安裝Node.js時會順帶安裝好,通過以上命令,我們將使用npm全域性安裝(安裝到全域性目錄)hexo-cli。

2.初始化

接下來,我們可以開始使用Hexo建站了。首先我們需要進行一些站點初始化的工作:

hexo init <folder>

目錄為選填,不填則預設當前目錄。

初始化完成之後,就可以看到目標目錄下多了很多內容:

接下來,我們使用npm管理工具進行安裝相關包:

npm install

3.配置站點資訊

在根目錄下,我們可以找到“_config.yml”檔案,通過修改該檔案,我們可以在此配置大部分引數:

 

具體配置資訊見官網說明:https://hexo.io/zh-cn/docs/configuration

4.生成靜態檔案

預設情況下,Hexo進行站點初始化時,已經完成了預設主題(landscape)和內容(hello-world.md)的設定,我們可以直接執行以下命令來生成靜態檔案:

hexo generate

 

執行之後,我們可以在“public”目錄看到以下靜態檔案:

我們還可以使用命令“hexo deploy”來部署站點,比如部署到GitHub然後使用GitHub進行託管。Hexo支援多種部署方式,具體見官網:https://hexo.io/zh-cn/docs/deployment

5.使用hexo-server進行託管

我們也可以使用官方元件hexo-server進行託管我們的靜態站點,在使用之前,我們得先進行安裝:

npm install hexo-server –save

安裝完成後,就可以使用以下命令來啟動web伺服器來進行檢視了:

hexo server -p 5000

-p引數用於指定埠,預設埠為4000:

接下來,我們就可以用瀏覽器直接開啟這個地址進行訪問了:

至此,一個簡單的靜態站點就搭建好了。我們可以配置導航連結,或者使用主題和外掛來支援各種自定義的功能。例如如下所示的站點:

6.使用容器構建和託管

初步瞭解Hexo之後,我們可以使用Docker來構建和託管我們的站點。主體參考流程如下所示:

以上流程僅供參考,TeamCity的配置請參考DevOps相關章節。

Dockerfile檔案如下所示:

FROM node:10.15.3-alpine
# 設定標籤

LABEL author=雪雁 email=xinlai@xin-lai.com site=https://docs.xin-lai.com

# 設定容器內埠

EXPOSE 8000

# 新增目錄

ADD . /app

# 設定當前工作目錄

WORKDIR /app

# 複製檔案

COPY . .

# 設定npm並且使用npm安裝hexo以及相關外掛,然後生成靜態頁並且安裝hexo-server

RUN npm config set unsafe-perm true && \

npm config set registry https://registry.npm.taobao.org && \

npm install -g hexo-cli && \

# hexo clean && \

cd src && \

npm install hexo --save && \

npm install hexo-neat --save && \

npm install --save hexo-wordcount && \

npm i -S hexo-prism-plugin && \

npm install hexo-generator-search --save && \

npm i hexo-permalink-pinyin --save && \

hexo generate && \

npm install hexo-server --save

# 設定工作目錄

WORKDIR src

# 使用hexo-server託管靜態檔案

ENTRYPOINT ["hexo", "server","-p","8000"]

 


 

往期內容連結

Docker最全教程——從理論到實戰(一)

Docker最全教程——從理論到實戰(二)

Docker最全教程——從理論到實戰(三)

Docker最全教程——從理論到實戰(四)

Docker最全教程——從理論到實戰(五)

Docker最全教程——從理論到實戰(六)

Docker最全教程——從理論到實戰(七)

Docker最全教程——從理論到實戰(八)

相關文章