拒绝用户“root”@“localhost”的访问(使用密码:yes)_使用PHP和Github Webhook实现自动部署

前言

一般情况下,我们每次在使用Github时,每次push完代码后,都要手动到服务器上git pull一次,如果是vue之类的项目还要npm inpm build。 当然我们可以写sh脚本来进行部署,但这仍免不了我们要上服务器操作。程序员就是为了懒而生的,我们可以通过Github的webhook功能来实现push完后直接部署的爽快。

以下操作均在Centos7上进行

为Apache或Nginx配置用户和组

这里以Apache为例,已经配置了的请绕道。

合理的配置用户权限,才能规避一系列的权限问题,也能保证服务器的安全。

首先是创建用户和组,在root用户下执行

useradd www

这样会添加www组和www用户,并把www用户放置在www组中。也可以分开创建,自行百度。
创建完用户后会在/home下创建用户主目录www,也可以在useradd后面加上参数-d指定主目录在其他地方。

找到Apache的配置文件,我的系统为Centos7,默认在/etc/httpd/conf/httpd.conf
打开后找到UserGroup,更改为www

User www
Group www

然后重启Apache systemctl restart httpd

修改网站目录拥有者和所属组

找到网站的根目录(不是指某一特定网站,是指整个Apache的网站根目录)。
例如我的目录在/var/www,在www文件夹下又有多个站点,我们要把www文件夹的拥有者改为www,所属组改为www。(确保Apache在执行时有权限)。

chown -R www.www /var/www

cd /var后,ls -l,就能看到www文件夹的拥有者和所属组改变了,然后我们修改一下www文件夹的权限。

chmod -R 750 /var/www

表示www用户拥有所有权限,同组其他成员不能编辑,其他用户不能访问。
最终结果如下

drwxr-x---  10 www  www  4096 Feb 26 14:06 www

配置ssh key

我们要为用户www也配置ssh key。
首先切换用户为www,然后执行ssh-keygen

su www
ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/home/www/.ssh/id_rsa): 

key就放在默认位置就行,密码随意,我没有要密码,因为写脚本会麻烦一丢丢。

这时/home/www/.ssh/会有id_rsaid_rsa.pub两个文件,我们还差一个known_hosts文件。
先配置github的ssh key

  • 首先cat id_rsa.pub,然后复制得到的文本(以ssh-开头)。
  • 再打开github,打开个人设置(setting),打开SSH and GPG keysNew SSH key
  • 将复制的文本粘贴进去,再给key取个名字(建议名字包含服务器和用户),Add SSH key。
    进入项目文件夹,手动git pull,这时应该会提示
Are you sure you want to continue connecting (yes/no)?

输入yes,之后就正常pull了,此时.ssh文件夹下就自动生成了known_hosts

编写php脚本

不用php当然也行,用java写个web程序都行,只要能保证能被外网访问到。

<?php
    echo "开始部署<br>";
    chdir("/var/www/blog/usr/themes/handsome");
    exec("git pull 2>&1", $out);
    foreach($out as $v)
    {
        echo iconv( 'GB2312','UTF-8', $v)."<br>";
    }
?>

脚本很简单

  • chdir切换目录
  • exec执行shell命令
  • 2>&1用于标准错误重定向到标准输出,也就是脚本执行错误时也能返回错误信息
  • $out得到命令执行结果并通过echo输出(因为结果为多行时,用数组保存)

布置好脚本后访问一下

9ff0e61bf005f60bc5e88d052f872220.png


成功啦!然后就设置项目仓库的webhook
github上打开项目仓库,Setting - Webhooks - Add webhook

  • Payload URL就填写访问php脚本的地址
  • Secret为Github请求脚本时发送的密码信息,用于校验
    填写好后Add webhook就行了。

使用Secret让脚本更安全

脚本就这样放着肯定不行,如果被人知道了URL,那么谁都可以调用这个脚本了。所以Github提供了校验的方法。
先更改WebhookSecret为任意密码。

27bb3ea524163c970ea93cebd9297ce7.png


然后修改PHP脚本

<?php
    //密钥
    $secret = "123456";//Github项目中对应的Secret
    //获取GitHub发送的内容
    $json = file_get_contents('php://input');
    $content = json_decode($json, true);

    //github发送过来的签名
    $signature = $_SERVER['HTTP_X_HUB_SIGNATURE'];
    if (!$signature) {
        return http_response_code(404);
    }

    list($algo, $hash) = explode('=', $signature, 2);
    //计算签名
    $payloadHash = hash_hmac($algo, $json, $secret);
    if ($hash !== $payloadHash){
        return http_response_code(404);
    }

    echo "开始部署<br>";
    chdir("/var/www/blog/usr/themes/handsome");
    exec("git pull 2>&1", $out);
    foreach($out as $v)
    {
        echo iconv( 'GB2312','UTF-8', $v)."<br>";
    }
?>

此时再访问脚本URL,已经报404错误了,随意修改点内容然后push一下,服务端成功修改则证明脚本正常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值