YiluPHP
这家伙很懒,什么都没有留下...

经验 发布线上多台服务器代码的(发布系统)实现方式

浏览数 182179
线上环境总是有好多服务器的,少则几台,多则几百上千台,如果代码更新后,一台一台去手机更新代码,则是非常费时又费神的事,下面做一个简单的机制实现的是一键发布代码到所有的服务器上。

使用到的技术有:
  • shell脚本从git库拉取最新代码到本机
    http://www.weinidai.com/index.php/News/detail/id/177
  • 配置ssh免密登录远程服务器
    http://www.weinidai.com/index.php/News/detail/id/189
  • 拷贝文件到远程服务器
    scp [可选参数] file_source file_target
  • 执行远程服务器上的命令
    ssh username@remoteNodeIP "cd /home ; ls"

服务器架构
有一台运营机作为控制中心,统一发出命令,连接所有的web服务器

一、先在所有的web服务器上实现shell脚本更新代码
这里举例的shell脚本的名称为:update_project

实现方法看这里:http://www.weinidai.com/index.php/News/detail/id/177

二、实现让运营机可以免密登录所有的web服务器
实现方法看这里:http://www.weinidai.com/index.php/News/detail/id/189

三、在运营机上编写shell脚本,用于发布所有web服务器上的代码
先上脚本内容(这个脚本的名称和web服务器上名称一样,但是脚本内容不一样)
#vim /data/shell/update_project

#!/bin/sh
iplist="192.168.1.20 192.168.1.21 192.168.1.22 192.168.1.23";  #用空格分隔多个服务器的IP地址
for i in $iplist;
do
echo ${i};
ssh root@${i} "update_project;rm -rf /data/web/www.oneWayPhp.com/config/*";  #执行远程服务器上的命令,先更新代码,再删除配置文件,因为scp不能覆盖已有的文件
scp /data/config/www.oneWayPhp.com/* root@${i}:/data/web/www.oneWayPhp.com/config/;   #从运营机上拷贝配置文件到各个服务器
done

给这个脚本赋予可执行权限
#chmod +x /data/shell/update_project

把这个脚本建立软链接到/usr/sbin/目录里,这样就可以用户处在任何目录时,都可以执行update_project命令调用
#ln -s /data/shell/update_project /usr/sbin/update_project


这样一个简单的发布系统就实现了。


================================================================
参考文档:
Linux Shell远程执行命令(命令行与脚本方式)
https://blog.csdn.net/thy822/article/details/72640038

Shell中for循环的几个常用写法
https://blog.csdn.net/babyfish13/article/details/52981110

ssh免密码登陆及其原理
https://www.cnblogs.com/kex1n/p/6017963.html?utm_source=itdadao&utm_medium=referral

linux软链接的创建、删除和更新
https://blog.csdn.net/m290345792/article/details/78518360
https://www.cnblogs.com/kex1n/p/5193826.html

Linux下的scp拷贝命令详解
http://www.runoob.com/linux/linux-comm-scp.html




我来说说