centos, nginx, php
生产目录全站【git.config.filemode = false】
chown www:www -R /home/wwwroot/websit
www用户下生成密钥并上传公钥【使用git公钥,需要修改源码目录 .git/config文件中远程地址为ssh地址,并且在www用户下跑通】
shell命令无需另加sudo等【即默认使用www用户执行】
需要至少1次以www用户执行git pull并缓存账号【git缓存账号与git公钥二取一即可】
cd /home/wwwroot/website/ && git pull origin master
2020年7月13日 回头再看,这个方案是用php执行git pull命令,由于运行php的 账户时www账户,所以保证能手动用www用户执行git pull无报错, web_hook就跑起来了
所以遇到的问题的解决方法无非就是用www跑程序的问题,不提权的情况下,www要有整站目录、日志文件的读写权限,git服务器处存有www用户公钥等
使用www用户执行git pull一般能遇到的都是权限问题,su www, git pull 成功,web_hook就起来了
2021年12月27日 回头再看
第一步,su www切换www用户, 生成并上传公钥(www用户:在根目录下手动执行git pull成功 => 可能需要在root下全站授权给www【chown -R www:www xxx.com】)
第二步,生成webhook代码并在部署在服务器端,附示例(需要开启exec命令)
<?php $web_site = $_SERVER['SERVER_NAME']; $web_path = '/home/wwwroot/' . $web_site; $log_path = "/home/wwwlogs/" . $web_site . "/web_hook.log"; exec("cd /home/wwwroot/" . $web_site . "/ && git pull origin master >> " . $log_path); echo "<h1>Error Page!</h1>";
缺点1:webhook文件可能会被报毒【震惊,一分钟手写木马】
缺点2:该方案是用www用户执行,如果用其他用户如root在服务器上修改文件 导致文件提权,之后可能会被卡住
发表评论: