多服务器对外提供服务,每次更新上线都需要去每台服务器上更新代码,重启服务等操作,繁琐的很,还很容易出错;为此决定写个自动上线脚本,简化部署操作。
1
配置各服务器之间免密登录
买服务器等时候就刻意买了同属一个局域网的服务器,这样各服务器之间通讯就可以使用千兆局域网了,降低服务器之间网络通讯压力;为了方便实现一键(运行一个脚本)上线部署,因为后续会涉及到git更新代码,服务重启之类的,需要使用root权限,各服务器之间先配置root账号免密登录。
首先,在本机上切换到root身份,生成本机到密钥,密钥对会保存在root用户的~目录
将公钥copy到目标主机,这一步要求输入目标主机的root账户密码
成功后会有这样的提示语,之后在root身份下直接ssh目标主机就不需要输入密码了。
2
在远程主机上执行命令的方式
比如我们配置好了A、B、C三台服务器,其中A可以免密登录B和C,接下来就是在A上写自动部署和上线脚本了,要求脚本以root身份执行。
在远程主机上执行命令的两种方式,远程执行命令尽量使用绝对路径,否则结果有可能不是自己想要的:
a、 #在远程主机上执行双引号里的命令,这种方式适合简单的方式,但是对复杂的命令就不方便了。
b、复杂的命令可以使用
其中eeooff是自定义标识符(可以任意指定,只要跟脚本中都变量啥都不冲突就行),由该标志符包括的命令都要在远程主机上执行,起始符要加上
3
写自动部署&上线脚本
自动上线流程
开始备份配置文件备份代码commit-id更新代码和相应的配置重启相应的服务
服务正常?上线成功回滚代码和配置,解决问题
yes
no
4
脚本主要内容
备份脚本
更新代码脚本
重启服务脚本
回滚脚本
代码里有大量冗余,可用循环优化。
题图:2017念拍摄于深圳某场馆外部,忘了是什么场馆了
公众号
echo_zyw
服务器架构、性能分析、大数据分析
领取专属 10元无门槛券
私享最新 技术干货