2011-07-29 24 views
11

Estoy interesado en cambiar de Capistrano a Chef, pero estoy teniendo algunos problemas para juntar todas las piezas.despliegue de chef?

He seguido http://wiki.opscode.com/display/chef/Quick+Start y puedo iniciar instancias EC2 con knife. En cuanto a la implementación del código, parece que deseo hacer lo que está en http://wiki.opscode.com/display/chef/Deploy+Resource, el único problema es que en ninguna parte de esa página menciona en qué directorio/archivo debe ir el bloque de código /to/path de implementación.

Otro problema que estoy teniendo es la comprensión de cómo implementar cambios de código después de que el servidor ha sido configurado. Tal vez estoy acostumbrado a mi flujo de trabajo actual (git push && cap deploy), pero lo mejor que puedo decir es que después de confirmar mis cambios se supone que debo ingresar al servidor y ejecutar sudo chef-client? algo sobre eso se siente mal. ¿No hay un equivalente de límite, es decir, chef deploy?

Finalmente (y tal vez esto sea un poco más difícil), estoy buscando implementar múltiples aplicaciones de rieles en un único servidor. Parece prudente mantener algún tipo de archivo de configuración del chef en el repositorio de cada aplicación que describa los detalles de su implementación, pero no estoy seguro de cómo interactuaría con el servidor chef-repo/alojado. ¿Sería cada aplicación un papel? Y desde mi entendimiento de cómo funcionan las cosas, también me inquieta un poco la idea de que 'chef-cliente' intente desplegar todas las aplicaciones cuando se ejecuten. Con git push && cap deploy estoy seguro de lo que estoy implementando. Mientras que algunos de los otros repos de aplicaciones pueden no estar en un estado desplegable. ¿Habría alguna forma de implementar solo una aplicación en esta configuración?

+0

Sólo por curiosidad, ¿por qué estás tratando de cambiar a desplegar con el chef? Eso siempre me pareció mal por alguna razón ... – noli

+0

quizás debería volver a formular la pregunta de mi pregunta "estoy interesado en saber si debo cambiar al chef" ... actualmente estoy usando [caucho] (https: //github.com/wr0ngway/rubber/wiki) para mi implementación de rieles. funciona bastante bien, pero no es compatible con varias aplicaciones en la misma instancia (que es algo que se está convirtiendo rápidamente en un requisito para mí). También tengo proyectos sin rieles que despliego ... por lo que estoy muy interesado en la idea de una herramienta/flujo de trabajo único que pueda provisionar un servidor, iniciarlo y desplegar una variedad de proyectos. – james

Respuesta

8

Por lo tanto, el cuchillo es en realidad capaz de realizar tareas capistrano-esque, específicamente, ejecutar un comando en varios servidores.

Para distribuir su aplicación a todos los servidores de aplicaciones, en el supuesto de haber seguido la ruta de aplicación libro de cocina Opscode carriles, sólo podría hacer lo siguiente:

knife ssh role:t<appserver-role> chef-client -xroot -P<pass> 

que se ejecutará el chef-cliente como root en todos sus servidores de aplicaciones. Utiliza la API de búsqueda del chef para encontrar todos los nodos con esa función y ejecutar ese comando en ellos.

Es bastante poderoso.

+2

Si entiendo correctamente, ¿esto ejecutará todas las recetas en los nodos devueltos por la búsqueda? Eso significa que, en el caso de [Deploy Resource] (http://wiki.opscode.com/display/chef/Deploy+Resource), cualquier acción que quiera llevar a cabo (implementación de una revisión específica, retroceso, etc.) significa ¿modificando los atributos de acción y revisión en la receta de implementación, presionando la receta al servidor del chef y luego emitiendo el comando anterior? – james

3

La sugerencia sobre el uso de knife ssh para implementar bajo demanda es absolutamente correcta. Si pudiera seguir elaborando sobre el uso de Chef como una solución de implementación (especialmente en comparación con herramientas como Capistrano). Chef está diseñado como una herramienta para la administración de configuraciones y la integración de sistemas, parte de lo que eso implica es que todo lo que se ejecuta en un sistema debe ser idempotente.

Algunas veces hay confusión cuando se utiliza la implementación de Chef para volver a ejecutar todo cuando se ejecuta una prueba Chef. Tenga en cuenta que Capistrano funciona diciéndole al sistema "haz esto", el Chef trabaja diciéndole al sistema "esto", entonces qué versión de una aplicación y qué esquema debería usar una base de datos normalmente se definirá en atributos y bolsas de datos. Cuando Chef se ejecuta si la aplicación ya está implementada y la base de datos ya tiene el esquema adecuado, no debería pasar nada, solo se deben tomar acciones si el sistema no se encuentra en el estado deseado. Esta es la razón por la cual, incluso cuando se implementan múltiples aplicaciones, volver a ejecutar todo no debería ser un problema.

5

Escribí el siguiente artículo que describe cómo implementar Ruby on Rails usando chef.

http://tech.hulu.com/blog/2012/07/06/automating-system-provisioning-and-application-deployment-with-chef/

Bueno ... este artículo no se trata sólo de los carriles, pero la parte del león del ejemplo es acerca de la implementación rieles.

También hay un libro de cocina de la comunidad llamado "aplicación" libro de cocina que se puede utilizar para implementar Ruby on Rails. Comparado con ese libro de cocina, el ejemplo en este artículo debería ser un poco más fácil de entender para las personas nuevas. Sin embargo, una vez que te acostumbras a hacerlo usando el ejemplo en el artículo, definitivamente debes mirar el libro de recetas de la aplicación para ver si tiene más sentido para ti.

+0

El enlace no existe. – kvivek

2

En mi experiencia, es mejor mantener Capistrano, ya que tiene algunas funcionalidades RoR que tendrá que replicar con el Chef. Chef es una herramienta muy flexible y puede hacer mucho con ella, por lo que puede ser un reemplazo para muchas otras herramientas. Personalmente, creo que las herramientas específicas son más útiles.

Los complementos de Capistrano para Unicorn, Asset Syncs con S3 y otros (como este https://github.com/bokmann/dunce-cap) son siempre muy útiles.

Como una manera más fácil de implementar y administrar aplicaciones Ruby on Rails, también puedo sugerir http://www.cloud66.com

responsabilidad: yo trabajo para la nube 66.