PHP分布式部署代码同步Git实现

13 篇文章 0 订阅

PHP 分布式部署后 代码自动同步实现

项目架构如下:
在这里插入图片描述

需要更新代码时我们只需要把代码传到主服务器后通过定时任务主服务器自动push 代码到Git服务端,之后其他从服务器则自动从Git云端拉取最新的代码即可

需要用到 expect 软件
安装expect

yum install expect

定时push shell(不要用win编辑器编辑 不然cd 找不到文件)

#!/usr/bin/bash
cd /home/wwwroot/test
git add .
git commit -a -m auto
set timeout 60
/usr/bin/expect <<-EOF
spawn git push ssh://mgit@127.0.0.1/home/gitprojects/test master
expect "*password:"
send "123456\r"
interact
expect eof
EOF

定时pull shell

#!/usr/bin/bash
cd /home/test
#延迟5s 等待push 后在拉取
sleep 5
set timeout 60
/usr/bin/expect <<-EOF
spawn git pull ssh://mgit@127.0.0.1/home/test master
expect "*password:"
send "123456\r"
interact
expect eof
EOF

定时任务 主服务器每分钟执行 push,从服务器每分钟执行pull

* * * * * sh /home/wwwroot/test/git_push.sh
* * * * * sh /home/wwwroot/test_server/git_pull.sh

gitignore 把不需要同步的文件处理掉

application/install.lock
application/upload.lock
/.idea
/runtime
/logs
/data
/uploads/pic_cache
/.htaccess
.htaccess
.project

更新gitignore

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

**注意:
1:编辑shell 不要用win 编辑器,不然cd 容易找不到文件目录
2:git 服务仓库文件夹权限应该归属推送账号,客户端运行项目权限应该归属php所属账号
3:拓容服务器拉下代码时注意项目文件夹权限要归属于php所属用户,不然代码无法创建文件夹,些日志那些
4:拓容服务器的代码不要手动改动,改了最后搞完要还原回去,不然定时pull 会有冲突,pull失败,如果已经被修改则可以手动强制同步远端代码(命令如下)
**

$ git fetch --all
$ git reset --hard origin/master
$ git pull

5:清理.git 文件夹,随着时间推移拓容服务器的 .git 可能越来越大,需要定时清理
1:直接删除.git 文件夹
2:在项目中重新创建git仓库

git init

3:设置远端地址

git remote add origin ssh:xxxx

4:强制同步远端代码

$ git fetch --all
$ git reset --hard origin/master
$ git branch --set-upstream-to=origin/master master
$ git pull
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值