使用 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
系统将提示您输入密码短语,这是一个额外的保护层。输入您要使用的密码短语,然后在提示时再次输入,或者如果您不想使用密码短语,则将其留空。不使用密码短语将允许您非交互式地传输文件,因为登录时不会提示您输入密码,但这稍微不安全一些。
为了使登录更容易,请使用以下命令在文件 ~/.ssh/config
中添加 Web 主机的定义,将 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
USER=my-user
HOST=my-server.com
DIR=my/directory/to/topologix.fr/ # the directory where your website files should go
hugo && rsync -avz --delete public/ ${USER}@${HOST}:~/${DIR} # this will delete everything on the server that's not in the local public folder
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
您还可以将其他处理任务合并到此部署脚本中。