ローカルとサーバーで git をセットアップし、'post-receive' を作成して、ライブ サーバーにプッシュしたときに Web サイトの仮想ホスト ディレクトリにチェックアウトするようにしました。
#!/bin/sh
GIT_WORK_TREE=/var/www/domainname/public_html/ git checkout -f
ただし、プッシュを実行しようとすると、マスターは正常に送信されますが、サーバーの Web ルートでこれらのファイルを作成しようとすると、アクセス許可が拒否されたというエラーが発生します。
例えばremote: error: unable to create file index.php (Permission denied)
これらのエラーは、サーバーのセットアップ方法により、実際には意味があります。root アクセスを無効にし、visudo を介して sudoers に追加される新しいユーザーを作成しました。次に、このユーザーの SSH キーを設定しました。このユーザーを使用して、git の変更をサーバーにプッシュします。
問題は、プッシュに接続しているこのユーザーが、仮想ホスト ディレクトリに書き込む権限を持っていないことだと思います。これらのフォルダー内のすべてのファイルは、同じグループの www-data (私の nginx ユーザー) によって所有されています。
解決策は何ですか?より高い権限を持つ git のためだけに接続する SSH キーを持つ別のユーザーを作成しますか、または受信後の sudo のような機能を付与する方法はありますか?
非常に長々とした質問で申し訳ありませんが、私がしたことを完全に明確にしたかったのです。