最近在学习小程序,希望web程序push到gitee上后,自动pull到阿里云服务器,实现本地与服务器的数据同步更新。
1.首先在gitbee上新建一个项目,并在阿里云上安装git,推荐yum install git,具体过程略。
2.切换到web根目录,并创建.git-credentials文件,写入入如下数据,用户名和密码替换上自己gitee或者github的用户名和密码,如果你同时拥有2个帐号,可以一行一个,存在同一个文件中。
cd /var/web
vim .git-credentials
https://用户名:密码@gitee.com //码云(gitee)的配置
https://用户名:密码@github.com //github的配置
3.如果你是第一次在服务器上使用git,那么你最好先运行git config配置一下你的用户、邮箱。查看配置文件~/.gitconfig,会发现新增加的配置项。
git config --global user.name "用户名"
git config --global user.email 邮箱
git config --global credential.helper store
4.在web根目录新建webhook.php,并输入下面的代码,如果使用的gitee,只输入gitee代码段。
//本地路径
$local = '/data/wwwroot/test';
//仓库地址
$remote = 'https://gitee.com/guixianfeng/test.git';
//密码
$password = '123456';
//获取请求参数
$request = file_get_contents('php://input');
if (empty($request)) {
die('request is empty');
}
//验证密码是否正确
$data = json_decode($request, true);
if ($data['password'] != $password) {
die('password is error');
}
echo shell_exec("cd {$local} && git pull {$remote} 2>&1");
die('done ' . date('Y-m-d H:i:s', time()));
5.深坑一:这里要确认运行php的用户是哪一个。可以暂时更改webhook.php中内容,使用php echo exec('whoami')命令输出用户,譬如,我的是apache。那么需要把对应的文件夹所有者都修改为apache。
chown apache.apache .gitconfig
chown apache.apache .git-credentials
chown -R apache.apache /var/web/chatme
# 给web目录增加写权限
chmod -R g+w /var/web/chatme
6.深坑二:如果git不运行,则更改为sudo git,这时候就需要把apache增加到sudu免密运行列表中。
# 编辑免密配置文件
vim /etc/sudoers
# 在root ALL=(ALL) ALL下增加apache
apache ALL=NOPASSWD:/usr/bin/git
7.切记重启apache服务,service httpd restart。
8.如果gitee返回sudo: sorry, you must have a tty to run sudo错误提示。意思就是sudo默认需要tty终端。注释掉就可以在后台执行了。
vim /etc/sudoers (最好用visudo命令)
注释掉 Default requiretty 一行
#Default requiretty