Primeros pasos con Chef-solo y Vagrant

Ya hemos visto como organizar nuestro repositorio de recetas, así que en este post nos manchados para instalar Virtualbox, Vagrant, Chef y todo lo necesario para tener un entorno de creación de máquinas automatizado. Con esto tendremos entornos autmáticos y podremos dejar de oír eso de “en mi ordenador funciona ;)”

Instalando Virtualbox

Lo primero de todo es tener Virtualbox, para poder ejecutar las máquinas virtuales, también podemos utilizar VMWare o Hyper-V.

Lo primero descargarnos VirtualBox de aquí https://www.virtualbox.org/wiki/Downloads e instalarlo, yo he utilizado Virtualbox 4.3.8

virtualbox

Instalando Ruby 1.9.3 en Mac con RVM

Ya hemos visto como instalar RVM en otro post, así que no vamos a profundizar en esto. Tenemos que una versión de Ruby >2.0, así que vamos a instalar con la ayuda de RVM Ruby 1.9.3 así que abriendo un terminal en Mac escribimos:

$ rvm install ruby-1.9.3

$rvm use ruby-1.9.3

$ruby -v

Ruby 1.9.3

Instalando Vagrant

Instalar Vagrant es una tarea sencilla, solo tenemos que ir a su web oficial http://vagrantup.com/ y descargarnos la ultima versión, en nuestro caso Vagrant 1.5.1

vagrant

Instalando plugins a Vagrant

Existen muchas maneras de unir a Vagrant y chef-solo, la más sencilla es instalar plugins para vagrant. Ahora vamos a instalar una serie de plugins que nos ayudarán a la hora de crear recetas, así que abrimos un terminal (nos aseguramos de estar utilizando ruby 1.9.3 con ruby -v) y escribimos:

vagrant plugin install vagrant-omnibus
vagrant plugin install vagrant-librarian-chef
vagrant plugin install vagrant-hostsupdater

Listo, para comprobar que está todo correctamente instalado solo tenemos que hacer vagrant plugin list veremos todos los plugins instalados en Vagrant. Si queréis ver los plugins disponibles en Vagrant aquí una recopilación https://github.com/mitchellh/vagrant/wiki/Available-Vagrant-Plugins

EL plugin Vagrant Omnibus nos ayuda a utilizar Vagrant junto a Chef, el segundo plugin nos ayuda a tener organizadas las recetas y el último gestiona los hosts de Apache.

Instalando chef-solo

Para manejar las recetas existen multitud de herramientas como Puppet, Ansible, Salt o chef, nosotros hemos optado por utilizar Chef sobre todo por la gran cantidad de recetas disponibles http://community.opscode.com.Eexisten recetas para instalar en una maquina virtual cualquier cosa, y además en Github hay multitud de personalizaciones. Así que manos a la obra.

Para instalar chef-solo solo tenemos que escribir en un terminal:

curl -L https://www.opscode.com/chef/install.sh | sudo bash

Ya tenemos todo preparado para comenzar Así que vamos a crear nuestra primera máquina virtual. Automáticamente con la ayuda de chef-solo instalaremos todo el software que queramos y lo mejor de todo que podemos eliminar la maquina y volver a crearla desde 0 tantas veces como queramos.

Creando nuestra entorno automático

Para crear nuestro entorno vamos a dar una serie de pasos, lo primero será elegir que sistema operativo queremos, nosotros vamos a optar por utilizar Ubuntu precise64. No debemos preocuparnos de momento por como hacer una box para Vagrant, ya que por ejemplo aquí http://www.vagrantbox.es tenemos una gran lista.
Cuando tengamos la box lo que haremos será añadirla a Vagrant (esto solo será necesario una vez)
Después vamos a crear nuestro repositorio chef-solo utilizando librarian.
Una vez tengamos eso vamos a crear nuestra primera máquina utilizando Vagrant y Chef-solo, pero no debemos asustarnos, en un primer momento solo utilizaremos cookbooks ya “cocinados” que nos ayudaran a instalar una serie de paquetes automatizando todo el proceso de instalación.

Añadiendo una box a Vagrant

Lo primero es añadir la box Vagrant, para ello entramos en http://www.vagrantbox.es y elegimos una de las distribuciones que más nos gusten, por ejemplo precise64. Para añadir la box a Vagrant abrimos un terminal y escribimos

vagrant box add precise64 http://files.vagrantup.com/precise64.box

Add box

Ya tenemos nuestra máquina añadida ahora tenemos que crear el cookbook.

Creando nuestro repositorio de Chef-solo

Teniendo ya librarian instalado es muy fácil crear un repositorio, solo tenemos que ir a la carpeta donde queramos crear el repositorio, en nuestro caso “my-chef” y escribir:

knife solo init .

knife

Ya tenemos creada la estructura de carpetas, en cookbooks tendremos las recetas personalizadas y en nodes nuestras máquinas, una por carpeta así podremos automatizar la tarea de crear máquinas de una manera simple y fácil.

Creando nuestro nodo con Vagrant y Chef-solo

Ya tenemos todo listo para empezar a trabajar, ahora vamos a crear una Maquina virtual en la que todo el software necesario en la misma se instala de manera automática, así que vamos a crear nuestro primer nodo 😉

Lo más sencillo en un primer momento es que utilicemos recetas y máquinas ya creadas, para más adelante poder personalizar las nuestras propias.

Algunas plantillas de máquinas interesantes

Aquí dejamos una pequeña recopilación de plantillas interesantes para poder empezar con Vagrant y chef-solo.

  • automagic-wordpress –>
    Con esta plantilla conseguiremos tener un WordPress instalado en un santiamén, para ellos solo tenemos que abrir un terminal, ir a la carpeta nodes y hacer git clone https://github.com/X0nic/automagic-wordpress.git esto nos descargará el repositorio de Github y listo ya tenemos una plantilla lista para utilizar.
  • r8-vagrant-lamp –>
    Con esta plantilla tendremos una máquina con un montón de aplicaciones instaladas como WordPress, Drupal, Magento,… aquí toda la información. Para descargarla solo tenemos que hacer git clone https://github.com/r8/vagrant-lamp.git
  • vagrant-lamp-development –>
    Esta plantilla nos provee de una máquina lista para desarrollar cualquier aplicaciones LAMP. Para descargarla solo tenemos que proceder de manera similar a las otras gir clone https://github.com/onema/vagrant-lamp-development.git y listo.

Utilizando una de las plantillas

En este caso vamos a utilizar la plantilla automagic-wordpress con la que levantaremos la máquina y podremos ir aprendiendo como utilizar Vagrant y Chef-solo.

Cabe recordar que cada una de las máquinas tiene unas instrucciones de instalación.

Con un terminal vamos dentro de la carpeta automagic-wordpress que descargamos antes de Github hacemos:

librarian-chef install
vagrant up

vagrant up

Con el primer comando nos descargamos de chef todos los cookbooks necesarios como apache, apt, mysql,… con vagrant up haremos que Vagrant empiece a trabajar. se creará una maquina virtual con Ubuntu.

Finish

Algunos comandos útiles para trabajar con Vagrant

Cuando Vagrant ha terminado podemos acceder a la máquina con un simple vagrant ssh.

Si necesitamos parar la máquina por alguna razón parar la máquina virtual podemos hacer vagrant suspend o vagrant halt

De la misma manera, si nos cansamos de la máquina y queremos eliminar la máquina virtual creada con Vagrant solo tenemos que escribir vagrant destroy

Consejo: Muchas veces no sabemos si la máquina Vagrant está funcionando o nó, la manera de ver el estado de la máquina es utilizando vagrant status

Entiendo un Vagrantfile

Para poder configurar una maquina virtual con Vagrant, el archivo más importante es el Vagrantfile, existe un Vagrantfile por cada máquina que tengamos, en él se detalla toda la configuración de la máquina virtual y de las recetar que aprovisionarán la máquina.

Por ejemplo aquí tenemos el Vagrantfile de la maquina automagic-wordpress

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant::Config.run do |config|
  # config.vm.box = "lucid64"
  config.vm.box = "precise64"
  config.vm.box_url = "http://files.vagrantup.com/prescise64.box"
  config.vm.network :hostonly, "33.33.33.10"
  config.vm.forward_port 80, 8080
  config.vm.forward_port 81, 8081

  config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = ["cookbooks"]
    chef.provisioning_path = "/var/chef/cache" #set this, otherwise vagrant will delete chef cache on reboot
    chef.log_level = "debug"

    chef.add_recipe "apt"
    chef.add_recipe "build-essential"
    chef.add_recipe "vim"
    chef.add_recipe "user"
    chef.add_recipe "git"
    chef.add_recipe "wordpress"

    chef.json.merge!(
      "mysql" => {
        "server_root_password" => 'GFMHP9mPcvL2tbDsQE1v', #set a default password for so it works with chef-solo
        "allow_remote_root"    => true
      },
      "wordpress" => {
        "version" => "3.4.2",
        "checksum" => "e69acc6b6fdbffc166fd96f2264d578b4944ef3e451eb9650e8ca795b665eeb0",
        "db" => {
          "database" => "wordpress",
          "user"     => "wordpress",
          "password" => "wordpress"
        }
      }
    )
  end
end
  • config.vm.box_url => aquí pondremos la URL de la Vagrantbox
  • config.vm.forward_port 80, 8080 => Con esta instrucion indicamos que queremos mapar el puerto 80 de la máquina VIrtual en el puerto 8080 de la nuestra, así conseguiremos que desde nuestro navegador entrando en http://locahost:8080 estemos accediendo al puerto 80 de la maquina y por tanto podremos ver que se está ejecutando en su Apache. (Veremos la instalación de WordPress ;))
  • chef.cookbooks_path = ["cookbooks"] => Aquí indicamos la ruta donde se encuentran las recetas, al haber utilizad librarian, estas estarán en la carpeta cookbooks.
  • chef.log_level = "debug" => Ponemos el nivel de log ade chef a “debug” así si pasa ocurre algun error tendremos más información.
  • chef.add_recipe "apt" => Le indicamos a chef que queremos utilizar la receta para instalar apt, por defecto instalará al directorio apt/recipes/default.rb
  • chef.json.merge!(... => con chef.jsona.merge le indicamos a Vagrant que añada a los JSON que haya que se añada el que viene despues. En este JSON indicamos parámetros de configuración o contraseñas que queremos aplicar.

Conclusiones

Con esto ya podemos crear nuestras propias recetas, aunque existen aplicaciones como http://getprotobox.com, http://rove.io o http://puphpet.com/ podemos crear maquinas provisionadas con todo lo que necesitemos.
¿Qué preferiís para aprovisionar máquinas puppet, Chef, ansible, Salt? ¿Como organizáis las recetas? ¿Y las contraseñas de los servidores?

Anuncios

5 comentarios en “Primeros pasos con Chef-solo y Vagrant

  1. Pingback: Jesús L.C.
    1. Así a bote pronto no se que pasa, pero apostaría a que son las versiones de las gem de Ruby. Al menos a mi las distintas versiones de Ruby y las distintas gem me dio algunos dólares de cabeza. Al final lo solucione utilizando rvm y paciencia 🙂

      Me gusta

Comenta la entrada

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s