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
新增以下內容,並將 USER
、HOST
和 DIR
替換為您的實際值:
#!/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
您也可以將其他處理任務整合到這個部署腳本中。