2012-03-20 31 views
1

我真的不知道什麼模式的unix帳戶/權限是與Capistrano打算。capistrano,unix用戶,權限

假設我有一個名爲Widget的Rails應用程序,我將與乘客一起部署。一般來說,pre-capistrano,我希望整個./widget目錄由一個叫做'widget'的用戶擁有。然後在默認情況下,默認乘客將以用戶'小部件'的身份運行應用程序進程,因爲乘客以擁有該文件的用戶身份運行。

而這整個重點是,'小部件'帳戶有相當有限的權限,對吧?由於一個Web應用程序將在該帳戶下運行?

所以,因爲我要的文件,以通過「微件」所擁有的,我告訴帽

集:用戶,「小部件」

但現在當我運行「帽部署:設置」,就是了從那個賬戶'sudo'。 '小部件'帳戶沒有辦法獲得sudo權限,整個問題是保持這個帳戶有限privs。

好的,我可以告訴上限不要使用sudo ......但是,那麼它實際上並不會有priv來做它所需要的,也許。

我也可以找到一個解決方法。但我開始思考,爲什麼我不得不重新發明輪子?我錯誤地認爲蓋帽食譜的重點是給我一些最佳做法。無論如何......人們究竟在這裏做什麼?

使用一個unix帳戶進行安裝,但是有帽子以某種方式'chown'到其他東西?使用一個unix賬戶,但有一些非上限(木偶?)做足夠的設置,以便帳戶不需要sudo來啓動事情?什麼?我錯過了什麼?

回答

0

通過使用最常用於Nginx的Passenger作爲您的網絡服務器,您可以避免一些令人頭疼的問題。

然後重新啓動Web服務時,非特權Widget用戶在其路徑中創建一個文件,Passenger將在它看到該文件存在時自動重新啓動Nginx。

這是通過在你的config/deploy.rb以下啓用:

命名空間:部署做 任務:開始做;結束 任務:停止做;結束 任務:重新啓動,:roles =>:app,:except => {:no_release => true}執行 運行「touch#{File.join(current_path,'tmp','restart.txt')}」 end end

至於MySQL/DB管理的其他特權任務,您的database.yml提供處理耙子遷移任務所需的憑據。

因此,真正唯一需要更多特權的時間將用於系統範圍的gem,ruby或rails更新安裝,但其中很大一部分取決於您的生產環境是如何安裝/安裝的。

鑑於Passenger + Nginx和DB的單獨憑據,您可以禁用sudo並查看在您的Capistrano部署過程中是否遇到任何錯誤,然後從那裏取回。

+0

我明白tmp/restart.txt與乘客(無論是apache或nginx)。但是這並沒有回答我的問題,人們通常如何處理帳戶和權限,設置了哪些帳戶以供登錄帳戶使用,哪些帳戶最終擁有這些文件,如果它是不同的帳戶,您是如何完成這項工作的,等等。 – jrochkind 2012-03-27 22:32:34