【整理】【2】阿里云CentOS 6.5下Laravel部署之github php webhook自动部署

继续上一篇博客:http://www.jyguagua.com/?p=2658

上篇博客我们将Laravel的项目环境搭建完成,下一步我们来实现Laravel项目的自动部署工作,顺便将网站在阿里云展示出来。

首先开发好的代码,我已经提交到github上了,那么,我们需要下载到阿里云服务器上,后续网站的升级更新工作会非常频繁,我们也不希望每次代码提交一次,都要跑到阿里云服务器上执行一次git pull,非常繁琐,那么有无更好的办法?有,github提供了webhook方式,也就是说每次提交代码,github均会有事件信号,我们可以配置一个webhook脚本,来进行服务器端的代码更新工作。

原理如下:

hnexnrqd64

默认的阿里云系统安装完成之后,默认只有root用户,为了安全考虑,我们应该新建一个用户进行日常的服务器端维护工作。本教程我们打算创建www用户,www组,将www用户放在www组来管理。代码的拉取工作,我们也一并让www用户来执行。

那么CentOS的组,用户创建还是比较简单的,我们通过如下命令,创建 www 用户以及 www 组。

#创建组
groupadd www
#创建用户www到组www
useradd www -g www

由于后续我们通过www用户进行webhook php脚本执行,所以,我们需要让系统默认的php-fpm, Nginx权限给www用户。

修改php-fpm的默认用户:

vim /etc/php-fpm.d/www.conf

修改其中user,group,改为如下:

user = www
group = www

修改Nginx的默认用户:

vim /etc/nginx/nginx.conf

修改其中user部分:

user  www;

修改好之后,重启php,nginx服务:

service php-fpm restart
service nginx restart

重启之后,通过如下命令查看是否修改成功,如果php,Nginx默认用户均为www,那么便可以继续后续操作。

qq%e6%88%aa%e5%9b%be20170104145522

下面我们开始进行webhook的相关操作。

1:切换到www用户,创建部署公钥。

#切换到www用户
su - www

#创建RSA密钥,一路回车,不要输其他任何东西
ssh-keygen -t rsa

完成上面步骤之后,添加密钥到github的项目部署密钥中。

qq%e6%88%aa%e5%9b%be20170104152010

添加完成后,在我们的网站根目录中,用www用户,把代码clone到根目录中。一定要确保是用www用户clone代码。小提示:只要看到shell终端是 www @ xxx,并且提示符是 $ ,那么肯定是 www 用户

[www@xxx qadoor]$ git clone https://github.com/qadoor/qadoor_site.git

此处,还应该保证的是,网站的根目录,所属用户应该也是www用户,www群组,否则,会出现权限问题,比较麻烦,建议查看网站根目录,如果是www即可,如果不是,那么执行如下命令:

chown www:www *

确保是www用户权限:

qq%e6%88%aa%e5%9b%be20170104152558

代码克隆之后,我们在Laravel项目的public目录中创建hook目录,添加deploy.php文件,内容如下:

<?php #!/usr/bin/env /usr/bin/php
        error_reporting(E_ALL);
        ini_set('display_errors', '1');
        set_time_limit(0);

        try {
                $payload = json_decode(file_get_contents('php://input'), true);
                //$payload = json_decode($_REQUEST['payload']);
        }
        catch(Exception $e) {
                //log the error
                file_put_contents('/var/www/qadoor/qadoor_site/logs/github.txt', $e . ' ' . $payload, FILE_APPEND);
                exit(0);
        }

        if ($payload['ref'] === 'refs/heads/master') {

                $project_directory = '/var/www/qadoor/qadoor_site/';

                //$output = shell_exec("/var/www/qadoor/qadoor_site/public/hook/deploy.sh");
                $output = exec("cd /var/www/qadoor/qadoor_site/ && /usr/local/git/bin/git pull");

                //log the request
                file_put_contents('/var/www/qadoor/qadoor_site/logs/github.txt', $output, FILE_APPEND);

        }
?>

代码其实不难懂,阅读一遍,即可知道其中大概的内容,无非就是收到github推送过来的json信息,进行解析,然后判断无误,执行Linux命令即可。

其中执行的linux命令为:

cd /var/www/qadoor/qadoor_site/ && /usr/local/git/bin/git pull

大家根据自己的环境进行配置即可。

做好这些工作之后,我们把这个deploy.php添加到github项目中的webhook中。

qq%e6%88%aa%e5%9b%be20170104153906

点击edit即可看到每次push之后,github发送的一些json数据,我们的脚本也正是来解析这些json而已。不过在我的脚本里只是做了如果是master分支推送过来的消息,就执行一次pull,反正,达到目的就ok了。

qq%e6%88%aa%e5%9b%be20170104153959

下面进行一个测试:

test1 test2 test3

参考内容:

webhooks相关:
https://developer.github.com/guides/managing-deploy-keys/
https://developer.github.com/guides/automating-deployments-to-integrators/
https://www.sitepoint.com/using-github-webhooks-php/
https://www.sitepoint.com/deploy-website-using-laravel-git/
https://jonathanstark.com/blog/deploying-code-automatically-with-github-webhooks
添加用户相关:
http://jingyan.baidu.com/article/414eccf64c0ea36b431f0afb.html
添加sudo操作相关:
http://jingyan.baidu.com/article/2a1383284bb3e8074a134f2d.html
配置权限相关:
http://www.cnblogs.com/argb/p/3604340.html
https://laravel-china.org/topics/2096
https://laravel-china.org/topics/2824
http://www.ilanni.com/?p=7438

文章的脚注信息由WordPress的wp-posturl插件自动生成



|2|left
打赏

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: