新年快要到了,换了一个新的实习工作,也顺带给自己的博客换一个引擎和主题。不过美中不足的是这个新引擎 Hugo 不能像之前用的 Hexo 一样通过指令一键部署,不过不碍事,我们写一个脚本就好。
前期准备 链接到标题
我的博客是部署到自己的云服务器上的,但之前吃了没有及时备份到 GitHub 上的亏,因此在这个脚本里我也需要一个自动同步 GitHub 云端仓库的功能。
那么简单梳理一下这脚本的步骤如下:
- 通过指令编译博客
- 同步到 GitHub 的远程仓库
- 压缩编译出来的文件夹
- 通过 sftp 将压缩包上传到服务器
- 删除本地压缩包
- 通过 ssh 链接到服务器
- 删除原本部署路径下的文件
- 解压缩
- 将解压后的文件已到到部署的路径下
- 删除云端压缩包
因此我们需要准备好本地仓库与 GitHub 远程仓库的链接,服务器 ssh 的公钥配置(最好还有 config 配置)。
脚本示例 链接到标题
下面是我最后写出来的脚本:
#!/bin/bash
# 本地需要压缩的文件夹路径,也是云端解压后的文件夹路径
source_folder="./public"
# 压缩后的压缩包路径
zip_file="./public.zip"
# 部署到云端的文件夹路径
target_folder="/www/blog"
# 服务器信息(使用公钥登陆,且已在 ~/.ssh/config 中配好对应的配置)
server_alias="txy"
# 传入参数,用于 commit 日志
commit_argument="$1"
# 编译博客
hugo
# 同步到 GitHub
git add .
git commit -m "$commit_argument"
git push
# 压缩目标文件夹
zip -r "$zip_file" "$source_folder"
# 使用sftp上传压缩包到服务器
sftp "txy" <<EOF
put "$zip_file"
EOF
# 删除本地的打包文件
rm -f "$zip_file"
# 使用ssh连接到服务器并执行命令
ssh "txy" <<EOF
# 删除原有的文件夹
sudo rm -rf $target_folder
# 解压上传的文件
unzip -o "$zip_file"
# 移动文件夹到目标文件夹
sudo mv "$source_folder" $target_folder
# 删除压缩包
sudo rm -f "$zip_file"
EOF