使用 Rsync 部署
假设条件
- 一个运行 Web 服务器的 Web 主机。这可以是共享主机环境或 VPS。
- 通过 SSH 访问您的 Web 主机
- 使用 Hugo 构建的功能正常的静态网站
剧透一下,您可以使用如下所示的命令部署整个网站:
hugo && rsync -avz --delete public/ [email protected]:~/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
系统会提示您输入密码短语,这是一个额外的保护层。输入您想要使用的密码短语,然后在提示时再次输入,或者如果您不想使用密码短语,则将其留空。不使用密码短语可以让您非交互式地传输文件,因为登录时不会提示您输入密码,但这稍微不那么安全。
为了使登录更容易,请使用以下命令为您的 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 [email protected]
现在您可以轻松连接到远程服务器:
~$ 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 {#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
是从远程用户的 home 目录开始的相对路径。如果您必须指定完整路径(例如 /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
您也可以将其他处理任务合并到此部署脚本中。