軟體: Hugo, ufw, deja-dup, git, and GitHub.
你一定以為我緊接著要開始安裝網誌的套件了吧?No no no,我們剛完成硬體設備的架設,當然是老老實實的走一遍伺服器軟體的基本保護措施啦!
1. 啟動防火牆
在這個滿是駭客跟惡意攻擊的年代,永遠要記得接上網路的東西就沒有祕密了,都可以是受攻擊的對象,而防火牆就是保護伺服器的基本配備(Linux的層層權限控制已經能阻斷多數惡意軟體的控制了,但如果使用者還不放心,可以再進一部安裝更多的防毒掃毒軟體。)言歸正傳,確定硬體能讓遠端連線正常運作之後,要趕緊開啟防火牆,以下都是使用一台相同子網域下的電腦,在其命令行裡輸入的指令
# ssh -Y pi@<the designated LAN ip>
遠端連入樹莓派伺服器再安裝防火牆(沒想到吧,官方的系統映像檔裡竟然沒有預載防火牆)
$ sudo apt update
$ sudo apt install ufw
$ sudo ufw enable
第一行更新了已經安裝的apt套件,第二行安裝防火牆,第三行開啟防火牆功能。ufw防火牆通常能允許ssh連入,所以可以忽略啟動防火牆時系統警告某些連線可能會斷線。Linux防火牆非常容易控制,網路上有很多極簡單的指令教學,在這邊不贅述,但是要提醒一點,如果接下來的操作有什窒礙難行的地方,請先把關閉防火牆當作故障排除的第一步,如果是防火牆作梗,就開啟連接埠或者允許特定app通過防火牆,然後再啟動防火牆。
注意了,我必須不厭其煩再強調一下防火牆只是基本防護,你可以安裝更多的防毒軟體來保護你的伺服器,但是更重要的,就是警惕老高講過的駭客養成心法並且時時刻刻身體力行:不要開啟來歷不明的郵件以及期附加檔案、不要瀏覽可疑的網頁、不要分享你的帳號密碼、不要亂插來歷不明的USB裝置到伺服器上、不要安裝不明來源的軟體。好!那麼我們第二步就是要更換樹莓派的使用者帳號名稱以及密碼,不然這就像是跟全世界所有樹莓派新手一起分享帳號密碼了阿!
2. 修改預設帳密
很多修改帳密的教程都使用Linux的root帳號來修改現有帳號,但我的樹莓派就是不讓我登入root,不曉得是我的使用姿勢不正確還是樹莓派這個Linux分支天生不允許root帳號登入,沒關係,我們自創一個擁有sudo權限的用戶來修改現有密碼,消滅pi這個預設帳號名稱。
$ sudo adduser temp0
你會需要填入兩次給這個臨時帳號的密碼,還要回答一系列的名字跟電話等問題,除了密碼之外都可按enter略過。臨時帳號的密碼我就只用簡單的數字,反正待會就要刪除臨時帳號。緊接著授予他sudo權限,並且切換到temp0帳號
% sudo usermod -aG sudo temp0
% su temp0
你會被問到臨時帳號的密碼。登入temp0後就可以修改原本的預設帳號。
% sudo usermod -l <new username> pi
% sudo usermod -d /home/<new username> -m <new username>
% exit
$ sudo deluser --remove-home temp0
$ sudo deluser temp0
第一行修改預設帳號名,第二行把關聯新帳號名的家資料夾改成新帳號名。既然預設帳號名跟相對應的家目錄已經修改為<new username>,臨時帳號的末日就來了,後三行跳回新改名的原帳號、回頭砍臨時帳號跟其家目錄。到了這裡事情還沒完,Linux帳號還擁有自己的群組,我們可以使用$ groups來確認pi群組是否還在,然後輸入
$ sudo groupmod -n <new username> pi
給自己的新群組名也跟新使用者名一樣就可以了。接著我們修改預設密碼
$ sudo passwd <new username>
我們可以使用$ groups檢查自己的群組有沒有改名成功、使用$ ls /home來檢查家目錄有沒有改名成功、使用getent passwd {1000..6000}來檢查臨時帳號是否還存在。
3. 定期備份
a. 備份策略
正所謂天有不測風雲,在我們累積任何努力之前都必須先想著萬一伺服器遭受天災人禍之後的挽救方式。力學有牛頓三運動定律、熱力學也有名為三定律但實為四條法則的三定律、仿生人也受三大定律制約、備份界不能免俗地也流傳著三條鐵則:
- 三份克隆
- 兩種儲存媒介
- 至少一個異地備份
在此我們制定一個備份策略給我們的部落格目錄,將來的網誌也都會安裝、寫進該目錄裡,即使天崩地裂了,也能取回部落格資料不需砍掉重練。這個備份策略必須滿足上面的 321法則同時又遵循我本人的惰性:三份資料就是存在樹莓派伺服器編輯用的、deja-dup每天備份到家裡 NAS掛載硬碟、以及兼具無限網路儲存空間與版本控制的GitHub。這麼一來就有了SSD、HDD、企業伺服器等多種儲存媒介。 NAS擺放不同房間、GitHub伺服器散布不同地區,則是滿足了異地備份這項要求。
這樣的備份策略也達成本站的中心思想(懶惰),deja-dup是定期自動備份的,GitHub的操作也可以寫個bash script配合 linux systemd service來做到定時自動化。三份克隆中的第一份需要我來親自撰寫(或許之後搞個RNN自動產生網誌),這樣一來就可以慵懶的經營網誌也不擔心忘記備份啦。
可能有人會問,為啥不用deja-dup備份往Google Drive?那要先把Google Drive線上帳戶登記給Pi OS,但是我好像沒找到Pi OS有這樣的地方可設定線上帳號。另外的原因是因為Google Drive免費帳號的容量是有限的,或許哪天我的部落格會成長到超過雲端容量限制。所以這邊把deja-dup用在家裡的 NAS網路硬碟,然後利用GitHub無限空間作為一個備份途徑,同時可以用git指令作為誤刪檔案時的救援方式。
另外有人可能會問,既然用了GitHub,為啥不把部落格直接架在免費又無限空間的GitHub上?好問題,你可以這麼做,網路上也很多教程可以給你幫助,但是我這裡就是想要自己搞一個樹莓派部落格伺服器阿,標題不是寫假的耶。折騰一個土炮部落格伺服器,是一個男人的浪漫,跌落無數個坑,再從坑中爬起,三折肱成良醫(也可能成殘疾人士),太浪漫了你說是吧。退一萬步講,把伺服器架設在小小的樹莓派上,生殺予奪都在我的控制之下,不用擔心哪天部落格或者帳號被別人掐死。再退一億步的話,家裡的區域網路打文章、傳照片、刪改檔案就是飛快,操作無延遲,一存檔就更新網頁,心情就不容易鬱卒喔。
好極了,現在有了備份策略,只缺備份的內容,我們先把第三章暫停,等第四章架了一個基本的部落格之後再回來實行這個尊絕不凡的備份計畫。
4. HUGO架站
終於來到的這個系列的重中之重,靜態網站。筆者當年學網頁設計,還在使用dreamweaver拉框框的年代,想搞出一個部落格更是難如登天,但是時代變了,人類的工具已經迭代好幾回,終於我們有了靜態網站產生器Static Site Generator(SSG),根據網路上的排行,前三大SSG為Next.js、HUGO、以及Gastby,三者都是以輕量、效能、快速架站著稱,它們各有優缺點。但是我選擇了底層以Go Language寫成的HUGO,不是因為致敬大文豪Victor Hugo,而是因為它的網誌使用 Markdown語法,而我最愛用的編輯器 Vim剛好也內建conceallevel的設定可以視覺化 Markdown記號,於是就因為這點鼻屎大的動機,給HUGO一個機會,也給我自己一個機會。
廢話不多說,HUGO提供多種安裝方式,我選擇了最無腦的方法,直接從release archive下載針對不同平台編譯好的可執行檔,我的樹莓派能使用的是hugo_0.87.0_Linux-ARM.tar.gz,檔案大小13.6MB。
$ mkdir -p <HUGO project>; cd <HUGO project>
$ wget https://github.com/gohugoio/hugo/releases/download/v0.87.0/hugo_0.87.0_Linux-ARM.tar.gz
$ tar -xvf ./hugo_0.87.0_Linux-ARM.tar.gz
$ sudo mv ./hugo /usr/bin/
$ hugo new site <your site name>
前四行下載並解壓縮HUGO,解壓縮後放進樹莓派系統binary資料夾成為系統的指令之一,最後一行產生你要的靜態網站。這樣就有網站框架基本的程式碼了,潮快的。
接著再到HUGO theme頁面挑選自己喜歡的網頁主題,右邊還有一些tag分類可以幫助選擇。在這裡我選了dream。你如果選擇不同的主題,也可以自行修改以下的指令
$ cd <your site name>\themes
$ git clone <your theme's git>
$ cd <your theme's name>
$ rm -rf .git; rm -rf .github
其中<your theme's git>可以在個別的主題頁面點選download之後進入GitHub頁面,裡頭那個綠色下載Code的按鈕點下去就能取得一個https開頭git結尾的網址,下載下來的資料夾名稱就是<your theme's name>,最後一行則是刪除該主題的git與GitHub的設定與版本歷史。我們將在回到第三章的備份時初始化我們的網站紀錄git版本歷史,這裡刪除主題的版本歷史將使得到時候全站備份簡單一點,不必使用git submodule。
然後我們回到網站資料夾(<yout site name>)並且編寫一個啟動網站的bash script
$ cd ../../
$ vi startHugoServer.sh
將以下兩行寫入script中
#!/bin/bash
hugo server -b "http://localhost" --bind <your designated LAN ip> --appendPort=false --port=1313
第一行指名這個檔案將由bash執行,第二行則是啟動HUGO伺服器的網路設定,這裡暫時將網址掛在localhost,綁定在上一篇當中指派給樹莓派的網址<the designated LAN ip>,至於監聽的網路連接埠站定為1313。儲存檔案之後就可以啟動網站了。
$ sudo ufw allow 1313
$ sudo chmod +x ./startHugoServer.sh
$ screen -S <hugo session>
$ ./startHugoServer.sh
<ctrl>+a+d
第一行在防火牆開啟1313連接埠,第二行允許執行剛剛編輯好的script,第三行創建一個screen session名為<hugo session>,第四行在新的session裡使用這個script啟動HUGO server。啟動了HUGO server之後命令行就會持續紀錄網站的動作,所以在這第四步之前我喜歡先開一個session以便在第五步跳出session脫身之後HUGO server還能在背景繼續執行。
現在可以開啟瀏覽器,在網址列打上<the designed ip>:1313,深呼吸一口氣按下enter,你的部落格網站就能出現了。
為了美觀我在打開瀏覽器之前先在命令行產生兩篇空網誌
$ hugo new posts/my-first-post.md
$ hugo new posts/my-second-post.md
瀏覽器看到的畫面應該類似下圖
![]() |
|---|
| New blog |
是不是挺簡單的呀?架站的路還很長,我們下篇要把這個網站進行備份。
