Implementar aplicación PHP en múltiples nodos EC2

He estado leyendo muchos artículos que hablan de ganchos post-actualización para implementar sitios web usando Git, sin embargo, no entiendo cómo se hace esto en EC2.

Quiero usar la function de escalamiento automático de EC2 para agregar automáticamente micro / pequeños nodos detrás de mi balanceador de carga en function de un AMI de mi server.

¿Cómo puedo hacerlo así?

  1. Mis nodos obtienen automáticamente la última versión del sitio desde el repository al iniciar

  2. Empuje las actualizaciones a todos los nodos (active la actualización de inmediato si es posible), incluso los que se agregan dinámicamente (por lo tanto, no hay configuration más allá de lo que AMI ya contenía).

En lo que respecta a las herramientas de automation, puede usar marionetas o chef para hacer el trabajo. Las empresas que están detrás de ellos también ofrecen services alojados:

Personalmente usamos Scalarium para implementar nuestros serveres y autoescalarlos.

Si eso no es lo que quieres, podrías, por ejemplo, escribir tus propios guiones para que el chef los implemente en una instancia. Ya hay un recurso de implementación que funciona muy bien con git. Probablemente recomendaría chef-solo, ya que esto no requeriría ejecutar chef-server (también tiene muchas dependencies y necesita administración) o algo así como littlechef, que le permite ejecutar una configuration parecida a la de un chef pero sin el inconveniente de corriendo chef-server.

El objective sería, por ejemplo, configurar un AMI privado que Amazon utiliza para autoescalar.

Esta AMI tendrá sus services (HTTP, etc.), ruby ​​y chef instalados ( gem install chef ) y todo lo que necesite y luego ejecutará los scripts para configurar su instancia y desplegar el código de GIT.

Si sigues este path, puedes, por supuesto, configurar tantos services como se requiera con la AMI y luego solo necesitarás que el chef implemente el código.

Aquí hay un ejemplo para ver el código de GIT usando una receta de chef:

 git "/var/www/example.org" do repository "git://github.com/yourname/example.git" revision "production" action :sync end 

Esto verificaría su twig de producción de git.

Como esto se ejecuta como raíz de forma pnetworkingeterminada, debe tener su deploykey en /root/.ssh/id_rsa . Podrías hacer eso antes de crear el AMI privado. También puede get la key desde una location segura antes de implementar:

 directory "/root/.ssh/" do action :create end execute "download my deploy key" do command "wget https://secure.location/id_rsa -O /root/.ssh/id_rsa" not_if do File.exists?("/root/.ssh/id_rsa") end end 

(Acabo de escribir esto, no he ejecutado esto, pero estoy casi seguro de que debería funcionar, ya que hacemos algo muy similar en hosts que no sean EC2).

Si no ejecutas chef-server o little-chef, utilizaría capistrano para volver a ejecutar chef-solo, por ejemplo, para ver una nueva revisión del código. Capistrano enviaba commands a la instancia (a través de ssh), para lo cual probablemente configuraría una count sin contraseña con una key ssh, etc.

¡Avíseme si necesita más indicaciones!