git push後のファイル所有権に関する問題

git push後のファイル所有権に関する問題

自宅に、Web サーバーおよび Git リポジトリとして構成された Ubuntu 13.10 を実行しているサーバーがあります。自分のシステムからサーバーにプロジェクトをプッシュすると、post-receive フックが実行され、ファイル (Symfony2 プロジェクト) が適切な仮想サーバーの Web ルートに移動します。

私がこれ(自分のサーバーをホストすること)を行っている理由の 1 つは、サーバー ホスティングのベスト プラクティスについてさらに学びたいからです。

/opt/git の git リポジトリへの権限を持つユーザー git として SSH 経由で git サーバーにプッシュします (この方法を実行することを推奨するガイドもあります)。git ユーザーのシェルは /usr/bin/git-shell に設定されています。

私の Web サーバーは、ユーザー 'www-data' として実行されている nginx です。これを構成していないため、これがデフォルトの設定であると思います。

私が現在抱えている問題は、www-data ユーザーと自分のユーザー (tim) をデプロイした後、キャッシュ ディレクトリへの書き込み権限がなくなり、Symfony がクラッシュしてしまうことです。

私のユーザー (tim) が関与している理由は、プロジェクトに自分のユーザー アカウントで設定した cronjob があるためですが、これは必ずしも最善のアイデアではないかもしれません。

また、何らかの理由で、コミット後のcache/ディレクトリのデフォルトの権限は

drwxr-xr-x 4 git git  4096 Jul 29 09:33 cache

つまり、私の知る限りでは、git ユーザーだけがキャッシュ フォルダー内にファイル/ディレクトリを作成できることになります。

今、この問題に対処する方法は 101 通り考えられますが、私がもっと興味があるのは、問題を解決するための正しい/意図された方法です。

  • 何らかの方法でファイルを www-data ユーザーに chown し、同じユーザーとして cronjobs を実行する必要がありますか?

    • これは複雑に思えます。git ユーザーが「ファイルを他の人に渡す」ことは許可されていないと思うからです。
  • 別のユーザー www-data または tim として post-receive フックを実行する方法を見つける必要がありますか?

  • どのユーザーとして cronjob を実行すればよいでしょうか? tim だけでよいのでしょうか? それとも www-data ユーザーでよいのでしょうか? (あるいは root はだめでしょうか)

これは私の受信後スクリプトの内容です(どこかのウェブサイトで見つけたのですが、どこだったか思い出せません)

#!/bin/sh
# 
## store the arguments given to the script
read oldrev newrev refname

## Where to store the log information about the updates
LOGFILE=./post-receive.log

# The deployed directory (the running site)
DEPLOYDIR=/var/www/project.timfennis.com

##  Record the fact that the push has been received
echo -e "Received Push Request at $( date +%F )" >> $LOGFILE
echo " - Old SHA: $oldrev New SHA: $newrev Branch Name: $refname" >> $LOGFILE

## Update the deployed copy
echo "Starting Deploy" >> $LOGFILE

echo " - Starting code update"
GIT_WORK_TREE="$DEPLOYDIR" git checkout -f
echo " - Finished code update"

echo " - Starting composer update"
cd "$DEPLOYDIR"; composer update; cd -
echo " - Finished composer update"

echo "Finished Deploy" >> $LOGFILE

キャッシュ ディレクトリが毎回削除されるため、ファイル権限を 755 にリセットしているのは composer であると確信しています。

関連情報