Building hexo blog using docker


Introduction

目的是只需用docker-compose up -d就能快速佈署
然後docker-compose restart就能更新內容與設定

爲了能夠直接在本機撰寫文章,需要將container內的USER設定成和本機一致
這點可以使用docker run -u $(id -u):$(id -g)或在docker-compose.yml設定user參數
如果有其他管理檔案權限的解法歡迎留言分享

因此我建立了一個image: hunglin59638/hexo-blog
可透過上述操作方便管理跟快速佈署

但這image並不是hexo deploy靜態網頁到github page,而是hexo server在本機的port: 4000 (default) 開啟服務

要能用域名訪問還需要使用到反向代理
實踐方式可以參考下方文章

docker瞬間佈署reverse proxy還有SSL認證

但如果想用hexo deploy到github page訪問blog也可以,只是需要設定_config.yml中的deploy
還有將entrypoint的hexo server改成hexo deploy,這就需要重新docker build

Dockerfile

有興趣的話可以從github看到Dockerfile內容
這裏就只敘述這個image有設定哪些功能

Environment

Installed plugins

  • hexo-generator-feed
  • hexo-generator-searchdb
  • hexo-asset-image
  • hexo-generator-sitemap
  • hexo-admin

Run the container

hexo整個專案是儲存在同一個目錄下,container內的位置在/hexo
使用docker run -v如果本機沒有該目錄就會自動產生,但是目錄的檔案權限是root:root
如果是第一次run container會因權限導致啓動失敗
所以要事先產生一個空目錄

原因是ENTRYPOINT是執行entrypoint.sh這個腳本,
它會先判斷目錄是否爲空,如果是的話就會進行hexo init和後續設定
有檔案存在的話就會直接執行hexo -s啓動服務

操作示範:

mkdir ./blog
docker run --rm -d -p 4000:4000 -v $PWD/blog:/hexo hunglin59638/hexo-blog:latest 

成功啟動後網頁就會出現在http://yourip:4000

Plugins

Search post

使用Next有支援的local search,讓讀者可以搜尋文章

RSS

搭配自動化平台如Integromat或Power automate,就能以rss作爲觸發條件,將新增的文章轉貼到社群平台
需要設定site url,位置在/_config.ymlurl:
預設位置在http://yourip/atom.xml/

Submit the sitemap to google search console

爲了能夠增加曝光度,可以製作sitemap給google search console
需要是有註冊網域或是用github page
只有安裝hexo-generator-sitemap是不夠的,還需要將sitemap.xml提交到Google Search Console
操作解說下方文章的作者講解的很詳細

輕鬆地提交 Hexo 部落格的 Sitemap.xml 到 Google Search Console
(24) 試著學 Hexo - SEO 篇 - Google Search Console

第一步要先在Google Search Console新增資源
點進Google Search Console後需要新增網域(資源)

再來要把TXT 記錄複製到網域商的DNS設定進行驗證
這步驟需要有跟網域商註冊域名才能操作

Comments

預設是使用utterances
它是使用github repo的issue tracker存取留言
不用額外註冊其他平台帳號,缺點是需要登入github帳號才能留言

plugin已經安裝,但是github端還是需要設定
操作解說一樣可以參考下方文章

在 Hexo 的 Next 樣板中引入 utterances 的留言區 | GitHub Issue

Admin interface

訪問http://hostip:4000/admin可從後台管理post和page
可有可無的功能,方便之處在於不用使用vscode之類的編輯器撰寫,
直接在browser上就可以發佈文章
爲求最基本的安全,我有設定初始帳密
username: admin
password: hexoadmin
如果有使用我的image的話要記得更改

Edit posts

平時編輯文章的方式是用VSCode用Remote-SSH登入到架設hexo-blog的主機,
直接在source/_drafts編輯
寫好之後移到_posts後執行docker-compose restart

另一種方式就是用hexo-admin,打開瀏覽器訪問http://hostip:4000/admin
就可以直接線上編輯

Tips

分享一些寫文章時有使用到的技巧?

read more

在首頁會條列出文章,但沒有使用截斷的話就會整篇文章都顯示在首頁
想要只顯示部分文章內容可以在要截斷的位置插入 <!--more-->

insert local images

要插入自己的圖片的話需要在_posts建立一個跟文章title相同名稱的目錄
不是檔案名稱喔,是在.md最前面設定的屬性
以這篇為例


---
title: Building hexo blog using docker
date: 2022-09-20 00:00:00
categories:
  - IT
tags:
  - hexo
  - linux
  - docker
---

title是Building hexo blog using docker
所以要建立一個目錄也叫Building hexo blog using docker


.
├── Building hexo blog using docker.md
├── Building hexo blog using docker
│   ├── image.png

然後在.md中插入![](image.png)
就可以渲染出圖片了

如果是要引用自己其他的文章可以使用hexo特有的語法
不用使用permalink,以免以後更換domain name導致連結失效

在台灣網域商註冊domain name這篇為例
permalink: https://blog.hlin.tw/32d3eb6d4ff7/
hexo語法:{% post_link 在台灣網域商註冊domain_name %}


Author: Hung-Lin, Chen
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source Hung-Lin, Chen !
  TOC