質問: githubのフックを使用してプライベートリポジトリからのgitプルを自動化するにはどうすればよいですか? これに似た質問がたくさんあると思いますが、私の質問はもう少し具体的です。テストに使用するサーバーがあり、サイトの所有者は、誰かがリポジトリにプッシュしたときにサーバーが自動的に更新されることを望んでいます。 githubフックを使用して、特定のurlにデータを送信し、更新の時期であることを通知すると思いました。ただし、リポジトリはプライベートであり、phpでshell_exec()を実行すると、sshキーを持つことができないwww-dataとして実行されます。パスワードをクリアテキストにしたくありません。ユーザーに認証を許可する方法についてはかなり困惑しています。誰かがアドバイスを提供できますか?かなりシンプルなはずの何かに髪を引っ張っています。
回答: 多くの方法があります。これが1つです: この方法では非常に基本的な認証のみが必要なため、認証トークンとして使用するuuidを生成します。例: https://www.uuidgenerator.net/version4 uuidをトークンとして追加して、webhookをトリガーするようにgithubリポジトリのwebhookを構成します。 http://example.com/webhook.php?token=youruuid トークンをチェックし、更新のためにサイトにフラグを立てるだけのwebhook.phpファイルをサイトのルートに配置します。 <?php $token = "youruuid"; if($_get['token'] != $token) { die("unauthorized source!"); } else { touch(__dir__ . '/git_pull_needed'); } 頻繁に(毎分?)実行され、git_pull_neededファイルが存在しない場合に終了するcronジョブを作成します。それが存在する場合、ジョブはgit pullを実行でき、その後git_pull_neededファイルを削除します。注:このcronジョブを実行するユーザーは、rootにすることも、できれば「デプロイ」することもできます。githubで読み取り専用の権限とwebrootへの書き込み権限を持つsshキーを持つユーザーです。 この分離された方法の主な利点は、webhook.phpを外部に公開するリスクが低いこと(攻撃者が何らかの方法でトークンを推測した場合にのみgit pullをトリガーできる)、webserver-userと 'の間の切断です。ユーザーがsshキーと組み込みの単純なレート制限を保持している。