Un chef para gobernarlos a todos

10

Estoy buscando chef para automatizar las implementaciones de Magento, tanto en las opciones de alojamiento estándar de Magento como en entornos como EC2. Busqué en Google y veo numerosas recetas, pero ninguna realmente me parece canónica. ¿Existe un guión de chef particular que sea mejor / mejor? Además, si ya ha realizado implementaciones de chef con PHP, ¿qué es una cosa que desearía saber cuando comenzara?

Alan Storm
fuente
2
Desearía haber sabido que Ansible ( ansible.com/home ) existía.
Reid Blomquist
Algunas otras alternativas si está interesado, saltstack.com y docker.com . Ambos parecen prometedores, pero tampoco he tenido la oportunidad de trabajar.
beeplogic
1
He estado experimentando con capistrano-ash: github.com/augustash/capistrano-ash
pzirkind
Creo que Reid está en algo, Alan re: Ansible. No requiere la instalación de un agente (funciona con ssh + teclas) en los clientes, es un sistema declarativo, por lo que es idempotente y, en general, descubrí que usarlo me deja con el "haz una cosa, hazlo simplemente, y hacerlo bien "sensación de unix en comparación con sistemas más robustos como chef, títeres y sal. Ha pasado un tiempo desde que publicó esto originalmente, ¿alguna actualización en sus pensamientos después de trabajar con el chef por un tiempo?
Bryan 'BJ' Hoffpauir Jr.

Respuestas:

6

Es casi imposible tener un conjunto de rutinas de talla única. He tenido éxito escribiendo un script Bash que ejecuta chef-clientejecuciones en listas de hosts proporcionadas por knife search. Los procedimientos se ven así ...

Chef Server 10.18.2 de código abierto en Ubuntu 12.04 LTS

  1. Inicializar variables
  2. Obtenga el último hash de revisión de GitHub para $branch
  3. Deshabilite la supervisión de disponibilidad para evitar alertas sobre el estado HTTP 503
  4. Cambie todos los hosts web y utilitarios al modo de mantenimiento
  5. Implementar utilidad
    1. Detener el cron de Magento y todos los trabajadores de Resque
    2. Abordar dependencias del sistema de archivos
    3. Chef revisa la revisión definida como una nueva versión
    4. Abordar las dependencias de Magento (paquetes, módulos, sistema de archivos, permisos)
    5. Actualice todas las tareas cron y scripts para la automatización.
    6. Implementar todos los módulos (compositor)
    7. Borrar caché con n98-magerun.phar
    8. Ejecute cualquier migración con n98-magerun.phar
    9. Vuelva a habilitar Magento cron
    10. Iniciar Resque trabajadores
  6. Implemente el primer servidor web
    1. Abordar dependencias del sistema de archivos
    2. Chef revisa lo definido $revisioncomo una nueva versión
    3. Abordar las dependencias de Magento
    4. Implemente todos los módulos de Magento
  7. Marca una nueva implementación en New Relic
  8. Habilitar los servicios de monitoreo de disponibilidad
  9. Deshabilite los servicios de equilibrador de carga para todos los demás hosts web
  10. Continuar con las implementaciones en los servidores web y ponerlos en línea secuencialmente
  11. Realizar rutinas de Chef para los hosts de búsqueda

Fuente: https://gist.github.com/parhamr/6177160#file-2-deployment

parhamr
fuente
4

Así es como me he acercado a esta área mientras llevaba el papel de wanna be sysadmin / devops. La mayoría de los siguientes serán solo principios generales que trato de seguir y no específicos del Chef.

Terminé yendo con Puppet porque descubrí que había más recursos en ese momento y me sentí más fácil de recoger.

Miré los diversos módulos precompilados disponibles para cosas como apache, php5, etc. Muchos de ellos parecían hacer mucho más de lo que necesitaba y no estaban tan familiarizados con la plataforma que no confiaba en lo que estaba sucediendo. Decidí que sería más simple para mí identificar lo que necesitaba hacer en cada tipo de nodo.

Comencé el proceso aprovisionando el entorno de desarrollo local del equipo (vargrant + caja virtual). Para cada servicio / componente creé un módulo: php5, apache2, redis, mysql, etc.

Una vez que el entorno de desarrollo era estable / funcionaba, comencé a desarrollar el entorno de control de calidad. Definí tipos de nodos genéricos para servidores web, redis, barnices, etc. que reutilizaron los mismos módulos que dev. Una vez hecho esto, la puesta en escena y la producción necesitaban cambios mínimos para comenzar a funcionar.

Mientras revisa y escribe sus recetas / plantillas, debe considerar cómo podría reutilizarse / generalizarse. No codifique cosas como rutas o usuarios / grupos que puedan cambiar entre distribuciones / proyectos / entornos. Dado que está buscando un enfoque generalizado, supongo que un gran obstáculo tratará con las diferencias entre las distribuciones * nix.

Lo más importante, mantener es simple. Automatice / estandarice las partes más importantes / lentas del medio ambiente. Iterar, evolucionar.

beeplogic
fuente