自动部署升级更新服务器

2023-06-05  本文已影响0人  zhyuzh3d

项目有开发测试服务器和正式服务器,每次更新都有点麻烦:

如何让这一切自动化实现?下面以一个golang的web站点为例,目录对照如下:

内容 测试服务器 正式服务器
域名或IP x2.domain.com x.domain.com
Web页面资源文件夹 /root/server2/web/build/ /root/server/web/build/
Golang服务器程序文件 /root/server2/web/goserver /root/server2/web/goserver
备份文件夹 ... /root/bak/
后端服务器运行端口 ... 8000

Web页面资源使用nginx自动提供,不需要重启。

自动部署新版的脚本

如下编写一个update.sh脚本文件,更新只要执行sh update.sh即可,注意最好都使用绝对路径,避免从其他文件夹运行脚本出错。

baktime=$(date +%Y-%m-%d-%H-%M)
mkdir -p /root/bak/server_$baktime/web/
cp -r /root/server/web/build/ /root/bak/server_$baktime/web/
cp /root/server/goserver /root/bak/server_$baktime/

scp -r root@x2.domain.cn:/root/server/web/build/ /root/server/web/
yes | mv -f /root/server/server server_$baktime
scp root@x2.domain.cn:/root/server/goserver /root/server/goserver

chmod 777 /root/server/goserver
lsof -i :8000 | grep goserver | awk '{print $2}' | xargs kill -7
nohup /root/server/goserver --mod=pro >/root/server/goserver.log 2>&1 & disown

自动回滚老版的脚本

同样创建rollbak.sh文件如下,回滚执行sh rollbak.sh然后输入需要回滚的备份文件夹名称即可。

echo "> 可用备份:"
ls /root/bak/
echo "> 请输入或复制粘贴需要回滚的备份完整名称:"
read bakfolder

echo "正在从 $bakfolder 回滚build文件夹和goserver执行文件"
cp -r /root/bak/$bakfolder/web/build /root/server/web/
baktime=$(date +%Y-%m-%d-%H-%M)
yes | mv -f /root/server/goserver goserver_rollbak_$baktime
cp /root/bak/$bakfolder/server /root/server/server

echo "> 正在重新启动zerver服务器程序..."
chmod 777 /root/server/server
lsof -i :3031 | grep server | awk '{print $2}' | xargs kill -7
nohup /root/server/goserver --mod=pro >/root/server/goserver.log 2>&1 & disown
echo "> 回滚已经完成!"

这里仍然把现有的goserver文件重命名为时间戳文件名备用。


END

上一篇下一篇

猜你喜欢

热点阅读