capistrano, пользователь unix, разрешения

Я действительно не понимаю, какая модель учетных записей/разрешений unix предназначена для Capistrano.

Допустим, у меня есть приложение для рельсов под названием Widget, и я буду развертывать его с помощью пассажира. В общем, до капистрано, я хочу, чтобы весь каталог ./widget принадлежал пользователю с именем «виджет». И затем по умолчанию пассажир будет запускать процесс приложения как пользовательский виджет, потому что пассажир работает как пользователь, которому принадлежит файл.

И весь смысл этого в том, что эта учетная запись «виджет» имеет довольно ограниченные разрешения, верно? Поскольку веб-приложение будет работать под этой учетной записью?

Итак, поскольку я хочу, чтобы файлы принадлежали «виджету», я говорю шапке

установить :пользователь, "виджет"

Но теперь, когда я запускаю «cap deploy: setup», он хочет «sudo» из этой учетной записи. Ни в коем случае эта учетная запись «виджет» не получает привилегии sudo, весь смысл в том, чтобы сохранить ограниченные привилегии этой учетной записи.

Хорошо, я могу сказать Cap не использовать sudo... но тогда, возможно, у него не будет привилегий, чтобы делать то, что ему нужно.

Я тоже могу найти обходной путь. Но я начинаю думать, почему мне все время приходится заново изобретать велосипед? Я ошибочно думал, что цель рецептов кепки в том, чтобы дать мне несколько лучших практик. В любом случае... что люди на самом деле здесь делают?

Использовать одну учетную запись unix для установки, но затем каким-то образом заглушить ее чем-то другим? Используйте одну учетную запись unix, но настройте что-то без ограничения (марионетка?), чтобы этой учетной записи не нужно было использовать sudo, чтобы начать работу? Какие? Что мне не хватает?


person jrochkind    schedule 20.03.2012    source источник


Ответы (1)


Вы можете избежать головной боли, используя Passenger чаще всего с Nginx в качестве веб-сервера.

Затем, чтобы перезапустить веб-службы, непривилегированный пользователь Widget создает файл на своем пути, и Passenger автоматически перезапустит Nginx, когда увидит, что этот файл присутствует.

Это включается с помощью следующего в вашем config/deploy.rb:

пространство имен :deploy do задача :start do ; завершить задачу :stop do ; end task :restart, :roles => :app, :except => { :no_release => true } do run "touch #{File.join(current_path,'tmp','restart.txt')}" end end

Что касается других привилегированных задач по администрированию MySQL/DB, ваш файл database.yml предоставляет учетные данные, необходимые для выполнения задач миграции rake.

Так что на самом деле единственный раз, когда вам понадобится что-то более привилегированное, будет для общесистемной установки обновлений gems, ruby ​​или rails, но многое зависит от того, как была настроена/установлена ​​ваша производственная среда.

Учитывая Passenger + Nginx и отдельные учетные данные для БД, вы можете отключить sudo и посмотреть, возникнут ли какие-либо ошибки во время процесса развертывания Capistrano, а затем выбрать оттуда.

person Moisey Uretsky    schedule 26.03.2012
comment
Я понимаю tmp/restart.txt с пассажиром (либо с apache, либо с nginx). Но это не отвечает на мой вопрос, как люди обычно обрабатывают учетные записи и разрешения, какие учетные записи настроены для входа в систему, какая учетная запись в конечном итоге владеет файлами, если это другая учетная запись, как вы это делаете и т. д. . - person jrochkind; 28.03.2012