使用 Rsync 部署
假设
- 一个运行网络服务器的网络主机。这可以是共享主机环境或 VPS。
- 使用 SSH 访问您的网络主机
- 使用 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
文件中为您的网络主机添加定义,将 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 [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 directory
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
您也可以将其他处理任务合并到此部署脚本中。