美文网首页
自动部署升级更新服务器

自动部署升级更新服务器

作者: 张老师Klog | 来源:发表于2023-06-05 12:05 被阅读0次

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

  • 备份当前的Web页面资源和后端服务程序
  • 从测试服务器复制Web页面资源和后端服务程序到正式服务器
  • 关闭当前后端服务器并重启新的
  • 如果出现问题还要快速回滚:从备份文件夹拷贝回来,再重启后端服务

如何让这一切自动化实现?下面以一个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
  • baktime=$(date +%Y-%m-%d-%H-%M)创建时间变量精确到分钟,用来做备份文件夹名称
  • mkdir,创建文件夹,-p创建多层目录;
  • cp,复制到备份文件夹
  • scp,使用ssh远程复制,会提示输入测试服务器密码,要想永久自动输入密码,先执行下面两个命令:
    • ssh-keygen建议输入一个新文件名/root/.ssh/xxx
    • ssh-copy-id root@x2.shiyancang.cn需要登录密码就能添加成功
  • yes行,先重命名当前的goserver文件,避免出现Text is busy文件被占用无法复制的问题。
  • chmod行,给予复制过来的新文件可执行权限
  • lsof行,使用管道直接关闭掉8000端口的goserver程序
  • nohup行,后台重启goserver后端服务

自动回滚老版的脚本

同样创建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

相关文章

  • 配置electron应用自动更新

    本文介绍了 electron 开发桌面端应用的自动更新升级版本的方法, 以及更新服务器的搭建. electron项...

  • git自动部署代码

    git自动部署代码服务器创建裸仓库: 配置自动部署代码的脚本: 权限问题:git:git nginx:www...

  • 云架构设计原则

    基础设施 技术人员部署服务器、管理服务器模板、更新服务器和定义基础设施的模式都是通过代码来完成的,并且是自动化的,...

  • 如何使用 Git Hook 自动部署服务器?

    一行命令,自动将本地文件部署到远程服务器上。 最近搭了个个人网站,在放到服务器上时,考虑到,如果每次更新的内容,都...

  • ipset

    IPSET 本项目提供与Linux IPSET技术兼容的服务器隔离策略自动部署和更新方案 快速开始 本项目为Gol...

  • 自动发布到远程服务器

    关键词:自动发布版本 参考: 远程部署项目(linux) jenkins把包传到远程服务器上 自动部署war包到远...

  • 使用 Jenkins 部署 PHP Laravel 项目

    目标: 通过脚本手动部署项目到远程服务器 使用 GitHub webhook 在分支变更时自动部署 部署脚本 分析...

  • Android Studio 1.5.1更新至2.1.1

    本次更新,为软件自动提示升级。采用软件自动下载,自动完成更新的方式。并不是手动下载更新包。不太清楚自动更新网站有没...

  • MIUI防止系统自动更新

    即使自己关掉了系统的自动更新选项,有时候它也会自动打开,这点很讨厌,因为如果你不想系统升级更新,它半夜自动给你升级...

  • crontab不执行脚本中命令

    我的程序部署在树莓派上,为了方便自动更新部署,在树莓派上建立了crontab,每隔几分钟就从git上更新一下自动更...

网友评论

      本文标题:自动部署升级更新服务器

      本文链接:https://www.haomeiwen.com/subject/zfosedtx.html