Можно ли сделать CAPistrano сделать оформление по поводу обратного SSH-туннеля?
-
02-10-2019 - |
Вопрос
Я разрабатываю приложение, которое находится на общественном хозяине, но источник которого я должен держать в хранилище 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