hexo 是一款靜態博客工具,不涉及到任何后端、數據庫啥的。 也就是說不管過程中怎么亂七八糟的搗鼓,最終其實在部署的時候需要使用的,其實就是一堆前端靜態資源,html 、js 、css 、jpg 等等,也就是使用 hexo g 命令生成出來的 public 文件夾中所包含的部分。 那么通常來講,對于沒有個人服務器的同學來說,一般是使用 github page 的功能來將靜態頁面托管到 github 上,但是由于國內 github 速度感人,使用起來并不是那么順暢。 如果有個人服務器的話,我們可以使用 nginx 作為靜態資源服務器,來快速部署我們的博客。 下面將介紹如何利用 docker 的 nginx 鏡像來快速部署博客。 一、服務器安裝 docker 環境1. 安裝 docker參考: 在 linux、mac 下快速簡單的安裝 docker 2. 安裝 docker-composedocker-compose 并不是必須使用的,這里是為了更方便的管理我們的容器。
macos 下安裝 docker 時自動就安裝了 docker-compose ,linux 則需要使用下面的命令手動安裝一下。
$ curl -L https://github.com/docker/compose/releases/download/1.8.0/run.sh > /usr/local/bin/docker-compose
$ chmod x /usr/local/bin/docker-compose 二、初始化博客使用 npm i -g hexo-cli 命令全局安裝 hexo-cli ,然后使用 hexo init blog 即可生成一個最簡單的博客項目了。 然后在項目中新建一個 .npmrc 文件,將 registry=https://registry.npm. 寫入文件中,這個的作用是在安裝依賴包將鏡像源切換為國內的淘寶源。 此時可以執行 hexo s 命令后,在瀏覽器中訪問 http://localhost:4000 ,就可以看到博客的頁面了。
 三、添加 Dockerfile 文件這里需要理清楚思路的一點是,整個部署流程我們分為兩個階段,第一個階段是生成靜態文件,也就是使用 hexo g 命令生成 public 文件夾,此過程依賴 nodejs 環境,而第二個階段則是啟動 nginx 。 兩個階段我們會使用 dockerfile 的多階段構建來實現,第一個階段的 nodejs 容器中生成的 public 文件夾會被拷貝到第二個階段的 nginx 容器中使用,最終生成的是一個包含了博客靜態資源和 nginx 的鏡像。 Dockerfile 文件如下
# /Dockerfile
FROM node:8-alpine as builder
WORKDIR /project
COPY . /project/
RUN yarn && yarn global add hexo-cli && hexo g
FROM nginx:alpine
COPY --from=builder /project/public /usr/share/nginx/html
RUN apk add --no-cache bash
因為是使用的 alpine 版本的鏡像,并沒有安裝 bash,所有在部署完成后無法通過 docker exec -it xx bash 進入容器中,所以加上了一行 apk add --no-cache bash,如果沒有后期進入容器的需求,可以刪除這一行,提高構建時的速度。
三、添加 docker-compose.yml 文件其實不使用 docker-compose ,直接 docker run 也是可以的,但是使用 docker-compose 更方便管理,也更加直觀一點。 新建 docker-compose.yml 文件: # /docker-compose.yml
version: '3'
services:
app:
container_name: blog
build:
context: ./
dockerfile: ./ci/Dockerfile
ports:
- '8080:80'
restart: on-failure 上述文件中指定了 容器名字 、Dockerfile 以及需要映射到宿主機的哪個 端口 上,可以根據自己的需求自行調整。 構建并運行容器在項目目錄下執行命令 docker-compse up --build -d ,然后在瀏覽器中訪問 https://localhost:8080 ,如果看到博客頁面了,部署就大功告成啦。

|