使用 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 发行版上,使用以下命令:
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添加以下内容。将 USER、HOST 和 DIR 值替换为您自己的值:
#!/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 其他处理任务。