# 前言
這篇文章是寫給:
- 沒有程式語言基礎
- 略懂一點HTML和CSS
- 沒碰過Github和任何靜態網頁生成器
- 除了記事本和Notepad++以外沒碰過其他程式碼編輯器
- 幾乎不會使用命令提示字元/終端機
- 系統是Windows 10
- 不想花錢
- 基本上是指我啦。但經歷一兩個月的爬文和當個stack overflow junkie,終究還是搞得起來的。
看了這篇文章後基本上就能學會:
- 安裝程式碼編輯器
- 在Windows上安裝Hugo
- 安裝Hugo佈景主題
- 撰寫markdown格式文章
- 使用Hugo生成靜態網頁
- 將靜態網頁發佈到GitHub
- 利用[GitHub Pages](https://pages.github.com/)託管網站內容
- 利用[AWS Amplify](https://aws.amazon.com/tw/amplify/)託管網站內容
需要安裝的程式/套件:
- Hugo
- Git
- GitHup Desktop
- 程式碼編輯器([Atom](https://atom.io/)或[Visual Studio Code](https://code.visualstudio.com/))
--------------------------
# 安裝程式碼編輯器
相信需要閱讀本篇教學的朋友,應該都不熟怎麼直接在終端機上輸入指令。不想自虐的話乖乖裝編輯器吧,Atom和VSC都是免費的開源軟體。
- GitHub家的[Atom](https://atom.io/)
- 微軟家的[Visual Studio Code](https://code.visualstudio.com/)
裝哪個都行,用力點擊Download然後開始安裝就對喇,個人用的是Atom。
## Atom終端介面
Atom本身沒有終端介面,需要另行安裝package:[PlatformIO IDE Terminal](https://atom.io/packages/platformio-ide-terminal)
安裝方式:
- 進入Atom
- File ⇒ Settings ⇒ Install
- 在+Install Packages的搜尋列輸入`PlatformIO IDE Terminal`
- 點選Install
終端機啟用方式:**ctrl+`**
使用終端機可能會遇到的權限的問題。處理方式:
- 先退開Atom,右鍵Atom圖標 ⇒ 內容 ⇒ 相容性
- 設定 ⇒ 核選「以系統管理員身份執行此程式」⇒ 套用
--------------------------
# 安裝Hugo
本步驟主要參考了Mike Dane的影片教學:
{{< youtube G7umPCU-8xc >}}
[Hugo.io](https://gohugo.io/)建議的方法、需要使用對一般人(比方說我)很陌生的終端機安裝方式,其實也不用那麼麻煩。可以直接到[Hugo官方GitHub release](https://github.com/gohugoio/hugo/releases)下載核心程式。
比方說我的系統是64位元Windows 10,此時Hugo版本已推出到0.80.0,那麼我就在release頁面上尋找`hugo_0.80.0_Windows-64bit.zip`並下載回來,檔案很小只有14.2MB。下到稍微舊一點的版本也無所謂。
在電腦中任意位置創建資料夾,路徑必須是全英文,比方說`C:\User\Hugo\bin`,將zip檔解壓縮後的hugo.exe丟進bin資料夾,其他可以無視。
## 設定環境變數
然而Windows對於程式開發用戶並不是那麼親切,Windows無法自動透過終端指令尋找到Hugo核心程式,必須自行修改系統指認路徑:
- 在Windows左下角的開始鈕按下右鍵 ⇒ 搜尋 ⇒ 搜尋「系統環境變數」
- 在搜得的結果中點擊「編輯系統環境變數」
- 進階 ⇒ 環境變數 ⇒ [用戶名]的使用者變數
- 在項目中的變數欄選取「Path」⇒ 編輯 ⇒ 新增
- 輸入hugo.exe的所在路徑,以本例來說就是`C:\User\Hugo\bin`
- 確定 ⇒ 關閉環境變數視窗、系統內容視窗
接著打開Atom,開啟新的專案,指定根目錄為`C:\User\Hugo\`。啟動終端機並運行指令:
```
hugo version
```
以檢查hugo是否已經能夠正常運作。假設你從終端機看到一行:
`Hugo Static Site Generator v版本 windows/amd64 BuildDate: 日期`,就代表系統已經成功安裝Hugo!
--------------------------
# 安裝Hugo佈景主題
首先,進入Atom並啟用終端機,在專案根目錄`C:\User\Hugo\`運行
```
hugo new site Mysite
```
hugo會在根目錄下創建一個名叫`Mysite`的資料夾,這個資料夾名稱可以隨意自訂。在Mysite裡面會自動生成[以下結構](https://gohugo.io/getting-started/directory-structure/):
名稱 | 解說
--- | ---
[archetypes](https://gohugo.io/content-management/archetypes/#readout) | 定義文章/資料的原型,本教學中用不到
[content](https://gohugo.io/content-management/organization/) | 放置部落格文章的資料夾
[data](https://gohugo.io/templates/data-templates/) | 類似content資料夾,但存放語法、掛件等組態檔案,本教學中用不到
[layouts](https://gohugo.io/templates/) | 存放網站外觀模板
[static](https://gohugo.io/content-management/static-files/) | 存放所有靜態元件(static element),比方說css、js、svg等
[themes]((https://themes.gohugo.io/)) | 佈景主題庫
[config.toml](https://gohugo.io/getting-started/configuration/) | 選項(settings)
完全不想碰任何程式和網頁語言的前提下,只需要了解如何使用content、themes、comfig.toml,就能架設自己的部落格。
[Hugo官方網站的主題清單](https://themes.gohugo.io/),目前已經有三百多個主題任君挑選。我也低調架了一個自己專用的主題,就拿來當做本文的教學範例。
> 我的佈景主題:[Earl Grey](https://github.com/offrecordrae/EarlGrey)
瀏覽官方主題頁面會注意到,Download指向的都是Github的倉庫(repository)。要怎麼下載主題呢嗯?這邊提供兩個方法:
## 直接下載壓縮包
至主題頁面的Github倉庫,點擊「Code」綠色按鈕 ⇒ Download ZIP
Github倉庫壓縮包的資料夾名稱都會加上branch「-master」,以本教學為例,主題的資料夾名稱會變為`EarlGrey-master`。將資料夾解壓縮到`Mysite\themes`底下,修改資料夾名稱(去掉branch名),使其結果為`Mysite\themes\EarlGrey`。
## 使用Git下載佈景主題
比較主流的主題安裝方式,是透過Git下載。
[Git的下載頁](https://git-scm.com/),旁邊那個大大綠綠的鈕給它點擊下去,版本號怎樣都隨意,我們只需要用到很簡單的功能,下載完執行它就能完成安裝。安裝中間提供很多選項,不熟悉的話通通用預設值就好,唯注意其中一步驟顯示「Choosing the default editor used by Git」,選擇Git的預設編輯器,以本教學為例應該要選擇Atom(Use Atom as Git's default editor)。
安裝完成後進入Atom,在網站目錄`C:\Users\Hugo\Mysite\`執行
```
$ git init
$ git clone https://github.com/offrecordrae/EarlGrey.git themes/EarlGrey
```
注意$號在這裡僅作為區隔每行指令的提示,每輸入一個指令最末須以enter鍵發送。
## 編輯config.toml
使用Atom或任何純文字編輯器打開Mysite\themes\config.toml,在裡面加上一行
```toml
theme = "EarlGrey"
```
這樣主題就安裝好囉!
--------------------------
# 撰寫Markdown格式的文章
主題安裝完,接下來要編寫第一篇部落格文章。Hugo支持Markdown標記語法,詳細的書寫格式可以從[本站的範例文章](../demo-text/)查閱。
Markdown只是一種標記式語法,十分鐘就能學會。比方說我打開記事本用純文字寫了這麼一段話:
```
# 我是第一級標題
我是第一級標題下的附屬文字內容。
### 我是第三級標題
[網站名稱](網站的網址)
我是列表:
- 列表的第一項目
- 列表的第二項目
- 第二項目的第一子項目
- 第二項目的第二子項目
```
透過Hugo內建的[Goldmark](https://github.com/yuin/goldmark/)引擎渲染後,看起來就會長這樣:
<h1>我是第一級標題</h1>
我是第一級標題下的附屬文字內容。
<h3>我是第三級標題</h3>
[網站名稱](網站的網址)
我是列表:
- 列表的第一項目
- 列表的第二項目
- 第二項目的第一子項目
- 第二項目的第二子項目
只要學會這幾種格式,幾乎就等於掌握了Markdown。有沒有狠簡單!
## Front Matter
每一篇放在Hugo裡的部落格文章,都必須在最開頭加入[Front Matter](https://gohugo.io/content-management/front-matter/)。Hugo支援數種語言格式:TOML、YAML、JSON、ORG,我個人用的是YAML格式。[^1]
[^1]: 在安裝Hugo之前,我曾經使用過台灣團隊開發的[Hexo](https://hexo.io/zh-tw/),Hexo只支援[YAML和JSON格式](https://hexo.io/zh-tw/docs/front-matter.html)。
以本篇文章為例,Front Matter的寫法為:
```yaml
---
title: Hugo手把手安裝教學
date: 2021-01-19 16:33:57
tags:
- Hugo
- Host
- Github
categories:
- 示例-demo
- 架站-Website
- 教學-Tutorial
---
```
## 文章製作流程
1. 將需要放在部落格裡的文章以markdown格式寫好。
2. 文章開頭加入符合格式的Front Matter。
3. 將文章存檔,副檔名為md。
4. 以本教學為例,將md檔放入Mysite/content/posts路徑下。
5. [運行本地server](#在本地預覽hugo網頁),可離線即時預覽網站結果。
## 繼續閱讀
舊式的部落格首頁生成的文章列表,通常都包含標題和內文的開頭幾行字,若要閱讀全文,通常需要按下「繼續閱讀」或是「文章標題」,進入單一文章的頁面。在Hugo裡,這種「會顯示在列表的開頭幾行內文文字」,稱做[Summary](https://gohugo.io/content-management/summaries)。
Hugo本身會自動生成Summary,但也可以手動指定Summary的截取點,指定語法為`<!--more-->`。使用範例如下:
```
---
我是front matter
---
我是summary
<!--more-->
我是點下繼續閱讀後,才會看到的文章內容
```
--------------------------
# 在本地預覽Hugo網頁
在Mysite目錄下運行:
```
hugo server
```
然後打開瀏覽器,拜訪`http://localhost:1313/`。每次使用瀏覽器,Hugo都會自動刷新,可以一邊寫文章一邊觀看結果。
有時候會發現文章沒有被瀏覽器顯示出來,這可能是時差產生的問題,Hugo本身採用[世界協調時間(UTC)](https://zh.wikipedia.org/wiki/%E5%8D%8F%E8%B0%83%E4%B8%96%E7%95%8C%E6%97%B6),慢了台灣十個小時,**然而hugo並不會自動為未來的文章生成網頁內容**!
解決之道是在運行指令上加一個`-F`,顧名思義,F就是future的意思。
```
hugo server -F
```
--------------------------
# 將文章內容生成HTML網頁
在Mysite目錄下運行:
```
hugo
```
會生成一個public資料夾,內含所有需要發布到伺服器/託管平台的文件。
但剛才提到,台灣用戶有時差問題,所以保險一點改成運行:
```
hugo -F
```
--------------------------
# 靜態網頁託管服務
如何將生成的HTML網頁發布到網路上?最主流的管道,是透過靜態網頁託管服務(static website hosting)部署(deploy)自己的網站。這邊先演示兩種管道:[Github pages](https://pages.github.com/)和Amazon的[AWS Amplify](https://aws.amazon.com/tw/amplify/)。
除非網站流量很大,基本上不收費,對個人用戶來說非常足夠。免費方案細節:
| 服務 | 供應商 | 專案數量 | 協作人數 | 儲存空間 | 月流量 | 其他限制(每月) |
|:-------------|:-------|:---------|:---------|:---------|:-------|:-----------|
| Github Pages | GitHub | 無限 | 無限 | 500MB | 無限 | 私人倉庫有2000建立分鐘,公開倉庫則為無限 |
| AWS Amplify | Amazon | 無限 | 無限 | 5GB | 15GB | 1000建立分鐘 |
--------------------------
# 透過Github Pages發布網站
Github Pages是Github提供的網頁代管服務,想用它就要先[辦個github帳號](https://github.com/)。
## 創建GitHub倉庫
1. 建立並登入個人github帳號,主畫面右上角有個小「+」按鈕,點擊後選擇「New repository」。
2. Create a new repository ⇒ Owner,選擇自己的帳號
3. Repository name=倉庫名稱,假設你的用戶名為ABC,那麼在本欄就要輸入`ABC.github.io`
4. 選擇Public
5. Initialize this repository with: 下方的核選表可以啥都不用選。
6. 點下Create repository,倉庫創建完畢。
7. 進入倉庫頁面,點選「小齒輪 Settings」
8. 進入Settings,Optons分頁中往下拉到GitHub Pages區塊
9. Source的第一個下拉式選單,選擇master分支
10. 第二個下拉式選單,選擇/(root)的資料夾
11. 點擊save鈕,本倉庫的內容就會自動發布到GitHub Pages上囉!以本教學為例,發布內容的首頁為`https://ABC.github.com`[^2]
[^2]: 請不要真的去拜訪這個網址,我的帳號不是ABC。
## 安裝GitHub Desktop
GitHub Desktop和雲端空間概念有點像,負責讓用戶「手動」同步電腦(=本地資料夾)和網路(=GitHub倉庫)兩端的資料。注意這邊特別強調是手動,因為它並非即時的同步,每次同步兩端資料,都需要透過用戶手動操作。
如果你也是不熟悉使用終端機指令的用戶(包括我),就快裝個[桌面版GitHub](https://desktop.github.com/)吧。一樣是看到那大大的藍色鈕就點擊下去,程式大小約80MB。下載點開程式就直接完成安裝[^3],程式會要求登入已創建的Github帳號。
[^3]: Github desktop一經啟用便會自動安裝在`%appData%\Local\`之下,用戶本身並不能指定它的安裝位置。