EC2 に移行する前に、コミットを bitbucket リポジトリにプッシュし、受信後フックでそれらをサーバーにプルさせます。コミット後、URL http://mywebsite.com/update.phpが呼び出され、update.php が呼び出されます。は:
<?php `git pull`; ?>
それは魔法のように機能していました。ただし、EC2 では機能していません。その理由はわかりません。
私は次のことを試しました:
sudo chmod +x update.php
これにより、update.php が実行可能になります。update.php を次のように変更しました
<?php `sudo git pull`; ?>
update.php を次のように変更しました
<?php `sudo -s`; `git pull`; ?>
update.php を次のように変更しました
<?php `sudo -s git pull`; ?>
ssh 経由でインスタンスを使用している場合、ec2-user として「git pull」を実行できるため、パーミッションと関係があると思います。また、「git pull」は、root ユーザーの場合に機能します。
どうすれば動作させることができますか? 私はそれが許可に関係していたと思います。
アップデート
トラブルシューティングを行ったところ (ヒント @cyberx86 に感謝)、次のことがわかりました。
実行することでコマンドラインで更新フックを実行できましたが、php update.php
ルートである理由は機能しましたが、ec2 ユーザーの場合は機能しませんでした。エラーログが表示されました
エラー: .git/FETCH_HEAD を開けません: 権限が拒否されました
chmod -R 777 .git
そのため、root ユーザーとしてコマンドを実行しました。
git pull
コマンド ライン経由で更新をphp update.php
取得できるようになりましたが、post-receive フックを介して実行したり、ブラウザで url/update.php を指定したりしても機能しません。エラーログが表示されます
ホスト キーの検証に失敗しました。^M
致命的です: リモート エンドが予期せず電話を切りました
これは、ブラウザ経由でアクセスしたときにコマンドを実行するユーザーにsshキーが設定されていないため、シェルコマンドが実行されているように見えますが、リモートリポジトリがそのユーザーにプルさせていないことを意味すると思います.
@cyberx86 のアドバイスに従って、/etc/passwd でユーザーをチェックアウトしました。PHP ユーザーはいませんが、apache: という名前のユーザーがいます。apache:x:48:48:Apache:/var/www:/sbin/nologin
実行sudo -u apache php -q update.php
して、次のメッセージを受け取りました。
ディレクトリ '/var/www/.ssh' を作成できませんでした。
ホスト 'bitbucket.org (207.223.240.181)' の信頼性を確立できません。
RSA キーのフィンガープリントは編集済みです
接続を続行しますか (はい/いいえ)? はい
ホストを既知のホストのリスト (/var/www/.ssh/known_hosts) に追加できませんでした。
許可が拒否されました (公開鍵)。
致命的: リモート エンドが予期せず電話を切りました
したがって、ブラウザ経由でシェルスクリプトを実行するユーザー(おそらくapache)のsshキーを設定するだけの問題のようです。