創建 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 |
- 用
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 |
將
~/.ssh/id_rsa.pub裡的內容複製到 Github配置站點
_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 處理了一下,導致原來的程式碼不能正常顯示
最後一行最後面的全角 } 需要改為半角的 }
- 最後使用
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 一些常見命令
- 新增文章
hexo new <文章標題/名稱> - 新增草稿,不會出現在文章中
hexo new draft <文章標題/名稱> - 將草稿中的文章發佈到_post 中
hexo publish draft <文章標題/名稱> - 清空 hexo 生成的 public 檔案
hexo clean - 生成靜態檔案
hexo g - 啟用預覽
hexo s - 部署檔案
hexo d
本文由 使用 docker 搭建 Hexo 改編而來,並根據授權方式採用 CC BY-SA 4.0 協議 分享