Frage

Ich entwickle eine Anwendung, die befindet sich auf einem öffentlichen Host, aber dessen Quelle ich in einem Git-Repository hinter einer Unternehmens-Firewall halten müssen. Ich erhalte sehr müde von der Langsamkeit über scp der Bereitstellung (Kopieren des gesamten Repository und Verschiffung es über SSH auf jeder deploy) und möchte den Remote-Host haben einfach eine git pull zu aktualisieren tun. Das Problem ist, dass der Firewall eingehende SSH-Verbindungen verbietet.

Wäre es möglich, für mich einen SSH-Tunnel von meinem Computer auf den Einsatz Computer einzurichten und mein Repository als für die git pull Quelle verwenden? Immerhin ist git verteilt, so dass meine Kopie genauso gültig ein Repository als zentrales ist. Wenn dies möglich ist, was wäre der Tunnel-Befehl und die Capistrano Konfiguration?

ich glaube, der Tunnel etwas aussehen wird

ssh -R something:deployserver.com:something deploybot@deployserver.com
War es hilfreich?

Lösung

Net :: SSH Geräte Fern Spedition . Ich habe über alle Capistrano Quellcode geschaut und keine Verweise auf sie in der aktuellen Version sehen konnte. Nichtsdestoweniger, die Sie nicht davon abhalten, Spedition Fern Einrichtung, bevor Sie mit Capistrano bereitstellen.

Was Sie tun möchten, eingestellt wird, um die :local_repository und :repository Pfade einzeln. :local_repository lokal zu bestimmen, verwiesen, die für die Bereitstellung verwendet werden begehen, bevor die Verbindung initiiert wird. Das Blatt :repository für den Remote-Server zu ziehen aus, nachdem die Verbindung initiiert wurde. Hier können Sie den Pfad zu dem Repository hinter der Firewall angeben.

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

Bevor Sie einsetzen, müssen Sie die Fernbedienung nach vorne zu etablieren. Sie werden dies für Sie bereitstellen für jeden Server müssen wiederholen.

$ 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.

Mit Net :: SSH diese leicht in eine Aufgabe gedreht werden können, die vor etwas ausgeführt wird sonst ein größere Flexibilität, wenn auf mehrere Servern bereitstellen.

Schließlich, da Sie haben scp benutzen, könnte man auf Set deploy_via, :remote_cache will, die eine Kopie des Repository auf dem Remote-Server hält. Diese stark verringert Ihre Einsatzzeit die Möglichkeit der Korruption reduziert.

Andere Tipps

Siehe meine Antwort von diese Frage SO :

Mit Capistrano 3.x, die folgenden Werke für mich:

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

Bitte beachten Sie, dass ssh.forward.remote erwartet Parameter in einer anderen Reihenfolge als ssh -R ist das obige entspricht ssh -R 9000:192.168.1.123:22

Diese Aufgabe erfordert eine private Methode, wenn jemand einen offiziellen Weg kennt den Zugang Capistrano des SSH-Verbindung zu bekommen, bitte Kommentar bearbeiten.

Edit: auch den Abschnitt finden Sie unter Tunneling und andere verwandte Themen SSH von SSHKit README

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top