2011-10-20 34 views
40

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 servidor web normal, respondiendo a una IP elástica también.Configuración de Git en EC2 para extraer de GitHub Repo

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

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

Respuesta

32

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

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

+0

Impresionante, gracias! – luchomolina

7

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

  1. Ya tengo mi repositorio privado github.
  2. que creó el Linux AMI EC2 (Ubuntu para procedimientos prácticos)
  3. He instalado git, MySQL, PHP, Apache y SSH en la instancia EC2, y añadí mi llave pública SSH en el fichero de /home/ubuntu/.ssh/authorized_keys.
  4. Una vez en la instancia de EC2, creé dos carpetas, la primera para guardar el repositorio (acabo de nombrarlo como he nombrado mi repositorio de github), y la segunda para contener el sitio (s): mkdir sitesrepo.git websites.
  5. Luego fui a la carpeta que se va a celebrar el repositorio e inicializar el repositorio desnudo: cd sitesrepo.git && git init --bare
  6. he creado el archivo de gancho a través de vim con el siguiente contenido en un archivo llamado post-receive y luego me hizo ejecutable a través chmod +x post-receive (tal como lo indica el tutorial). Ese archivo debe ser colocado en /home/ubuntu/sitesrepo.git/hooks

    #!/bin/sh 
    GIT_WORK_TREE=/home/ubuntu/websites git checkout -f 
    
  7. Aquí es donde mis pasos difieren de la clase particular se mencionó antes: Un repositorio git desnuda tiene un conflicto en el que no puede sostener la worktree ser un repositorio desnudo (No hace tiene sentido ya que es un repositorio simple. Los repositorios no desnudos están diseñados para tener un espacio de trabajo, es decir, un árbol de trabajo). Afortunadamente puede configurar manualmente el archivo de repositorio config.Así editando el archivo /home/ubuntu/sitesrepo.git/config debe garantizar a 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, a su carpeta de trabajo git repositorio local, la idea es añadir un nuevo repositorio remoto. Actualmente, ha configurado de manera predeterminada origin, que le indica a su repositorio que inserte su contenido en el repositorio de github. El tutorial llama a dicho repositorio remoto web. Entonces debe ejecutar una vez: git remote add web ssh://mysite.com/home/ubuntu/sitesrepo.git && git push web +master:refs/heads/master. Los siguientes intentos se pueden realizar a través de un simple git push web

  9. Dependiendo de la cantidad de sitios que planea mantener, debe configure your apache sites-enabled hosts. Además, como está utilizando apache, no olvide cambiar la carpeta web para que apunte al /home/ubuntu/websites, ya que de manera predeterminada apunta a /var/www. Pero ya está listo, simplemente no olvide reiniciar el servicio Apache después de definir la nueva carpeta web.

Espero que te ayude con tu pregunta.