HOSTING AND DEPLOYMENT

Deploy with Rsync

前提假設

  • 一個運行網頁伺服器的網站主機,這可以是共享主機環境或 VPS。
  • 使用 SSH 存取您的網站主機的權限。
  • 一個使用 Hugo 建置的功能性靜態網站。

重點是您可以使用如下指令部署整個網站:

hugo && rsync -avz --delete public/ www-data@ftp.topologix.fr:~/www/

接下來,我們會將此指令放到一個 Shell 腳本檔案中,讓建置和部署變得像執行 ./deploy 一樣簡單。

將 SSH 金鑰複製到主機

為了讓登入伺服器更安全且更少互動,您可以上傳您的 SSH 金鑰。如果您已將 SSH 金鑰安裝到伺服器,請跳至下一節。

首先,安裝 ssh 客戶端。在 Debian 系統上,使用以下指令:

sudo apt-get install openssh-client

然後產生您的 SSH 金鑰。如果您的家目錄中尚未存在 .ssh 資料夾,請先建立:

~$ cd && mkdir .ssh & cd .ssh

接著執行以下指令來生成名為 rsa_id 的新金鑰對:

~/.ssh/$ ssh-keygen -t rsa -q -C "For SSH" -f rsa_id

系統會提示您輸入密碼短語,這是一種額外的保護層。輸入您想使用的密碼短語,然後再次輸入確認。如果不希望設置密碼短語,則直接按 Enter 以跳過,但這樣會略降低安全性。

為了更方便地登入,請在 ~/.ssh/config 檔案中新增伺服器定義,將 HOST 替換為網站主機的 IP 或主機名稱,將 USER 替換為用於檔案傳輸的使用者名稱:

~/.ssh/$ cat >> config <<EOF
Host HOST
     Hostname HOST
     Port 22
     User USER
     IdentityFile ~/.ssh/rsa_id
EOF

接著使用 ssh-copy-id 指令將您的 SSH 公鑰複製到遠端伺服器:

~/.ssh/$ ssh-copy-id -i rsa_id.pub USER@HOST.com

現在,您可以輕鬆使用 SSH 金鑰登入遠端伺服器:

~$ ssh user@host
Enter passphrase for key '/home/mylogin/.ssh/rsa_id':

當您可以用 SSH 金鑰登入後,我們就可以建立腳本來自動部署您的 Hugo 網站。

Shell 腳本

在您的 Hugo 專案目錄的根目錄中建立一個名為 deploy 的新腳本:

~/websites/topologix.fr$ editor deploy

新增以下內容,並將 USERHOSTDIR 替換為您的實際值:

#!/bin/sh
USER=my-user
HOST=my-server.com
DIR=my/directory/to/topologix.fr/   # 網站檔案應該儲存的目錄

hugo && rsync -avz --delete public/ ${USER}@${HOST}:~/${DIR} # 這會刪除伺服器上未在本地 public 資料夾中的所有內容

exit 0

注意,DIR 是相對於遠端使用者家目錄的路徑。如果需要指定完整路徑(例如 /var/www/mysite/),必須將指令中的 ~/${DIR} 更改為 ${DIR}。大多數情況下,無需指定完整路徑。

儲存並關閉檔案,並使 deploy 檔案可執行:

~/websites/topologix.fr$ chmod +x deploy

現在您只需執行以下指令即可部署並更新您的網站:

~/websites/topologix.fr$ ./deploy

您的網站將被建置並部署:

Started building sites ...
Built site for language en:
0 draft content
0 future content
0 expired content
5 pages created
0 non-page files copied
0 paginator pages created
0 tags created
0 categories created
total in 56 ms
sending incremental file list
404.html
index.html
index.xml
sitemap.xml
posts/
posts/index.html

sent 9,550 bytes  received 1,708 bytes  7,505.33 bytes/sec
total size is 966,557  speedup is 85.86

您也可以將其他處理任務整合到這個部署腳本中。