Развертывание приложения рельсов в нескольких средах - PullRequest
1 голос
/ 13 октября 2009

Я готовлюсь к развертыванию в реальной производственной среде. Когда я говорю «истина», я имею в виду, что моя текущая производственная среда будет находиться в стадии подготовки, потому что на сервере есть другое дерьмо, и я создаю новый больший фрагмент для того, что фактически будет моей рабочей машиной.

Драгоценный камень capistrano-ext сделал разделение рецептов развертывания довольно простым. Тем не менее, одна проблема, с которой я сталкиваюсь, - это перенос кода из одного фрагмента в другой. У меня на рабочем срезе настроено git-репо, которое я буду использовать для производства. Поток будет:

Развивайся на месте Тест локально Толчок с местного на сцену Тест на сцене Переход от этапа к производству ...

Поэтому мне, очевидно, нужен способ установить безопасное соединение между подготовкой и производством. При развертывании в производство я получаю «Отказано в доступе (publickey)». ошибка, потому что это не настроено. Как я могу установить эту связь? Нужно ли мне генерировать ключи на моем производственном сервере и ставить общедоступное в мою постановку? Как узнать, какой пользователь на моем производственном сервере пытается подключиться к моему промежуточному серверу?

Ответы [ 4 ]

2 голосов
/ 13 октября 2009

Филиалы и капистрано многоступенчатые ваши друзья.

Чтобы решить проблему с отсутствием доступа к git-репо, попробуйте ...

set :deploy_via, :copy

… это развертывается путем локальной проверки и толкания тарного шара.

1 голос
/ 04 ноября 2009

Нужно ли мне генерировать ключи на моем производственном сервере и размещать открытую версию для моей подготовки?

Да.

Как узнать, какой пользователь на моем производственном сервере пытается подключиться к моему промежуточному серверу?

Productionuser будет любым пользователем, с которым вы соединяетесь (см .: user). Staginguser будет из URL-адреса git (см .: хранилище).

Когда вы используете

set :deploy_via, :remote_cache

(по умолчанию), два ssh-соединения на самом деле происходят. Первый - от вашего локального компьютера до производства, и он использует «пользователя», как указано в вашем рецепте.

set :user, 'www-data'

Второе ssh-соединение устанавливается этим пользователем на производстве с вашим git origin. Поэтому, если git origin находится в стадии подготовки, рабочий пользователь пытается подключиться обратно к стадии подготовки, чтобы извлечь код из git.

set :repository, "staginguser@staging.com:project.git"

Попробуйте это: ssh на производство как пользователь. Затем выполните неудачную команду вручную. Вы увидите «отказано в разрешении» и, возможно, запрос на ввод пароля. Добавьте открытый ключ пользователя промежуточного сервера в рабочую коробку, и все должно работать лучше.

1 голос
/ 13 октября 2009

Я считаю, что при использовании Capistrano разветвление или маркировка версий работают намного лучше, чтобы отличить поэтапное и производственное использование.

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

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

0 голосов
/ 05 ноября 2009

Также есть:

set :gateway, 'staging server ip'

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

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

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

...