webhook

123.png
创建ssh公钥

一般php运行使用的是www用户,具体的可以在webhooks.php里面:

PHP
exec("cd ~ && cd - && cd -", $output);
print_r($output);
然后在webhook里面点击测试,我这边输出的结果是:

PHP
Array
(

[0] => /home/wwwroot/xxx.com/pay/public
[1] => /home/www

)
// [0]为项目路径
// [1]为用户目录,也就是执行git pull的是www用户
那么需要切换到www用户 su www 进行创建ssh公钥

如果出现错误,那么需要vim /etc/passwd,找到www用户,把最后面的修改为bin/bash:

BASIC
// 只需修改最后的 sbin/nologin 为 bin/bash 即可,其它不用动,修改用后如下:
www:x:1000:1000::/home/www:/bin/bash
保存后再su www即可。

接下来是创建ssh公钥:

Bash
ssh-keygen -t rsa -C "xxx@xx.com"
三次回车即可,接着:

Bash
cat ~/.ssh/id_rsa.pub
把输出的公钥添加到gitee项目的部署公钥管理里面:

利用webhooks进行自动化部署

首次请先在项目根目录下进行git pull,然后输入yes,后续就可以通过webhooks进行自动pull了。
编写webhooks.php

PHP
<?php
// 添加webhooks时候填写的密码
$secret = "password";
$payload = file_get_contents('php://input');
if (!$payload) {

die('Missing Request Body.');

}
$data = json_decode($payload, true);
if (!empty($data)) {

if ($data['password'] === $secret) {
    $result = shell_exec("cd ".__DIR__." && cd ../ && git pull 2>&1");
    print($result);
} else {
    echo 'Password Error.';
}

} else {

echo 'Request Body Content Is Empty.';

}
另外需要开放exec、shell_exec函数,一般环境中默认是禁用的,如果项目是laravel、tp5这些的话,一般也就已经打开了的。

另一种简单的方法

编辑项目根目录下的.git/config文件,修改url为下面格式即可:

Bash
url = https://gitee帐号:gitee密码@gitee.com/账号名/gitee仓库名.git
两种方法的区别

明显的,一个通过ssh公钥进行管理,一个是明文的账号密码,如果是自己的服务器,其实没多大关系,但仍然建议使用ssh公钥的方式。


[在用方法]
实际上还有个更好更简单的办法,无需修改www权限。

检查系统php运行时使用的用户

可以在webhooks.php中写入以下代码,访问一下就知道了:

PHP
exec("cd ~ && cd - && cd -", $output);
print_r($output);
创建ssh公钥存放路径

先确认有没有/home/www/.ssh该路径,如果没有的话先创建:

Bash
sudo mkdir -p /home/www/.ssh
修改ssh公钥存放路径权限

Bash
sudo chown -R www:www /home/www/.ssh
使用www用户组去创建公钥

Bash
sudo -Hu www ssh-keygen -t rsa -C "xxx@xxxxxx.com"
三次回车后即可生成ssh公钥,接下来查看公钥

Bash
sudo cat /home/www/.ssh/id_rsa.pub
把公钥复制到项目的部署公钥管理里面即可。

注意事项

1、请确保项目的用户组为www,如果不是则:

Bash
sudo chown -R www:www 项目路径
2、首次需要先:

Bash
sudo -Hu www git pull
然后才可以使用webhooks进行自动化部署。


[报错解决]
用户用sudo执行命令时报如题所示错误:

xxx is not in the sudoers file.This incident will be reported
解决方法就是在/etc/sudoers文件里给该用户添加权限。如下:

  1. 切换到root用户

sudo su

  1. etc/sudoers文件默认是只读的,对root来说也是,因此需先添加sudoers文件的写权限,如果缺少这一步,在修改/etc/sudoers之后,无法保存。除非之前已经赋予他有写的权限

chmod u+w /etc/sudoers
3.编辑sudoers文件,找到这行 root ALL=(ALL) ALL,在他下面添加xxx ALL=(ALL) ALL (这里的xxx是你的用户名)

vim /etc/sudoers

给www用户添加root权限
wwwALL=(ALL) ALL
注意:

ps:这里说下你可以sudoers添加下面四行中任意一条

youuser ALL=(ALL) ALL

%youuser ALL=(ALL) ALL

youuser ALL=(ALL) NOPASSWD: ALL

%youuser ALL=(ALL) NOPASSWD: ALL

第一行:允许用户youuser执行sudo命令(需要输入密码).

第二行:允许用户组youuser里面的用户执行sudo命令(需要输入密码).

第三行:允许用户youuser执行sudo命令,并且在执行的时候不输入密码.

第四行:允许用户组youuser里面的用户执行sudo命令,并且在执行的时候不输入密码.

  1. 撤销sudoers文件写权限

chmod u-w /etc/sudoers

发表新评论