創建 Dockerfile 檔案

mkdir docker-hexo
cd docker-hexo
touch Dockerfile

填寫 Dockerfile 內容

# 指定基礎鏡像
FROM node:15.14.0-alpine3.13
# 維護者資訊
MAINTAINER example <example@mail.com>
# 執行安裝的目錄
WORKDIR /usr/blog
# 安裝 bash git openssh 以及 c 的編譯工具
RUN apk add bash git openssh
# 設置容器時區為台北,不然發布文章的時間是國際時間,也就是比我們晚 8 個小時
RUN apk add tzdata && cp /usr/share/zoneinfo/Asia/Taipei/etc/localtime \
&& echo "Asia/Taipei" > /etc/timezone \
&& apk del tzdata
# 安裝 hexo
RUN \ 
npm install \
&& npm install hexo-cli -g \
&& npm install hexo-server --save \
&& npm install hexo-asset-image --save \
&& npm install hexo-wordcount --save \
&& npm install hexo-generator-sitemap --save \
&& npm install hexo-generator-baidu-sitemap --save \
&& npm install hexo-deployer-git --save
# 設置通訊連接埠  
EXPOSE 4000

使用 docker build 構建鏡像

格式為

docker build <選項> < 上下文路徑 / URL/->
docker build -t example/docker-hexo .

-t example/docker-hexo : 設置鏡像標籤為 example/docker-hexo
. : 在當前路徑構建(注意最後的點 . ),也可以使用 -f 選項來指定想要建立的 dockerfile 路徑位置

啟動容器

docker run -d -ti --name hexo-blog -p 4000:4000 -v /home/docker/hexo/blog:/usr/blog/ example/docker-hexo /bin/bash

進入容器

docker exec -it hexo-blog /bin/bash

初始化

hexo init

生成靜態檔案

hexo g

啟動 hexo 預覽服務

hexo s

# GitHub 上創建一個專案

創建完成後獲取專案的 SSH 連結
格式為

git@github.com:<GitHub 用戶名>/< 專案名稱 >.git

# 配置 git 一鍵發布

安裝 hexo-deployer-git

npm install hexo-deployer-git --save
  1. ssh-keygen 命令生成 ssh key
ssh-keygen -t rsa -b 4096 -C <youremail@example.com> # 全程按回車
git config --global user.name < 你用 github 用戶名 >
git config --global user.email < 你的 github 郵箱地址 >

# 查看生成的 id_rsa.pub

# 方法 1

cat ~/.ssh/id_rsa.pub

# 方法 2

返回主機的終端,使用 docker ps -a 查看容器 ID

docker ps -a

複製 id_rsa.pub 到主機

docker cp <容器 ID>:/root/.ssh/id_rsa.pub  /home/docker/hexo/.ssh
  1. ~/.ssh/id_rsa.pub 裡的內容複製到 Github

  2. 配置站點 _config.yml 檔案

deploy:
  type: git
  repo: git@github.com:example/example.github.io.git
  branch: master                                        # 設置提交到的分支
  message: Site updated at {{now ("YYYY-MM-DD HH:mm:ss") }} # 設置我們提交的資訊

這段程式碼因為自動被 pangu.js 處理了一下,導致原來的程式碼不能正常顯示
最後一行最後面的全角 需要改為半角的 }

  1. 最後使用 hexo g -d 就可以一鍵部署了
    當然也可以先用 hexo g 生成靜態檔案,接著 hexo s 啟用預覽,確認沒問題後,再使用 hexo d 部署到 GitHub 上

如果要在宿主機上一鍵部署,只需輸入以下命令即可,也可以寫成腳本檔案執行

docker exec -it <容器 ID> /bin/bash -c 'cd /usr/blog && hexo g -d'

# 注:如果安裝了 hexo-all-minifier 用來壓縮生成檔案,需要額外安裝 c 程序的編譯工具

apk add libtool automake autoconf nasm gcc g++ make

在使用 npm 安裝完後需要把 node_module 刪掉,用 yarn 重新編譯一下。因為在容器裡 npm 不編譯 hexo-all-minifier 的一些 C++ 依賴包,rebuild 也沒用。而 yarn 會編譯,所以是個挺奇怪的 bug

# Hexo 一些常見命令

  1. 新增文章 hexo new <文章標題/名稱>
  2. 新增草稿,不會出現在文章中 hexo new draft <文章標題/名稱>
  3. 將草稿中的文章發佈到_post 中 hexo publish draft <文章標題/名稱>
  4. 清空 hexo 生成的 public 檔案 hexo clean
  5. 生成靜態檔案 hexo g
  6. 啟用預覽 hexo s
  7. 部署檔案 hexo d

本文由 使用 docker 搭建 Hexo 改編而來,並根據授權方式採用 CC BY-SA 4.0 協議 分享

更新於

閣下的好意本人心領了,但本人不接受任何形式的捐贈,如果依然想捐贈,那就請捐贈給那些讓世界變得更美好的非營利組織吧

鹽 聯合國系統及其機構

聯合國系統及其機構

鹽 紅十字國際委員會

紅十字國際委員會

鹽 sci-hub

sci-hub