hexo搭建個人部落格心得
什麼是hexo?
hexo是基於node.js做的一個靜態檔案生成工具。通過hexo可以將我們寫好的markdown檔案,生成視覺化的html頁面。對於程式設計師來說,寫技術部落格不需要花裡胡哨的排版,簡潔大方。詳情可以檢視github: https://github.com/hexojs/hexo
搭建過程
1. 安裝node.js執行環境
這個可以自行百度,網上教程一堆。我是基於docker容器搭建的,不懂docker是什麼? 檢視我另外一篇文章,
通俗易懂跟你說明白.地址: https://mojun.me/2016/11/08/6311f63b1e68870222ef526f2bda94f8/
上dockerhub把node映象pull下來就行了. node分為很多版本,我使用基於alpine構建的,比較小巧實用,
麻雀雖小五臟俱全,完全能應付這個部落格。
# 拉映象
docker pull node:lts-alpine
# 執行容器 掛載目錄 對映埠
docker run -it -v /home/hexo:/home/hexo -p 4000:4000 --name hexo-blog node:lts-alpine
# 進入容器
docker exec -it hexo-blog /bin/sh
#在/home/hexo目錄下:
npm install -g hexo-cli
#初始化hexo:
hexo init blog
# 啟動 服務
hexo s # 此時就可以通過4000埠訪問了
# 生成靜態檔案
hexo g -d # 此時生成一個public目錄,把public目錄通過nginx/apache配置一下即可訪問
整體的流程還是挺簡單的。切換主題 等配置 網上有許多詳細教程,這裡就不提了。提一些在途中遇到的問題
遇到的坑
在搭建完畢後我想通過webhook鉤子,執行hexo s -g的這麼一個過程,能夠讓我新寫的文章重新生成出來,而不是每次手動去執行。webhook鉤子就是git倉庫(如github 碼雲)提供的一個功能,你設定git的某個"動作"(如當push的時候,當打tag的時候等等),會去呼叫你提供的一個公網能訪問http介面,從而實現你自己想要在這些動作之後的一些操作。
我採用nginx+php去做一個簡單介面,實現的功能內容如下:
# 1. 進入專案目錄,拉去最新程式碼
cd /home/hexo && git pull
# 2. npm更新,防止你在push新的程式碼中新增依賴包
npm install
# 3. 生成靜態檔案
hexo g -d
內容很簡單。
1. alpine中的crond有坑
以上shell指令碼很簡單。但是由於webhook有介面超時時間限制(碼雲 5s),所以介面要做成非同步的形式。因為上面的shell指令碼執行時間較長,大概在20s左右,所以只能非同步執行,同步介面超時。於是,自己把問題複雜化,但是同時也才踩到這個坑。
瞭解php的同學都知道,php不支援非同步。所以我想利用crond,定時去執行我的shell指令碼。首先介面把請求時間拿到,為了更準確的執行,我是延時1分鐘才執行指令碼,把定時任務寫進/etc/crontabs/root裡面。例如現在拿到時間是 2019-2-20 21:39:00 則 定時任務是 40 21 20 2 * /root/hexo.sh。但是到了時間shell不執行, ps檢視 crond程式正在執行,許可權也沒問題。 但是加入其它簡單任務,有時可以執行有時又不可以。。。網上查了好多沒找到原因, 後來網上也有提到在alpine中基於busybox的crond不穩定。行吧,以後能不用crond就不用…。 不過在實體物理機上centos7或者ubuntu倒是沒有問題。
後來發現是自己想多了,一個shell_exec後臺執行shell指令碼即可,沒那麼多亂七八糟的。
shell_exec('/root/hexo.sh > /dev/null 2>&1 &')
# 解釋
1. /root/hexo.sh > /dev/null #將指令碼標準輸出的內容定向輸入到一個不存在的裝置/dev/null(俗稱"黑洞")
2. 2>&1 # 2代表標準錯誤 重定向到 &1(標準輸出)
3. & # 將任務排程到後臺執行。 常見在某個命令後面加 & 不佔用當前shell控制檯
2. 遷移csdn文章,python安裝pyquery失敗
我採用python3去遷移我csdn上的文章到新部落格地址。其中也是使用了python基於alpine做的映象,有一個lxml擴充套件一直裝不上。使用apk add lxml也裝不上,有報錯gcc,加上了gcc也沒用。 之後多番嘗試,apk add g++就好了。 所以,以後遇到這種問題,最好 gcc和g++都裝上,可能有些使用c++寫的,光用gcc編譯可能出錯。
要在docker容器pull程式碼,對映.ssh目錄即可
在docker容器假如沒有對映宿主機的.ssh目錄,執行git pull報錯,拉不到程式碼,所以確保容器apk add openssh和app add git之後,.ssh也要對映掛載過去即可。
3.hexo第三方評論外掛gitalk gitment
我在使用gitment的使用安裝各種配置之後,登入個人github會被報[object ProgressEvent]的錯。檢視很多原因,由於作者的伺服器好像不用了導致的,網上有各種解決方案,不過感覺太麻煩,直接換gitalk就好了,很順利網上搜尋詳細教程即可,很順利。
我的個人部落格:https://mojun.me
相關文章
- hexo搭建個人網站部落格完全教程Hexo網站
- 使用 hexo 搭建個人部落格Hexo
- hexo+github搭建個人部落格HexoGithub
- Hexo+Gitee搭建個人部落格HexoGitee
- Hexo 搭建部落格Hexo
- 搭建Hexo部落格相簿Hexo
- hexo結合github搭建個人部落格HexoGithub
- 【GitHub】GitHub+Hexo搭建個人部落格GithubHexo
- Hexo+Netlify快速搭建個人部落格Hexo
- hexo 部落格搭建筆記Hexo筆記
- Hexo部落格搭建記錄Hexo
- 手把手教你用Hexo搭建個人技術部落格Hexo
- 使用hexo+Anisina+github搭建個人部落格HexoGithub
- 從零開始搭建一個 hexo 部落格。Hexo
- HEXO-個人部落格搭建教程彙總Hexo
- 史上最快用GitHub、Hexo搭建個人部落格GithubHexo
- Hexo+Github輕鬆搭建個人部落格HexoGithub
- 利用docker快速搭建hexo部落格DockerHexo
- 整合github、hexo搭建部落格GithubHexo
- 使用 Hexo 搭建靜態部落格Hexo
- 如何使用Github+Hexo快速搭建個人部落格GithubHexo
- 使用Hexo框架10分鐘搭建個人部落格Hexo框架
- 基於 Hexo + GitHub Pages 搭建個人部落格(三)HexoGithub
- hexo建立個人部落格Hexo
- Hexo + Github 搭建靜態部落格(一)HexoGithub
- Hexo-Node-Git搭建部落格HexoGit
- Git+Hexo搭建靜態部落格GitHexo
- Hexo+Github部落格搭建完全教程HexoGithub
- 基於Hexo搭建靜態部落格Hexo
- 使用Hexo搭建個人部落格的終極資料Hexo
- vps攜手hexo的部落格搭建之旅Hexo
- 使用docker搭建nginx掛載hexo部落格DockerNginxHexo
- Hexo+Github搭建部落格總結HexoGithub
- Hexo+GitHub+阿里域名搭建自己部落格HexoGithub阿里
- hexo 搭建部落格常用命令Hexo
- 搭建部落格 (Hexo + github + butterfly主題)HexoGithub
- 同為部落格,不同風格 ——Hexo另類搭建Hexo
- 關於Hexo6.0搭建個人部落格(高階篇)Hexo