Hace poco estuvimos hablando de Vagrant y de cómo crear máquinas virtuales para hacer nuestras pruebas, probar nuevas tecnologías o lo que queramos.
Pero es un poco rollo cada vez que creamos una máquina tener que instalar todo el software etc. Desde Vagrant configurando el VagrantFile se pueden hacer muchas cosas, incluso existe GUI como http://getprotobox.com/ que nos ayudan a crear Manifest con los Virtualhost de Apache2 configurados.
Pero hay veces que necesitamos algo más y para ello existen muchas soluciones hoy comentamos una de ellas Chef.
Introducción a Chef
Existen 2 versiones de Chef, una llamada Chef Server enfocado a tener una máquina como servidor de recetas a la que máquinas cliente Chef para obtener la información de configuración. Esta versión es algo compleja y quizás para empezar sea algo difícil de configurar. No obstante, más adelante podríamos abordar esta solución.
De momento vamos a utilizar Chef solo es una gran herramienta de gestión de la configuración. Con ella podremos crear clones de una máquina instalando todo lo necesario para su funcionamiento.
Por ejemplo, podemos tener recetas para instalar PHP, apache, Jenkins, graylog2,.. si no queremos crear recetas o queremos ver como se hacen aquí http://community.opscode.com/cookbooks tenemos un índice de recetas, pero de esto hablaremos más adelante 😉
Instalando Chef solo en Windows
Chef solo es una parte de Chef client, así que tendremos que instalar chef client e indicarle que no tenemos chef Server 😉
Lo primero es descargarnos el instalador de Windows (http://opscode.com/chef/install.msi) e instalarlo.
También necesitaremos tener instalados git y github para Windows. Nos tenemos que preocuparnos ya que con solo instalar http://windows.github.com/ lo tendremos todo.
Una de los quebraderos de cabeza de chef es la versión de Ruby, como el instalador trae consigo una versión de Ruby, nos ahorramos mucho trabajo al no tener que instalar Ruby en Windows.
Es una instalación normal. Todo se instala en C:/opscode y C:/chef
Una vez que esté terminada la instalación podemos chequear que se ha instalado. Con:
chef-solo –version
Como vamos a ser unos grandes CHEF de recetas, necesitamos un buen cuchillo knife es la herramienta con la que crear recetas, usuarios, …
También podemos utilizar chef-shell una herramienta indispensable para manejar chef fácilmente.
Así que ya lo tenemos todo instalada, por eso vamos manos a la obra.
Configurando Chef-solo
Si en la línea de comandos escribimos “chef-solo” nos aparecerán mensajes indicándonos que Chef solo no está configurado.
No tenemos que preocuparnos, esto solo significa que chef no encuentra el directorio de las recetas (cookbooks).
Creando un repositorio para chef
Un repositorio para chef no es más que una carpeta en la que tener nuestras recetas. Lo más sencillo es que descargamos el repositorio de opscode desde github https://github.com/opscode/chef-repo y lo descomprimimos en una carpeta. Por ejemplo en C:\Desarrollo\chef-repo
Ya tenemos la estructura de carpetas creada.
Configurando knife
Para ser unos buenos cocineros necesitamos un cuchillo, con knife haremos las recetas, por ejemplo para desarrollar aplicaciones en php normalmente necesitamos apache2, php y mysql, pero antes tenemos que configurar knife.
Creamos una nueva carpeta en chef-repo llamada “.chef” dentro de ella un archivo llamado “knife.rb” con:
current_dir = File.dirname(__FILE__)
log_level :debug
log_location $stdout
node_name "jesuslc-admin"
client_key "#{File.dirname(current_dir)}/jesuslc-admin.pem"
chef_server_url "http://localhost:4000"
cache_type 'Memory'
cache_options( :path => "#{ENV['HOME']}/.chef/checksums" )
cookbook_path ["#{current_dir}/../cookbooks","#{current_dir}/../site-cookbooks"]
Podéis descargarlo aquí
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
current_dir = File.dirname(__FILE__) | |
log_level :debug | |
log_location $stdout | |
node_name "jesuslc-admin" | |
client_key "#{File.dirname(current_dir)}/jesuslc-admin.pem" | |
chef_server_url "http://localhost:4000" | |
cache_type 'Memory' | |
cache_options( :path => "#{ENV['HOME']}/.chef/checksums" ) | |
cookbook_path ["#{current_dir}/../cookbooks","#{current_dir}/../site-cookbooks"] |
Descargando cookbooks
Vamos allá, como ya he adelantado necesitamos recetas, lo mejor es utilizar las recetas ya creadas de opscode, aunque más adelante podremos crear nuestras propias recetas 😉
Para crear aplicaciones php lo primero que necesitamos es tener un servidor a pache y la mejor manera es descargarnos la receta de opscode. Así que dentro de cookbooks tecleamos:
Knife cookbook site download apache2
Con este comando descargamos la receta de “apache2”, ahora solo tenemos que descomprimir y listo.
Hacemos lo mismo para apt (un comando que nos ayudará a instalar)
Knife cookbook site download apt
Y para mysql:
knife cookbook site download mysql
Debemos descomprimir los cooksbooks y listo, ya tenemos todas las recetas separadas.
Antes de terminar tenemos que crear un archivo llamado web.json centro de chef-repo.
En este archivo tenemos que ir escribiendo las recetas que vayamos a utilizar. En nuestro caso:
{ "run_list": [ "recipe[apt]", "recipe[apache2]", "recipe[mysql]", "recipe[php]"] }
Ya tenemos todo listo, en un siguiente post veremos cómo unir Vagrant y Chef para crear entornos con los que poder desarrollar nuestras aplicaciones, probar nuevas apps, etc…