2

カピストラーノを使用してRuby on Railsアプリケーションをデプロイしたい、次のようなシナリオがあります。

  1. Web アプリケーションはシン クラスタ上にあり、設定ファイルは /etc/thin に保存されています。また、init スクリプトは /etc/init.d/thin にあるため、サーバーの再起動が必要になるたびに自動的に開始されます。
  2. また、nginx も同じ方法で実行されます (init スクリプト デーモンとして)
  3. 誰かが私のウェブサーバーをハッキングした場合に備えて、あまりにも恐ろしいことをさせたくないので、ウェブユーザーは sudo を許可されていません。
  4. Thin と nginx の両方が Web ユーザーとして実行され、そのようなセキュリティが適用されます

デプロイを行う必要がある場合は、/home/webuser/railsapps/helloworld にファイルをインストールする必要があります。その後、cap スクリプトでシンを再起動する必要があります。すべてのファイルを webuser が所有するようにしたいので、cap スクリプトのプライマリ ユーザーは webuser として実行されます。webuserがsudoできないため、シンデーモンを再起動したいときに問題が発生します。

ファイル展開用の webuser と、デーモンを再起動するための特別な sudoer という 2 つの個別のセッションを呼び出すことが可能かどうかを考えています。誰かがこれに関するサンプルスクリプトを教えてもらえますか?

4

5 に答える 5

4

これはあなたが望むものではないかもしれませんが、実際には sudoers ファイルで次のようなことを行うことができます:

someuser ALL=NOPASSWD: /etc/init.d/apache2

一部のユーザーが /etc/init.d/apache2 を実行できるようにする

他のことをしようとする場合:

$ sudo ls
[sudo] password for someuser: 
Sorry, user someuser is not allowed to execute '/bin/ls' as root on ...
于 2008-10-01T10:11:01.717 に答える
1

デプロイメントルーチンにsudoを使用してから、RAILS_ROOTで-Rをchownしてみませんか?リリースを現在のエイリアスにする前に、所有権を変更するようにCapistranoに指示できます。

于 2008-10-12T00:15:42.303 に答える
0

Thin を Web ユーザーとして実行している場合、Web ユーザーはプロセスを終了できませんか? /etc/thin でサーバーにすべてを渡す限り、デーモンなしで Thin を再起動できます。私が理解している限り、デーモンは、起動時にプログラムを手動で起動する必要を回避するための便利な方法です。

動けなくなるのは、/etc/thin の内容を編集する必要があるときだけです。Web ユーザーの thin.yml ビットにエイリアスを使用していると仮定すると、これはプログラムを追加または削除する場合にのみ発生します。このような場合は、エイリアスを手動で追加/削除するだけの価値があるかもしれません。

これはすべて、Web ユーザーが最初から Thin プロセスを終了できることを前提としています。そうでなければ知りません。前回、私が問題になったのは、アプリの実装がサーバーのレイアウトにかなり関連していたため、ローカル マシンでアプリを実行する方法がなかったときでした。何かを編集するたびに、それをSVNに送信し、ターミナルのタブをsshシェルに切り替え、SVNからプルし、タブを別のsshに切り替え、デーモンを再起動して、壊れたかどうかを確認する必要がありました。がっかりしたので、Thin をローカルにインストールし、設定ファイルを読み取るアプリを入手しました。今では、数日に 1 回アップロードするだけで済みます。

于 2009-07-19T03:06:27.963 に答える
0

ユーザーにsudoを許可していないことに気づきました:-)まあ、この答えは他の人に役立ちます:

パーティーに少し遅れましたが、私はこれをしました:

namespace :deploy do
  desc "Start the Thin processes"
    task :start do
      run "cd #{current_path} && bundle exec sudo thin start -C /etc/thin/dankit.yml"
    end

    desc "Stop the Thin processes"
    task :stop do
      run "cd #{current_path} && bundle exec sudo thin stop -C /etc/thin/dankit.yml"
    end

    desc "Restart the Thin processes"
    task :restart do
      run "cd #{current_path} && bundle exec sudo thin restart -C /etc/thin/dankit.yml"
    end

end

動作に sudo を追加しbundle exec sudo thin startます。

于 2011-06-17T12:49:14.263 に答える
0

これに代わる方法は、通常のユーザーとして nginx を実行し、ポート 8080 で実行し、IPTables を使用してポート 80 からポート 8080 にリクエストをメモリからリダイレクトすることです。

iptables -A PREROUTING -t tcp -m tcp -p 80 -j DNAT --dport 8080

ポート 80 宛てのすべてのパケットをポート 8080 に送信します。ポート 8080 は、通常のユーザーとしてバインドできます。

于 2008-10-04T07:22:39.760 に答える