マネージドVPSで実行されている本番Webサーバーの開始点としてhttp://toroid.org/ams/git-website-howtoを参照しています。VPSはcPanelとWHMを実行し、最終的には複数のクライアントWebサイトをホストし、それぞれが独自のcPanelアカウントを持ちます(したがって、それぞれが独自のLinuxユーザーとサイトが提供されるホームディレクトリを持ちます)。各クライアントのサイトは個別のGitリポジトリです。
現在、SSH経由で各リポジトリをクライアントのホームフォルダにあるベアリポジトリにプッシュしています/home/username/git/repository.git/
。上記のチュートリアルのように、各リポジトリは、受信後のフックを介して別のディレクトリにチェックアウトするように構成されています。この場合、各リポジトリは独自のリポジトリ/home/username/public_html
(新しいcPanelアカウントのデフォルトのDocumentRoot)にチェックアウトし、そこでファイルはApacheによって提供されます。これは機能しますが、(ローカル開発環境で)次のようにリモートをセットアップする必要があります。
url = ssh://username@example.com/home/username/git/repository.git/
また、プッシュするたびにユーザーのパスワードを入力する必要がありますが、これは理想的とは言えません。
/root/git/repository.git
すべてのリポジトリを1つのフォルダに一元化するために、rootとしてプッシュし、そこから適切なホームディレクトリにチェックアウトすることも試みました。ただし、これにより、チェックアウトされたすべてのファイルがrootによって所有されるため、Apacheがサイトにサービスを提供できなくなり、次のようなエラーが発生します。
[error] [client xx.xx.xx.xx] SoftException in Application.cpp:357: UID of script "/home/username/public_html/index.php" is smaller than min_uid
(私が知る限り、これはファイルの所有権/許可の問題です)
各リポジトリの受信後フックにあるchownコマンドとchgrpコマンドを使用してこの問題を解決できますが、これにより、頭の中で「正しくない」フラグも発生します。gitosis(すべてのリポジトリを一元化するため/home/git/
)も検討しましたが、チェックアウトされたファイルはgitユーザーによって所有されるため、同じファイル所有権の問題が発生すると思います。
私はこの全体に間違った方法でアプローチしているだけですか?全体的な問題に対する3番目のよりエレガントな解決策が完全に欠けているように感じます。それとも、上記の方法の1つに固執する必要がありますか?