博客搬家 - 記第四次搬家(hugo建站推送到谷歌雲存儲)

寫在前面,搬遷記錄

記錄我的博客這次搬家過程。我的博客之前經歷過:

  1. wordpress
  2. github page
  3. Bitcron - 機制很不錯(寫完的博客自動保存到dropbox併發布,可惜搜索引擎的收錄不是很好。)
  4. 這次搬遷 2020年4月10日 初步完成

博客的架構

現在寫博客一直採用 markdown 語法,所以也是本次可以順利遷移的一大前提。 最近兩年一直用的是 Bitcron ,非常順滑。每次寫完 md 文件,直接保存即可(博客立即更新可見)。不過一直搜索引擎的收錄不是很好,如我直接搜索 "Bob Jiang" 我的博客始終排不到第一個。很奇怪......

索性現在申請了一年免費的 google cloud,就做個搬遷。

搬遷之後的博客存儲在 google cloud storage 上,DNS也順便切換到 Cloudfare 上了。 博客系統使用的是 hugo ,主題用的是 Ezhil。博客整體存放於 github上,每次提交到github會自動出發一次 github action,推送到谷歌存儲。

博客的工作流

博客的工作機制如下:

  1. 本次編寫博客(md文件) 並本次檢查 (hugo server)
  2. github push 到 github 倉庫
  3. 每次 push 或者 pull request 會出發 github action
  4. github action 進行 hugo 編譯
  5. github action 推送博客靜態文件到 谷歌存儲

博客的配置 (手把手教你配置)

第一步,配置hugo

安裝 hugo 可以參考我朋友的博客,免費搭建一個靜態博客。搭建完成後,關於主題,這裏我採用的 hugo 主題是 Ezhil,可以直接用 github fork一份 hugo 主題。具體操作參考 Ezhil

hugo和主題都準備好後,目錄結構如下:

  • content/ 博客的源文件,markdown格式
  • public/ 博客的靜態網頁,hugo自動生成(根據你選擇的模板生成漂亮的靜態網頁)
  • static/ 博客的全局靜態資源,如全局使用的圖片
  • theme/ 博客的主題
  • config.toml 博客的配置文件

第二步,新建github倉庫

github上需要創建一個新的倉庫 (假設你已經有了github賬號)。然後把本地的博客目錄中,除了 public/ 目錄的內容推送到代碼倉庫中。

  1. 訪問 github,登錄(註冊)賬號
  2. 新建一個倉庫,如下圖,點擊 New Repository

new github repository

  1. 填寫倉庫的名字,選擇倉庫的可見性(默認公開的、可以選擇私有的),勾選初始化時創建 README 文件,如下圖:

create github repository

下一步需要創建並配置 谷歌存儲 - Google Cloud Storage,然後再回來配置 github secrets

第三步,google cloud storage

這裏我用的谷歌存儲,也可以選擇國內的阿里雲,騰訊雲的OSS服務。

谷歌存儲 - Google Cloud Storage,需要創建一個存儲。 訪問 Console 如下圖google cloud storage console

3.1 創建存儲(bucket)

google cloud storage create bucket

創建存儲,注意:名字必-須是 www.yourdomain.com 不能設置爲根域名(即這裏需要是 CNAME 的名字設置bucket名字)。 根域名可以通過 DNS 的設置來實現。

注意存儲分區(bucket)名字必須是 CNAME 域名的名字(必須是完全一致),如我的分區名字是 www.bobjiang.com。存儲分區不支持直接改名,可以先創建新名字的存儲分區,然後把數據轉移過去來實現。

input bucket name

訪問權限,可以修改爲"統一"方式,這樣可以簡單操作。bucket permission

3.2 增加訪問權限

下面是爲新建的存儲分區(bucket)增加訪問權限,點擊"修改存儲分區權限"bucket update permission點擊"添加成員"add all Users輸入 新成員:allUsers, 角色:Storage Object Viewer (要嚴格檢查這裏的角色權限)add roles to allUsers

最後可以檢查一下權限的設置,這裏應該提示如下:"在互聯網上公開"check bucket public

3.3 權限設置

這裏主要設置 服務賬號 (service account),爲了給其他的第三方進行服務(如接下來我們用 github action 連接)授權。

  1. 進入服務賬號頁面,選擇"IAM和管理",點擊"服務賬號",如圖

google service account

  1. 點擊"創建服務賬號"

google service account

  1. 輸入"服務賬號名稱","服務賬號ID",和"服務賬號說明"

google service account

  1. 第二步默認值即可,進入第三步如下圖,點擊"創建密鑰"

google service account

  1. 選擇密鑰類型 JSON

google service account

  1. 密鑰生成後,保存到本地(一定保存好密鑰,不要丟失)。使用這個密鑰和服務賬號,就可以訪問你的谷歌雲存儲。

google service account

  1. 記住服務賬號的郵箱,如下圖:

google service account email

下一步配置 github secrets

第四步,github secrets

如圖創建如下的兩個 github secrets:

  1. GCP_SA_EMAIL - 值可以參考 服務賬號的創建小節
  2. GCP_SA_KEY - 值爲下面命令的結果(用本地的 JSON 密鑰生成,命令如下)

cat your-json-key.json | base64

add github secrets

第五步,github action

Github action的作用是:

  1. 有代碼push 或者pull request到倉庫時,自動出發下列動作
  2. 準備一個 ubuntu 編譯環境
  3. 準備 hugo 環境
  4. 進行 hugo 編譯
  5. 編譯後的 public 目錄 (靜態網頁) 上傳到 谷歌存儲 - Google Cloud Storage

新建 github action ,並點擊 "set up workflow yourself"

github actiongithub action setup your workflow

我的 github action 代碼如下:

# github action的名字,可以隨意改
name: build hugo and deploy to google cloud platform (storage)

# 什麼時候調用 action,這裏是當 master 上有代碼 push 或者 pull request 會觸發 github action
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

# 環境變量的設置,下面會用到
env:
  GCP_SA_EMAIL: ${{ secrets.GCP_SA_EMAIL }}
  GCP_SA_KEY: ${{ secrets.GCP_SA_KEY }}
  GCP_BUCKET: www.bobjiang.com

# 任務的準備,用 ubuntu最新的環境
jobs:
  setup-deploy:
    name: Setup and Deploy
    runs-on: ubuntu-latest
    steps:

# 檢出master分支的代碼 checkout
    - name: Checkout
      uses: actions/checkout@v2

# 準備hugo環境
# hugo ready & build
    - name: Setup Hugo
      uses: peaceiris/actions-hugo@v2
      with:
        hugo-version: '0.62.2'
        # extended: true

# hugo 編譯生成靜態網頁 public目錄內的內容
    - run: hugo --minify

# deploy to google storage
# 準備 連接到 google 雲
    - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
      with:
        version: '285.0.0'
        project_id: ${{ secrets.GCP_PROJECT_ID }}
        service_account_email: ${{ secrets.GCP_SA_EMAIL }}
        service_account_key: ${{ secrets.GCP_SA_KEY }}
        export_default_credentials: true
# 檢查 google 雲的連接結果
    - run: gcloud info
# 用 gsutil 推送 public 目錄內容到谷歌雲存儲
    - run: gsutil -m rsync -d -c -r public gs://$GCP_BUCKET
    - run: gsutil -m setmeta -h "Cache-Control:public, max-age=3600" gs://$GCP_BUCKET/**/*.html
    - run: gsutil -m setmeta -h "Cache-Control:public, max-age=31536000" gs://$GCP_BUCKET/js/*.js
    - run: gsutil -m setmeta -h "Cache-Control:public, max-age=31536000" gs://$GCP_BUCKET/css/*.css

總結

經過本次梳理後,寫博客完全是本地操作且可以本地調試。 寫博客在 hugo 項目的 content 目錄內寫 markdown 文件 調試可以用 hugo server 本地訪問 http://localhost:1313/

效果滿意後,可以把 content 目錄內的改動 推送到 github 倉庫 後面就是自動化準備環境編譯、部署(github action)到谷歌雲存儲。

所以作爲一個業餘寫手,需要更加關注的是內容產出。
自動化啦......

本文由博客羣發一文多發等運營工具平臺 OpenWrite 發佈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章