Можно ли сделать CAPistrano сделать оформление по поводу обратного SSH-туннеля?

StackOverflow https://stackoverflow.com/questions/2729100

Вопрос

Я разрабатываю приложение, которое находится на общественном хозяине, но источник которого я должен держать в хранилище Git, за корпоративным брандмауэром. я собираюсь очень устал от медлительности развертывания через scp (копирование всего репозитория и доставьте его через SSH на каждом развертывании) и хотелось бы иметь удаленный хост просто сделать git pull обновить. Проблема в том, что брандмауэр запрещает входящие SSH-соединения.

Будет ли возможность для меня установить туннель SSH от моего компьютера на компьютер развертывания и использовать мой репозиторий в качестве источника для git pull? После всего, git Распространяется, поэтому моя копия так же действительна репозиторий, как центральный. Если это возможно, какая команда туннелей и конфигурации CAPistrano?

Я думаю, что туннель будет выглядеть что-то вроде

ssh -R something:deployserver.com:something deploybot@deployserver.com
Это было полезно?

Решение

реализует удаленный переадресацию. Отказ Я посмотрел на все исходный код CaPistrano и не мог видеть никаких ссылок на него в текущем выпуске. Нет тем меньше, что не останавливает вас от установления удаленного переадресации перед развертыванием CAPistrano.

Что вы хотите сделать, это установить :local_repository а также :repository Пути индивидуально. :local_repository ссылается на локально, чтобы определить, какой коммит будет использоваться для развертывания до начала соединения. Это листья :repository Для удаленного сервера для выталкивания после начала соединения. Это то, где вы можете указать путь к репозитории за брандмауэром.

# deploy.rb
set :local_repository, "ssh://git@serverbehindfirewall/path/to/project.git"
set :repository,  "ssh://git@localhost:9000/path/to/project.git"

Перед развертыванием обязательно установите удаленный вперед. Вам нужно будет повторить это для каждого развертывания каждого сервера.

$ ssh -R 9000:serverbehindfirewall:22 deploybot@deployserver.com
# CTRL + C + A (Screen) or ⌘ + T (Terminal.app) to open new tab
$ cap HOSTFILTER=deployserver.com deploy # HOSTFILTER reduces set to specified host. Only useful if you have multiple servers.

Использование NET :: SSH Это может быть легко превращено в задачу, которая выполняется, прежде чем что-либо еще обеспечивает большую гибкость при развертывании нескольких серверов.

Наконец, учитывая, что вы использовали SCP, вы можете установить deploy_via, :remote_cache который сохраняет копию репозитория на удаленном сервере. Это значительно уменьшает ваше время развертывания, уменьшает вероятность коррупции.

Другие советы

Увидеть мой ответ от Это так вопрос:

Используя Capistrano 3.x, для меня следующие работы:

namespace :deploy do
  desc "Open SSH Tunnel to GitLab"
  task :open_tunnel do
    on roles(:app) do
      info "Opening SSH Remote Tunnel..."
      self.send(:with_ssh) do |ssh|
        # ssh -R 9000:192.168.1.123:22
        ssh.forward.remote(22, "192.168.1.123", 9000)
      end
    end
  end
  before "deploy:check", "deploy:open_tunnel"
end

Обратите внимание, что ssh.forward.remote ожидает параметров в другом порядке, чем ssh -R, вышеизложенное эквивалентно ssh -R 9000:192.168.1.123:22

Эта задача вызывает частное метод, если кто-то знает официальный способ получить доступ к SSH CAPISTRANO CAPISTRANO, пожалуйста, прокомментируйте или отредактируйте.

Редактировать: Также см. Раздел Туннелирование и другие связанные темы SSH readme sshkit

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top