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
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
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
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
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 .
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 hacergit 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 hacergit 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 otrasgir 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
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.
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 Vagrantboxconfig.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.rbchef.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?
Hola Jesús no me funciona la comanda knife solo init .
FATAL: Cannot find sub command for: ‘solo init .’
Me gustaMe gusta
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 gustaMe gusta