Configurando Git en EC2 para sacar del repository de GitHub

Soy un poco nuevo en EC2 y Git, y acabo de configurar mi primera instancia de EC2, utilizando una AMI limpia de Amazon Linux. También instalé MySQL, Apache y PHP y abrí algunos puertos para hacer que funcionara como un server web normal, respondiendo a una IP elástica también.

Ahora, mi código está en un repository privado en GitHub, y me gustaría realizar implementaciones simples haciendo git pull o algo así. Git también está instalado en el server. Sé que podría configurar mi repository git en el server utilizando mi key personal ssh, pero parece extraño. Supongo que otra solución sería crear un nuevo usuario de GitHub y usarlo en el server, pero tampoco parece correcto.

¿Cómo logro esto de una manera elegante y segura?

Para evitar tener que mantener una key privada SSH en su instancia de EC2, las personas a menudo usan un flujo de trabajo que implica presionar a ese server remoto para su implementación. Básicamente, configura un repository bare git allí con un gancho de pre-receive que se implementa en otro directory. Hay un ejemplo simple de hacer esto en este tutorial . Entonces solo necesita tener su key pública SSH en ~/.ssh/authorized_keys en el server. Sin embargo, con este flujo de trabajo, no podría implementar directamente desde su repository de GitHub; tendría que extraerlo localmente y luego presionarlo hacia la máquina EC2.

Una alternativa es usar el mecanismo de keys de implementación de GitHub. Esto implicaría crear un nuevo par de keys SSH en su instancia EC2 y agregar la key pública como una key de implementación en su repository privado en GitHub. Luego puede extraer directamente de su repository privado de GitHub a su instancia de EC2.

Acabo de resolver esa situación siguiendo el tutorial que Mark Longair señaló anteriormente. El único problema que tuve fue en la creación del repository de git al descubierto. Así que déjenme resumir cómo lo resolví.

  1. Ya tengo mi repository privado github.
  2. Creé EC2 Linux AMI (Ubuntu para procedimientos prácticos)
  3. Instalé git, mysql, php, apache y ssh en la instancia de EC2 y agregué mi key pública ssh al file /home/ubuntu/.ssh/authorized_keys .
  4. Una vez en la instancia de EC2, creé dos carpetas, la primera que contenía el repository (la acabo de nombrar como he nombrado mi repository github) y la segunda para mantener los sitios: mkdir sitesrepo.git websites .
  5. Luego fui a la carpeta que contendría el repository e cd sitesrepo.git && git init --bare repository vacío: cd sitesrepo.git && git init --bare
  6. Creé el file hook a través de vim con el siguiente contenido en un file llamado post-receive y luego lo hice ejecutable a través de chmod +x post-receive (tal como lo indica el tutorial). Ese file debe colocarse en /home/ubuntu/sitesrepo.git/hooks

     #!/bin/sh GIT_WORK_TREE=/home/ubuntu/websites git checkout -f 
  7. Aquí es donde mis pasos difieren del tutorial mencionado anteriormente: Un repository de git desnudo tiene un conflicto donde no puede mantener el tree de trabajo como un repository simple (No tiene sentido ya que es un repository simple. Los repositorys no desnudos están destinados a tener un espacio de trabajo, es decir, un tree de trabajo). Afortunadamente puede configurar manualmente el file de config del repository. Entonces editando el file /home/ubuntu/sitesrepo.git/config debes garantizar tener algo como esto:

     [core] repositoryformatversion = 0 filemode = true bare = false worktree = /home/ubuntu/websites [receive] denycurrentbranch = ignore 
  8. Ahora, en su propia máquina, en su carpeta de trabajo de repository local git, la idea es agregar un nuevo repository remoto. Actualmente, usted ha configurado por origin pnetworkingeterminado lo que le dice a su repository que inserte su contenido en el repository de github. El tutorial llama a tal repository web remoto. Por lo tanto, debe ejecutar una vez: git remote add web ssh://mysite.com/home/ubuntu/sitesrepo.git && git push web +master:refs/heads/master . Los siguientes empujones se pueden hacer a través de una simple git push web

  9. Dependiendo de la cantidad de sitios que planea mantener, debe configurar los hosts apache sites-enabled . Además, como usa apache, no olvide cambiar la carpeta web para que apunte a /home/ubuntu/websites , ya que de manera pnetworkingeterminada apunta a /var/www Pero ya está listo, simplemente no lo haga. olvide reiniciar el service apache después de definir la nueva carpeta web.

Espero que esto ayude con tu pregunta.