

## 前提

ローカルPCvirtualbox内linux開発環境からpush  
↓  
githubプライベートリポジトリにてwebhook発動  
↓  
本番サーバノンベアリポジトリでpullスクリプト発動  
(sakuraレンタルサーバです）

という流れを構築しようと考えています。  
（デプロイツールAltaxもゆくゆくは考慮していますがまずはシンプルに  
流れをつかみたいということでこちらを進めています）

* * *

## 参考資料

色々調べてみてセキュリティなども考慮されていそうな  
下記サイトを参考にさせていただきました。

<http://qiita.com/oyas/items/1cbdc3e0ac35d4316885>

* * *

## 現状

・githubへの反映はしっかりされている。  
・github上でのログは正常に200を返している。  
・サーバ上でlogファイルはしっかり生成されている。  
（上記サイトphpスクリプト内で生成されている）

* * *

## 試したこと

・直接サーバ上からgithubにpullコマンドを実行してみたところできました。  
・pullができたところでssh接続ではなかったことに気づきssh接続後テストしてみるもlogファイルが更新されるだけでした。下記サイトを参考に接続のところ（Hi!アカウント～のところ）まではできました。  
<http://qiita.com/shizuma/items/2b2f873a0034839e47ce>  
・コード内のコマンド部分をフルパスにしてみました。  
(コードは.gitがあるディレクトリに配置しているので同じことだと思いますが調べている中でフルパス指定でと書いてある記事を発見しフルパスにしました）

※以下のソースはセキュリティリスクがあるかもしれませんので予めご了承ください。  

[code]

    // 設定
    $LOG_FILE = dirname(__FILE__).'/hook.log';
    $SECRET_KEY = '';
    
    $header = getallheaders();
    $hmac = hash_hmac('sha1', $HTTP_RAW_POST_DATA, $SECRET_KEY);
    if ( isset($header['X-Hub-Signature']) && $header['X-Hub-Signature'] === 'sha1='.$hmac ) {
        $payload = json_decode($HTTP_RAW_POST_DATA, true);  // 受け取ったJSONデータ
        // ここに実行したいコードを書く
        exec('/さくらサーバ.gitインストールディレクトリ/git pull origin master');//linuxコマンド実行
        file_put_contents($LOG_FILE, date("[Y-m-d H:i:s]")." ".$_SERVER['REMOTE_ADDR']." git pulled: ".$payload['after']." ".$payload['commits'][0]['message']."\n", FILE_APPEND|LOCK_EX);//ログファイルに書き込む
    } else {
        // 認証失敗
        file_put_contents($LOG_FILE, date("[Y-m-d H:i:s]")." invalid access: ".$_SERVER['REMOTE_ADDR']."\n", FILE_APPEND|LOCK_EX);
    }
    
[/code]

* * *

## 質問

・他にどこか確認するポイントはありますでしょうか。  
・セキュリティ的にも突っ込みがありましたらお願いいたします。  
・現状本番サーバにノンベアリポジトリを配置し秘密鍵を.sshディレクトリにおいていますがconfigファイルにパスワードを書いておくのとどちらがリスクが高いでしょうか。そもそも全く別の方法を取ったほうがリスクは減らせるのでしょうか。


CC BY-SA 3.0
2016-12-29T15:33:44.710
31533
2016-12-30T08:35:09.660
2016-12-30T08:35:09.660
19992
19992
question
php git github
github自動デプロイphpプログラムが動作できません

[code]

    exec('/さくらサーバ.gitインストールディレクトリ/git pull origin master');
    
[/code]

この部分、スクリプト合ってますか？  
ディレクトリの移動とgitコマンドを混同してませんか？

下のようにしてみればどうでしょうか。

[code]

    chdir('/さくらサーバ.gitインストールディレクトリ/');
    exec('git pull origin master');
    
[/code]


CC BY-SA 3.0
2016-12-29T15:56:27.670
31534
2016-12-29T15:56:27.670
7655
31533
answer