Actualizar carpeta remota EC2 con Git Push

Vamos a ver como crear un repositorio remoto en un servidor Amazon EC2 y actualizar una carpeta con el código del repositorio. Es una manera mas rápida y sencilla de subir nuestras aplicaciones o webs a Amazon EC2 ademas de utilizar todas las ventajas de Git.

Lo primero que tenemos que tener es nuestro repositorio local preparado, si no lo tenemos ya basta con ejecutar “git init” sobre la carpeta de nuestro proyecto.

Crear repositorio en Amazon EC2

Ahora conectamos con SSH a nuestra instancia EC2 para crear la carpeta del repositorio remoto. Aclarar que la carpeta del repositorio y la de nuestra aplicación final son dos carpetas distintas, es decir, necesitamos una carpeta para el repositorio y otra donde queremos publicar el código de este (pueden ser varias o ninguna pero en este “tutorial” vamos a usar solo una).

Es una buena idea tener todos los repositorios en un mismo sitio, así creamos el repositorio:

Sustituir los nombres de carpeta por los que queráis, así como su ubicación.

Con esto ya tenemos el repositorio remoto creado, ahora en nuestro repositorio local añadimos el de EC2 como remoto:

Ahora ya podemos hacer push a “ec2” para subir nuestro repositorio:

Publicar código de repositorio EC2

Con todo lo anterior hemos actualizado el repositorio pero no publicado el codigo, para ello vamos a añadir un “hook” al repositorio, que se ejecute después de actualizar el mismo.

Vamos a la carpeta de nuestro repositorio remoto y deberíamos tener una carpeta llamada “hooks“, dentro de esta creamos un hook llamado “post-update“:

Nota: Este fichero debe tener permisos de ejecución (775)

Y añadimos el siguiente código:

Nota: La carpeta “/var/www/html/miapp” debe estar ya creada.

Lo anterior publica el codigo del repositorio en la carpeta “/var/www/html/miapp y ademas añade “Push to my app at: <$(date)>” a un fichero de log en “/var/www/logs/updates.log“, esto ultimo es opcional. En este mismo script podéis añadir que por ejemplo se reinicie el servidor web después de actualizar el código.

Problema Permission denied (publickey) en Windows

Este problema es debido a que el servidor Amazon EC2 no conoce nuestra clave SSH, así que tenemos que crearla (si no la tenemos ya) y subirla a EC2, para crearla ejecutamos en local:

Esto creara la clave “id_rsa.pub” en la carpeta “.ssh” de nuestro usuario de Windows.

Ahora tenemos que subir esta clave al servidor EC2, bien con “pscp.exe” de PuTTY o mediante SFTP. Una vez subida la clave tenemos que añadirla a las claves autorizadas de la siguiente forma en el servidor EC2:

Luego ya podemos eliminar la clave .pub con “rm” y volver a hacer push contra EC2.

Problema Permission denied (publickey) en Linux/MAC OS

En Linux/MacOS es mucho mas fácil solucionar este problema, desde nuestra maquina local ejecutamos:

La clave pem es la misma usada para conectar a la maquina remota con SSH.