使用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密钥。首先,如果home目录下不存在.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
您还可以将其他处理任务整合到这个部署脚本中。