HUGO
Menu
GitHub 87548 stars Mastodon

使用 rsync 部署

使用 rsync 命令行工具部署您的網站。

假設

  • 運行 Web 服務器的 Web 主機。這可以是共享托管環境或 VPS。
  • 可通過 SSH 訪問您的 Web 主機
  • 使用 Hugo 構建的功能齊全的靜態網站

劇透是,您可以使用如下命令部署整個網站:

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

正如您將看到的,我們將此命令放入 shell 腳本文件中,使構建和部署變得像執行 ./deploy 一樣簡單。

將 SSH 密鑰復制到主機

為了使登錄到服務器更安全且減少交互,您可以上傳 SSH 密鑰。如果您已將 SSH 密鑰安裝到服務器,可以跳到下一節。

首先,安裝 ssh 客戶端。在 Debian 發行版上,使用以下命令:

install-openssh.sh
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

系統將提示您輸入密碼短語,這是額外的保護層。輸入您想使用的密碼短語,然後在提示時再次輸入,或者留空如果您不想使用密碼短語。不使用密碼短語可讓您非交互式地傳輸文件,因為登錄時不會提示您輸入密碼,但安全性稍低。

為了簡化登錄,使用以下命令將 Web 主機的定義添加到文件 ~/.ssh/config,將 HOST 替換為 Web 主機的 IP 地址或主機名,將 USER 替換為傳輸文件時登錄 Web 主機使用的用戶名:

~/.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 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

您也可以在此部署腳本中 Incorporate 其他處理任務。


Last updated: January 1, 0001
Improve this page