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