Влад развёртывание - развёртывание с разными пользователями? - PullRequest
2 голосов
/ 16 июля 2010

Мы используем vlad the deployer для развертывания приложений rails на производственных и тестовых серверах. Все наши серверы являются серверами Ubuntu.

У нас есть проблема, связанная с разрешениями Linux.

Влад использует ssh для размещения файлов на любом сервере, будь то рабочий или тестовый. В моей компании работает несколько человек, и у каждого из них есть отдельная учетная запись на каждом сервере.

С другой стороны, при настройке нашего сервера Apache он использует «владельца» каталога веб-сайта для чтения файлов в этом каталоге.

В результате пользователь, который делает первое развертывание, становится «владельцем» сайта; другие пользователи не могут выполнять развертывания - Apache не сможет читать измененные файлы, так как владелец изменился.

Обычно это не большая проблема, но сейчас приближаются праздники, и мы хотели бы решить это как можно более четко - например, мы хотели бы избежать совместного использования паролей / ключей ssh.

В идеале мне понадобится одна задача vlad, которая что-то делает с разрешениями развернутых файлов, чтобы другие пользователи могли их полностью изменить. Я не знаю достаточно о командах Unix, чтобы сделать это.

Ответы [ 3 ]

2 голосов
/ 19 августа 2010

Я бы сделал это с правами группы.

Веб-корень должен быть / var / www / your-app / current

/ var / www / your-app / должен быть доступен для записи группой, к которой принадлежат все лица, выполняющие развертывание.

настроить сценарии развертывания таким образом, чтобы они записывали в каталог с именем / var / www / your-app /> timestamp <, где timestamp - текущая временная метка. </p>

/ var / www / your-app / current является символической ссылкой, и когда вы успешно скопировали все файлы в новый каталог, вы обновляете цель символической ссылки, чтобы она указывала на созданный вами каталог.

Таким образом, каждый может развернуть, и вы можете увидеть, кто какую версию развернул.

Это также делает развертывание атомарным, поэтому ничто не сломается, если вы потеряете сетевое соединение в середине развертывания.

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

1 голос
/ 18 августа 2010

Почему вы не делаете все файлы общедоступными для чтения?В ~ / .bashrc каждого пользователя вставьте строку

umask o = r

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

Кстати, я никогда не слышал о такой опции Apache;Вы говорите, что когда Apache читает файл из / home / USER, он запускается с UID пользователя USER вместо «nobody» или «apache»?Это звучит странно.

0 голосов
/ 18 августа 2010

Я борюсь с этим уже пару месяцев, и я нашел только пару способов сделать это:

  • Используйте одну общую учетную запись для всех пользователей, развертывающих на сервере (бу!)
  • Используйте разные учетные записи, но сделайте привязку к обычной учетной записи пользователя (www-data, rails или аналогичной) перед выполнением зависящих от учетной записи задач (таких как обновление svn). Это может работать, но я его не проверял.
  • Использовать списки контроля доступа . Кто-то намекнул мне, что это может быть правильным решением. Тем не менее, у меня нет знаний или времени, чтобы сделать эту работу должным образом.

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

...