Pregunta

Estoy desarrollando una aplicación que reside en un host público pero cuya fuente debo mantener en un repositorio Git detrás de un cortafuegos corporativo. Me estoy poniendo muy cansado de la lentitud del despliegue a través de scp (copiar todo el repositorio y el envío a través de SSH en cada despliegue) y le gustaría tener el host remoto simplemente hacer una git pull de actualización. El problema es que el servidor de seguridad prohíbe conexiones SSH entrantes.

¿Sería posible para mí para configurar un túnel SSH desde mi ordenador para el equipo de implementación y uso mi repositorio como la fuente para el git pull? Después de todo, git se distribuye, por lo que mi copia es tan válida como un repositorio de la central. Si esto es posible, lo que sería el comando túnel y la configuración Capistrano ser?

Creo que el túnel se verá algo como

ssh -R something:deployserver.com:something deploybot@deployserver.com
¿Fue útil?

Solución

implementos desvío remoto . He mirado a través de todo el código fuente de Capistrano y no pude ver ninguna referencia a que en la versión actual. No obstante, eso no le impida el establecimiento de expedición remota antes de implementar con Capistrano.

Lo que usted querrá hacer es establecer los caminos :local_repository y :repository individualmente. :local_repository está referenciada a nivel local para determinar que practican será utilizado para el despliegue antes de que se inició la conexión. Eso deja :repository para el servidor remoto para tirar de vez iniciada la conexión. Aquí es donde puede especificar la ruta al depósito detrás del firewall.

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

Antes de implementar, asegúrese de establecer el desvío a distancia. Tendrá que repetir esta operación para cada servidor se implementa 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.

El uso de Net :: SSH esto podría fácilmente convertirse en una tarea que se ejecuta antes de cualquier otra cosa que proporciona una mayor flexibilidad a la hora de implementar varios servidores.

Por último, dado que ha estado utilizando SCP, es posible que desee deploy_via, :remote_cache conjunto que mantiene una copia del repositorio en el servidor remoto. Esto disminuye en gran medida el tiempo de despliegue reduce el riesgo de corrupción.

Otros consejos

Ver mi respuesta de esta cuestión de forma :

El uso de Capistrano 3.x, las siguientes obras para mí:

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

Tenga en cuenta que ssh.forward.remote espera parámetros en un orden diferente que ssh -R, lo anterior es equivalente a ssh -R 9000:192.168.1.123:22

Esta tarea requiere un método privado, si alguien conoce una manera oficial para obtener la conexión SSH acceso de Capistrano, por favor, comentario o edición.

Editar Véase también la sección Túneles y otros temas relacionados SSH de README de SSHKit

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top