2

Railsアプリを本番サーバーとテストサーバーにデプロイするために、vladデプロイヤーを使用しています。私たちのサーバーはすべてUbuntuサーバーです。

Linuxの権限に関連する問題があります。

Vladは、sshを使用して、本番環境でもテストサーバーでも、任意のサーバーにファイルを配置します。私の会社には複数の人がいて、それぞれがサーバーごとに異なるアカウントを持っています。

一方、Apacheサーバーの構成方法では、Webサイトディレクトリの「所有者」を使用して、そのディレクトリ上のファイルを読み取ります。

その結果、最初の展開を行うユーザーがサイトの「所有者」になります。他のユーザーはデプロイメントを行うことができません-所有者が変更されたため、Apacheは変更されたファイルを読み取ることができません。

通常、これはそれほど問題にはなりませんが、現在は休日が近づいており、これを可能な限りクリーンに解決したいと考えています。たとえば、パスワードやsshキーの共有は避けたいと考えています。

理想的には、他のユーザーが完全に変更できるように、デプロイされたファイルのアクセス許可に対して何かを行う1つのvladタスクが必要です。これを行うためのUNIXコマンドについては十分にわかりません。

4

3 に答える 3

2

私はグループの権限でそれを行います。

Webルートを/var/ www / your-app/currentにします

/ var / www / your-app /は、デプロイを行うすべての人が属するグループによって書き込み可能なグループである必要があります。

/ var / www / your-app /> timestamp <というディレクトリに書き込むようにデプロイスクリプトを設定します。ここで、timestampは現在のタイムスタンプです。

/ var / www / your-app / currentはシンボリックリンクであり、すべてのファイルを新しいディレクトリに正常にコピーしたら、シンボリックリンクのターゲットを更新して、作成したディレクトリを指すようにします。

このようにして、誰もがデプロイでき、誰がどのバージョンをデプロイしたかを確認できます。

これにより、デプロイがアトミックになるため、デプロイの途中でネットワーク接続が失われた場合でも、何も壊れません。

古いカタログは削除されないため、バグが発生した場合は、「最後の良好な」状態に簡単にロールバックできます。

于 2010-08-19T09:42:13.010 に答える
1

すべてのファイルを公に読めるようにしてみませんか?各ユーザーの〜/ .bashrcに、次の行を入力します

umask o = r

http://en.wikipedia.org/wiki/Umask

ところで、私はそのようなApacheオプションについて聞いたことがありません。Apacheが/home/ USERからファイルを読み取るとき、「nobody」や「apache」ではなく、USERのUIDで実行されると言っていますか?それは奇妙に聞こえます。

于 2010-08-18T01:26:45.947 に答える
0

私はそれと数ヶ月間戦ってきました、そして私はそれをするためのいくつかの方法を見つけました:

  • サーバーにデプロイするすべてのユーザーに単一の共有アカウントを使用します(boo!)
  • 別のアカウントを使用しますが、アカウントに依存するタスク(svn updateなど)を実行する前に、共通のユーザーアカウント(www-data、railsなど)にchownします。これはうまくいくかもしれませんが、私はそれをテストしていません。
  • アクセス制御リストを使用します。誰かが私にこれが正しい解決策かもしれないとほのめかしました。しかし、私にはこれを適切に機能させるための知識や時間がありません。

今のところ、プロジェクトごとに1人のユーザーを使用し続け、必要に応じてすべてを手動で変更しています。少し苦痛ですが、うまくいきます。

于 2010-08-18T14:22:57.570 に答える