• 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在服务器上修改文件 导致文件提权,之后可能会被卡住