原文地址:https://blog.kaygb.com/210.html
談及靜態(tài)網(wǎng)站的好處词渤,無非是快速輕量牵舱,甚至無需購買服務(wù)器,使用github pages或者coding等托管即可實現(xiàn)缺虐。同時芜壁,jsdelivr可對github公開倉庫的靜態(tài)資源進(jìn)行加速,并且自帶全球cdn,快速慧妄,并且完全免費顷牌。
近期,我的博客網(wǎng)站也遷移到了hexo塞淹,并托管在github pages韧掩,由于之前申請過騰訊云開發(fā)的9.9元靜態(tài)網(wǎng)站托管服務(wù),本著不用白不用的原則窖铡,我把國內(nèi)的線路以及博客生成的頁面都放在了騰訊云開發(fā)靜態(tài)網(wǎng)站托管服務(wù)上。
部署原理
首先在本地安裝hexo環(huán)境坊谁,配置好主題以及自定義的配置费彼,然后將整個hexo目錄推送到github私有倉庫。私有倉庫在接受到push之后口芍,使用github action進(jìn)行hexo g和hexo deploy箍铲,將生成的靜態(tài)文件推送到另一個以用戶名.github.io
為名稱的倉庫。
如你所見鬓椭,我們需要使用兩個github倉庫來構(gòu)建我們的個人博客颠猴,其中私有倉庫(我們可以將名稱設(shè)置為blog-source)作為博客源文件保存目錄,包含所有的hexo配置文件以及我們的主題文件小染。
這樣的好處就是翘瓮,我們可以完整保留hexo的目錄,不用擔(dān)心文件丟失的問題裤翩,還有就是我們可以直接在github網(wǎng)頁端直接進(jìn)行文章的寫作资盅,并且支持原生的github markdown格式。
在我們commit之后 github action會自動幫我們構(gòu)建以及發(fā)布踊赠,我們只需要安心寫作即可呵扛。
部署方式
本地安裝hexo環(huán)境
這一步可以根據(jù)hexo官方文檔來進(jìn)行配置。
創(chuàng)建兩個倉庫
一個是私有的倉庫筐带,用來存放hexo所有的源文件今穿,另一個是公開的以 用戶名.github.io
的倉庫。
設(shè)置一組密鑰對
使用ssh-keygen生成一組公私秘鑰對
ssh-keygen -t rsa -b 4096 -f ~/.ssh/github-actions-deploy
在Settings
->SSH and GPG keys
添加剛剛生成的公鑰伦籍,名稱隨意蓝晒。
在私有倉庫的Settings
->Secrets
里添加剛剛生成的私鑰,名稱為 ACTION_DEPLOY_KEY
鸽斟。
編寫github action配置文件
在hexo目錄創(chuàng)建.github
文件夾拔创,并在里面創(chuàng)建workflows
文件夾,然后在里面新建blog.yml
貼出我的GitHub action配置文件富蓄,后面再進(jìn)行講解剩燥。
name: Deploy Blog
on: [push] # 當(dāng)有新push時運行
jobs:
build: # 一項叫做build的任務(wù)
runs-on: ubuntu-latest # 在最新版的Ubuntu系統(tǒng)下運行
steps:
- name: Checkout # 將倉庫內(nèi)master分支的內(nèi)容下載到工作目錄
uses: actions/checkout@v1 # 腳本來自 https://github.com/actions/checkout
- name: Use Node.js 12.x # 配置Node環(huán)境
uses: actions/setup-node@v1 # 配置腳本來自 https://github.com/actions/setup-node
with:
node-version: "12.x"
- name: Setup Hexo env
env:
ACTION_DEPLOY_KEY: ${{ secrets.ACTION_DEPLOY_KEY }}
run: |
# set up private key for deploy
mkdir -p ~/.ssh/
echo "$ACTION_DEPLOY_KEY" | tr -d '\r' > ~/.ssh/id_rsa # 配置秘鑰
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
# set git infomation
git config --global user.name 'kaygb' # 換成你自己的郵箱和名字
git config --global user.email 'xxx@xxx.com'
# install dependencies
npm i -g hexo-cli # 安裝hexo
npm i
npm install hexo-deployer-git
npm i -S hexo-generator-search hexo-generator-json-content
npm i -S hexo-renderer-stylus
npm install hexo-generator-feed
npm install hexo-generator-sitemap
- name: Deploy
run: |
# publish
hexo clean && hexo generate && hexo deploy # 執(zhí)行部署程序
# 以下是云開發(fā)的配置
- name: Deploy static to Tencent CloudBase
id: deployStatic
uses: TencentCloudBase/cloudbase-action@v1.1.0
env:
PERSONAL_TOKEN: ${{ secrets.PERSONAL_TOKEN }}
PUBLISH_BRANCH: master
PUBLISH_DIR: ./dist
with:
secretId: ${{ secrets.SECRET_ID }}
secretKey: ${{ secrets.SECRET_KEY }}
envId: ${{ secrets.ENV_ID }}
staticSrcPath: ./public
其中,在31至38行內(nèi),可以添加自己所使用的hexo插件灭红,如果本地測試的時候使用了此插件侣滩,一定要記得將那個插件的npm安裝命令寫在那里。
部署至騰訊云開發(fā)靜態(tài)網(wǎng)站托管服務(wù)
云開發(fā)Cloudbase提供了可直接使用的action:https://github.com/marketplace/actions/tencent-cloudbase-github-action
在騰訊云開發(fā)控制臺獲取token:https://console.cloud.tencent.com/cam/capi
然后在項目 Setting/ Secrets 里設(shè)置 SECRET_ID
, SECRET_KEY
, ENV_ID
信息
根據(jù)文檔做出修改然后添加在blog.yml后面
# 以下是云開發(fā)的配置
- name: Deploy static to Tencent CloudBase
id: deployStatic
uses: TencentCloudBase/cloudbase-action@v1.1.0
env:
PERSONAL_TOKEN: ${{ secrets.PERSONAL_TOKEN }}
PUBLISH_BRANCH: master
PUBLISH_DIR: ./dist
with:
secretId: ${{ secrets.SECRET_ID }}
secretKey: ${{ secrets.SECRET_KEY }}
envId: ${{ secrets.ENV_ID }}
staticSrcPath: ./public
遇到的問題
同時变擒,目前我也遇到很多問題君珠,包括到現(xiàn)在為止還無法解決的問題。
hexo推送到倉庫失敗的解決辦法
一般來說是無法推送.git
目錄的娇斑,如果你使用的主題是直接使用git clone下來的策添,那么一定就會存在.git
目錄,這時我們可以在.gitignore文件內(nèi)忽略此目錄或者直接刪除.git文件夾毫缆。由于我是直接刪掉文件夾唯竹,所以另一種方式請大家自行嘗試。
hexo無法部署推送點開頭的文件夾 .github
其實我最開始是想在公開倉庫設(shè)置一個github action苦丁,在推送到公開倉庫之后再由公開倉庫的action推送到騰訊云 開發(fā)浸颓,但是不知道為何hexo deploy的時候無論如何都不會將.github
文件夾推送上去,即使配置了skip_render
和include
也不行旺拉,但是我在本地hexo g的時候就可以在public目錄生成.github
文件夾产上,并且我在網(wǎng)頁端公開倉庫嘗試創(chuàng)建action文件,可以推送成功蛾狗,但是私有倉庫推送之后action文件就會被覆蓋晋涣,目前暫時無法解決這個問題。
所以只能妥協(xié)在同一個倉庫進(jìn)行構(gòu)建推送沉桌,由于處理的文件較多姻僧,所以每次的部署都會給我發(fā)送一封構(gòu)建失敗的郵件,但它其實是已經(jīng)部署成功了蒲牧,我查找了很多的資料撇贺,目前暫未解決這個問題,如果您遇到這個問題并且具有解決辦法冰抢,煩請您告知松嘶,非常感謝!