发布一个自认为安全的 webbook 自动部署流程 欢迎拍砖指正

阿婆主 自认为安全的点主要在于,没有为了 webhook 可以拉取到代码而给代码目录附加 nginx 写入权限。
阿婆主 个人习惯 代码放置于 /home/web/sites 目录下,php nginx 执行中需要可写的目录全部适用 setfacl 赋予权限。

  1. 执行过程需要 一部分 linux 知识与命令 expect
  2. 首先安装 expect
    yum install -y expect
  3. 编写 deploy.sh 请注意我我们的脚本是支持 多项目的哦 单独执行 是这个样子的 /home/web/shells/deploy.sh project
#!/usr/bin/env bash
unset GIT_DIR;

webpass='qnYpudBiIil3SvS#!9fuIr$8p$C5zqmX'

if [ $1 == "icoding" ]
then
    /usr/bin/expect <<-EOF
spawn su - web
exp_internal  0
expect "*密码:"
send "$webpass\r"
expect "*~]$"
send "cd /home/web/sites/icoding\r"
expect "*icoding]$"
send "/usr/bin/git reset --hard origin/master\r"
expect "*icoding]$"
send "/usr/bin/git pull origin master\r"
expect "*icoding]$"
send "exit\r"
interact
expect eof
EOF
    cd /home/web/site/icoding
    /usr/bin/php artisan view:clear
    /usr/bin/php artisan config:clear
    /usr/bin/php artisan route:clear
fi
  1. 书写 deploy.php 适用于 gitlab webhook
<?php

ini_set('max_execution_time', '120');

$token = $_SERVER['HTTP_X_GITLAB_TOKEN'];

if ($token != 'm2S0tGOyj8APTbg0gIs4z9shU8hY3Dxi') {
    echo 'Token Error';
    header('HTTP/1.1 403 Token Error');
    exit();
}

$data = file_get_contents('php://input');

file_put_contents('logs/input.txt', $data, FILE_APPEND);

$data = json_decode($data, true);

$branch = $data['ref'];
$branch = str_replace('refs/heads/', '', $branch);

if ($branch != 'master') {
    exit();
}

$repository = $data['repository']['name'];

$command = '/home/web/shells/deploy.sh '.$repository;

echo $command;

$result = shell_exec($command);

if($result == null){
    header('HTTP/1.1 500 Internal Server Error');
}else{
    file_put_contents('logs/input.txt', $result, FILE_APPEND);
    echo $result;
}

以上作者的表达能力着实有限,希望兄弟们提点指正,我明后晚会积极改正、润色。
然后 @Summer 大神能帮排个版就更酷了。

本作品采用《CC 协议》,转载必须注明作者和本文链接
jasonchang
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 3
Summer

看到:

然后 @Summer 大神能帮排个版就更酷了。

我惊呆了!

7年前 评论
Summer

file

7年前 评论

@Summer 版主 = 帮忙排版的主要工作人员

7年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!