github自動デプロイphpプログラムが動作できません
前提
ローカル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があるディレクトリに配置しているので同じことだと思いますが調べている中でフルパス指定でと書いてある記事を発見しフルパスにしました)
※以下のソースはセキュリティリスクがあるかもしれませんので予めご了承ください。
// 設定
$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);
}
質問
・他にどこか確認するポイントはありますでしょうか。
・セキュリティ的にも突っ込みがありましたらお願いいたします。
・現状本番サーバにノンベアリポジトリを配置し秘密鍵を.sshディレクトリにおいていますがconfigファイルにパスワードを書いておくのとどちらがリスクが高いでしょうか。そもそも全く別の方法を取ったほうがリスクは減らせるのでしょうか。