Deploy de app ruby on rails en host con puertos cerrados

96 views
Skip to first unread message

c.pf...@gmail.com

unread,
Dec 10, 2013, 10:00:44 AM12/10/13
to rub...@googlegroups.com
Hola gente, de nuevo yo por acá. Les paso a comentar la situación:

El deploy con capistrano de mi app con ruby 1.9.3 y rails 4 funciona de maravillas (deployandolo a un servidor de staging). 

El tema es el servidor de producción: en el mismo el puerto 22 está cerrado. Por lo que me cree una vpn para poder conectarme mediante ssh... esto esta funcionando bien y puedo loguearme al servidor por ssh y hacer un git clone del repositorio de bitbucket (con http://) sin problemas => ya que el 80 lo tengo abierto...

Lo que hice luego de comprobar lo anteriormente mencionado fue cambiar de protocolo git a http en repo_url de mi archivo de deploy de esta forma:

Tras ello, también corri el bundle package --all para tener las gemas en vendor/cache y no necesitar traerme nada por git (en teoría, con clonar el repo via http, debería andar la aplicación...). El problema, es que por algún motivo, cuando hago el deploy intenta hacer un git remote update (puerto 22) y falla dado que como dije anteriormente dicho puerto no esta abierto... Esta es la salida:

y los archivos de deploy de capistrano:

Intente cambiar la variable:
set :bundle_flags, '--deployment'
por
set :bundle_flags, '--local'
pero el resultado es el mismo.

Como estoy usando: 
require 'capistrano/deploy' y 
require 'capistrano/rails' (segun la doc oficial, incluye bundler, assets y migrations), me puse a ver las tareas en cada uno y llegué a ver lo siguiente:

Según la salida de la consola se ejecuta esto:
https://github.com/capistrano/capistrano/blob/master/lib/capistrano/tasks/git.rake#L29-L42 (con lo cual estaría haciendo un clone del repositorio) (a)

y luego ejecuta esto (el git remote update que luego falla):

Si es que interpreté bien, es justamente esta útlima task la que me está dando problemas y entiendo que no sería necesario que la haga ya que anteriormente se hizo el clone (como mencione en (a)).... Ahora bien, como hago para que no haga ese remote update? o bien que lo haga pero por http?

Muchas gracias!

=========================================================
Christian N. Pfarher
S3000 Santa Fe. Argentina

Luis Lavena

unread,
Dec 10, 2013, 10:52:25 AM12/10/13
to rub...@googlegroups.com

Hola gente, de nuevo yo por acá. Les paso a comentar la situación:

El deploy con capistrano de mi app con ruby 1.9.3 y rails 4 funciona de maravillas (deployandolo a un servidor de staging). 

El tema es el servidor de producción: en el mismo el puerto 22 está cerrado. Por lo que me cree una vpn para poder conectarme mediante ssh... esto esta funcionando bien y puedo loguearme al servidor por ssh y hacer un git clone del repositorio de bitbucket (con http://) sin problemas => ya que el 80 lo tengo abierto...


Si vos no podes conectarte directamente al servidor, entonces necesitas setear un gateway en capistrano.

Tenes dos opciones con respecto a los repositorios a clonar: o haces agent forward para pasar tus credenciales hacia los servidores de produccion (mediante el gateway) o tomas los id_rsa.pub de cada uno de los servidores de produccion y los agregas a tus deploy keys (en GitHub) o de alguna manera a donde estas hosteando tu repositorio.
 
En mi empresa tenemos un par de clientes con esta configuracion, y usamos capistrano con los git@... URLs sin problemas.

Que vos no puedas hacer SSH al servidor directamente no seria impedimento para poder clonar mediante git@...

Te recomiendo veas lo que menciono arriba: capistrano gateway y agent forward.

--
Luis Lavena
AREA 17
-
Perfection in design is achieved not when there is nothing more to add,
but rather when there is nothing more to take away.
Antoine de Saint-Exupéry

c.pf...@gmail.com

unread,
Dec 10, 2013, 3:02:56 PM12/10/13
to rub...@googlegroups.com
Hola Luis, creo que no me estas entendiendo, o bien no entiendo tu respuesta ;)....

Yo puedo hacer ssh al servidor de producción correctamente (dado que tengo configurada una VPN - el servidor de produccion es el cliente de la vpn y yo en mi maquina soy el server de openvpn).

El hecho es que en el servidor de staging toda la configuración funciona. Lo tengo configurado con agent forward y tengo las claves con mi repo de git lo que me permite hacer un clone sin problemas y sin pedirme password (pero en ese servidor tengo todos los puertos abiertos).  De hecho el deploy allí anda ok...

En cambio, en el servidor de producción tengo cerrado el 22. Si me logueo por ssh al server de producción (puedo hacerlo gracias a la VPN) y ejecuto:

christian@ubuntu:/tmp$ git clone g...@bitbucket.org:christian/myapp.git
Cloning into 'myapp'...
ssh: connect to host bitbucket.org port 22: Connection timed out
fatal: The remote end hung up unexpectedly

(porque el puerto 22 está cerrado)

===============================================
En cambio si hago:
me baja el repositorio sin problemas (ya que está llendo por el puerto 80 que si está abierto)..

Me explico?

=========================================================
Christian N. Pfarher
S3000 Santa Fe. Argentina

=========================================================


2013/12/10 Luis Lavena <luisl...@gmail.com>

--
Has recibido este mensaje porque estás suscrito al grupo "rubysur" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a rubysur+u...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.

Bruno Bonamin

unread,
Dec 10, 2013, 3:27:55 PM12/10/13
to rub...@googlegroups.com
Podés usar deploy_via: :copy si no tenés acceso al servidor de git desde el production server http://bu.chsta.be/blog/2013-02-24/capistrano-deployment-strategies-deploy-via-a-copy/
--
Bruno Bonamin.

c.pf...@gmail.com

unread,
Dec 10, 2013, 3:50:51 PM12/10/13
to rub...@googlegroups.com
Hola Bruno, si de hecho es lo que estoy usando: https://gist.github.com/cpfarher/7891591#file-deploy-rb-L18

=========================================================
Ing. Christian N. Pfarher
S3000 Santa Fe. Argentina
e-mail: c.pf...@gmail.com
blog: 
http://kikipblog.blogspot.com
twitter: @cpfarerr
skype: kikip1
=========================================================


2013/12/10 Bruno Bonamin <br...@bonamin.org>

Bruno Bonamin

unread,
Dec 11, 2013, 8:19:32 AM12/11/13
to rub...@googlegroups.com
Hola Christian, ahora entendí un poco más. Si no querés que se ejecuten esa tasks de git, lo que tenés que hacer es no requerir el archivo que la carga o pisar las tareas con unas que no hagan nada (lo cual sería un workaround pero en mi opinión no la mejor forma de solucionarlo). 

Te recomiendo que pruebes comentando las líneas de requires que haces al principio tratando de buscar el recipe más simple posible que te funcione. En mi caso por ejemplo, un recipe de deploy viejo que tengo, pero muy simple es https://gist.github.com/bbonamin/7910281

Yo probaría poniendo al final del deploy.rb
namespace :git do
  task :check do
  end
end

Esteban Fornal

unread,
Dec 11, 2013, 8:34:15 AM12/11/13
to rub...@googlegroups.com
es posible que tengas tu remote branch con la url mediante ssh?

Esteban Fornal

unread,
Dec 11, 2013, 8:39:35 AM12/11/13
to rub...@googlegroups.com
con git remote -v te tira los remotes con su url,
con git remote set-url name url se la cambias por la con http si es que te quedó la configurada con ssh

c.pf...@gmail.com

unread,
Dec 12, 2013, 6:39:36 PM12/12/13
to rub...@googlegroups.com
Hola, finalmente como tenía que deployar y el tiempo me corría, me abrieron el puerto 22.... Sin embargo estoy casi seguro que es por lo del git remote ya que me fije y estaba apuntando al git@... en vez de al http@.... Ni bien cierren el puerto de vuelta y pruebo confirmo para ver si era efectivamente eso...

saludos y gracias!

=========================================================
Ing. Christian N. Pfarher
S3000 Santa Fe. Argentina
e-mail: c.pf...@gmail.com
blog: 
http://kikipblog.blogspot.com
twitter: @cpfarerr
skype: kikip1
=========================================================


2013/12/11 Esteban Fornal <efo...@gmail.com>
Reply all
Reply to author
Forward
0 new messages