Domanda

Sto sviluppando un'applicazione che risiede su un host pubblico, ma la cui fonte devo mantenere in un repository Git dietro un firewall aziendale. Sto diventando molto stanco della lentezza della distribuzione via scp (copiare l'intero repository e la spedizione su SSH su ogni Deploy) e vorrebbero avere l'host remoto semplicemente fare un git pull di aggiornamento. Il problema è che il firewall vieta connessioni SSH in entrata.

sarebbe possibile per me di impostare un tunnel SSH dal mio computer al computer di distribuzione e uso il mio repository come la sorgente per il git pull? Dopo tutto, git è distribuito, quindi la mia copia è altrettanto repository valida come quella centrale. Se questo è possibile, quale sarebbe il comando tunnel e la configurazione di Capistrano essere?

Credo che il tunnel sarà simile

ssh -R something:deployserver.com:something deploybot@deployserver.com
È stato utile?

Soluzione

Net :: SSH attrezzi a distanza di inoltro . Ho preso visione del codice sorgente di tutti di Capistrano e non riuscivo a vedere alcun riferimento ad esso nella release corrente. Tuttavia, questo non ti impedisca di stabilire remoto spedizioni prima di distribuire con Capistrano.

Che cosa si vorrà fare è impostare individualmente i percorsi :local_repository e :repository. :local_repository viene fatto riferimento a livello locale per determinare che impegnano sarà utilizzato per la distribuzione prima dell'avvio del collegamento. Che lascia :repository per il server remoto a tirare da dopo che la connessione è stata avviata. Questo è dove è possibile specificare il percorso del repository dietro il firewall.

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

Prima di distribuire, assicurarsi di stabilire la distanza in avanti. Avrete bisogno di ripetere questa operazione per ogni server si distribuisce a.

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

Utilizzando Net :: SSH questo potrebbe facilmente essere trasformato in un compito che viene eseguito prima di ogni altra cosa che fornisce una maggiore flessibilità durante la distribuzione a più server.

Infine, dato che hai utilizzato SCP, si potrebbe desiderare di deploy_via, :remote_cache serie che mantiene una copia del repository sul server remoto. Questo riduce notevolmente il tempo di implementazione si riduce il rischio di corruzione.

Altri suggerimenti

Vedere la mia risposta da questa domanda SO :

Utilizzando Capistrano 3.x, le seguenti opere per me:

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

Si prega di notare che ssh.forward.remote aspetta i parametri in un ordine diverso rispetto ssh -R, quanto sopra è equivalente a ssh -R 9000:192.168.1.123:22

Questo compito richiede un metodo privato, se qualcuno conosce un modo ufficiale per ottenere il collegamento ssh l'accesso di Capistrano, si prega di commento o di modifica.

Modifica Si veda anche la sezione Tunneling e altri temi correlati SSH del README di SSHKit

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top