#はじめに
Web初心者がハマった問題を共有します。
より良いソリューションがあれば、有識者の方どんどんコメントください。
#やろうとしたこと
さくらのVPS上に自作のWebサイトを作るにあたって、GithubにPushしたタイミングでサーバー側にも自動で反映させたかった。
以下の記事を参考にしています。
https://qiita.com/misskabu/items/fb70d59deb02ae0efb12
この記事通りにやっている前提で書きます。
#ハマったこと
##エラーコードが出ていないのにVPS側で反映されない
deploy.php
<?
echo "<p>webhook start</p>";
exec('cd /home/アカウント名/www/gitpullしていたディレクトリ名/',$op);
print_r($op);
exec('git pull');
echo "<p>webhook finish</p>";
?>
_#参考にしたページより
github側では特にエラーもはかず、こんなログを出してくる。
<p>webhook start</p>Array
(
)
<p>webhook finish</p>
echoできているのでphpは叩けているっぽい.
VPS側にSSHした時にphpを実行するとpullできているので、エラー系に落ちて何も表示できていないのかと考えた。
##エラー出力してみた
deploy.php
<?
echo "<p>webhook start</p>";
exec('cd /home/アカウント名/www/gitpullしていたディレクトリ名/');
exec('git pull2>&1'$log);#エラー出力を標準出力へ
print_r($log);
echo "<p>webhook finish</p>";
?>
結果
<p>webhook start</p>Array
(
[0] => error: cannot open .git/FETCH_HEAD: Permission denied
[1] =>
)
<p>webhook finish</p>
権限がないらしい
##じゃあお前誰やねん
deploy.php
<?php
$user = exec('whoami');
$group = exec('groups ' .$user);
echo "user:{$user}<br>";
echo "group:{$group}<br>";
echo "<p>webhook start</p>";
chdir('cd /home/アカウント名/www/gitpullしていたディレクトリ名/');
exec('git pull 2>&1', $op);
print_r($op);
echo "<p>webhook finish</p>";
?>
結果
user:apache<br>group:apache : apache
#アッ、apache~~~~~~www
何わろてんねん。
適切な管理権限をapache君にも分けてあげてください。