====== Vagrant ====== Vagrant és una eina de codi lliure desenvolupada per HashiCorp per automatitzar la creació i gestió de màquines virtuals. La podriem classificar dins les eines de [[DevOps]] conegudes com a [[https://es.wikipedia.org/wiki/Infraestructura_como_c%C3%B3digo|Infraestructure as Code]]. Vagrant no és un virtualitzador, només automatitza tasques de forma programàtica, pel què necessita que tinguem instal·lat algun //provider// com VirtualBox o VMware. {{ vagrant.png?300 }} La web oficial és https://www.vagrantup.com/ Està pensada per poques màquines i per entorns de desenvolupament i test. Si el què volem és creació de moltes màquines per entorns de producció segurament el què necessitem son eines com Terraform. Vagrant és particularment útil quan necessitem recrear un entorn molts cops, ja sigui per testejar eines, configuracions, etc. i poder clarificar el típic cas de "en la meva màquina funciona". {{tag> #FpInfor #Ciber #CiberMp03 #Ceti #CetiMp03 #Asix Vagrant DevOps}} ===== Instal·lació ===== Les instruccions oficials les teniu aquí: https://www.vagrantup.com/downloads Però en Ubuntu sol estar als repositoris i s'instal·la fàcilment amb un clàssic $ sudo apt install vagrant Recordeu que Vagrant no virtualitza, sinó que automatitza tasques amb algun virtualitzador //provider//. Per tant, caldrà que tinguem instal·lat VirtualBox, VMware o similars. En GNU/Linux el més fàcil és instal·lar VirtualBox: $ sudo apt install virtualbox Es recomana utilitzar una màquina física Ubuntu 22.04 (LTS) amb * VirtualBox 7.0 (no és el de la versió dels repositoris de Ubuntu 22.04, cal anar a virtualbox.org) * Instal·lar Vagrant segons les [[https://developer.hashicorp.com/vagrant/downloads?ajs_aid=5466580f-2ad1-4fc6-812e-d32380b97335&product_intent=vagrant|indicacions de la web oficial vagrantup.com]], amb els seus propis repositoris APT. \\ ===== Definicions ===== * **Vagrantfile** : arxiu on es defineixen les VMs de les que volem automatizar la seva creació i configuració. * **box** : imatge de disc de VM per utilitzar inicialment en el nostre entorn. Podem trobar un catàleg a la [[https://app.vagrantup.com/boxes/search|Vagrant Cloud]]. Hi ha imatges oficials de distribucions de GNU/Linux clàssiques però també imatges binàries de gent que hi carrega la seva configuració particularitzada o d'altres SO com Windows o MacOS. \\ ===== Creant una VM ===== Cada "escenari" de VMs Vagrant necessitarà una carpeta on situar un arxiu d'inici ''Vagrantfile''. Creem una carpeta i inicialitzem un ''Vagrantfile'' amb la imatge ubuntu/focal64 : $ mkdir -p makines/makina1 $ cd makines/makina1 $ vagrant init ubuntu/jammy64 $ vagrant up Això hauria de ser prou per posar en marxa la màquina Ubuntu Focal Fossa dins el virtualitzador que tinguem a la nostra màquina //host//. Ens podem connectar a la màquina acabada de crear amb: $ vagrant ssh I ja podrem treballar sobre la nostra màquina :) Per fer un exemple ràpid, instal·larem Apache i visitarem la web creada: vagrant@ubuntu-focal $ sudo apt update vagrant@ubuntu-focal $ sudo apt install -y apache2 vagrant@ubuntu-focal $ ip address \\ ===== Xarxa ===== Amb la darrera instrucció podrem veure la IP de la màquina creada, que probablement sigui una 10.0.2.15. Si esteu fent servir VirtualBox, en la configuració per defecte la xarxa està en NAT, pel què no puc accedir a la màquina que acabo de crear. Per accedir a l'Apache que acabo de crear tinc diverses opcions, per exemple: * Configurar la xarxa en mode //bridge//. * Fent un //port forwarding// a la màquina //host//. ==== Port forwarding ==== Provarem el //port forwarding//, al Vagrant file ja ens surt un exemple. Sortim de la //shell// amb CTRL+D, i editem el ''Vagrantfile'' per a fer aquest canvi. Descomentem la línia: config.vm.network "forwarded_port", guest: 80, host: 8080 ==== Xarxa privada ==== També podríem configurar la interfície en modalitat //host-only network//, sol fer-se d'aquesta manera al ''Vagrantfile'': config.vm.network "private_network", ip: "192.168.33.110" Si el VirtualBox ens dona error al crear la xarxa, podem [[https://www.virtualbox.org/manual/ch06.html|editar la configuració de xarxa de VirtualBox]] per permetre les IPs de les VMs: * 0.0.0.0/0 ::/0 ==== Accedint els serveis ==== I ara reiniciem la màquina amb la nova configuració: $ vagrant reload Ara podem accedir a la web de la nova VM mitançant el //browser// de la màquina //host// a través del //forwarded port//: http://localhost:8080 O bé directament a la IP de la màquina si està en modalitat xarxa interna: http://192.168.33.110 I si voleu comprovar que realment és la nostra nova màquina, personalitzeu la //default page// d'Apache: vagrant@ubuntu-focal:~$ sudo -s root@ubuntu-focal:/home/vagrant# echo "

Maquina vagrant

" > /var/www/html/index.html Revisiteu la pàgina i... Voilà! Resum de comandes utilitzades: vagrant init vagrant up vagrant ssh vagrant reload \\ ===== Exercicis ===== ==== Exercici 1 ==== Investiga com utilitzar aquestes comandes bàsiques: vagrant halt vagrant suspend vagrant resume vagrant destroy ==== Exercici 2 ==== Cerca informació per configurar: - El //hostname// de la màquina virtualitzada (anomena-la, per exemple, "zeus"). - Configurar un terminal de xarxa en mode //bridge//. - Fer un script que automatitzi la instal·lació de Docker en la nova màquina creada. - Connectar-te via SSH sense fer ''vagrant ssh'' (la info de connexió es mostra amb ''vagrant ssh-config''). ==== Exercici 3 ==== Cerca informació del //provider// VirtualBox i modifica el ''Vagrantfile'' adequadament per: - Eliminar la interfície gràfica. - Canviar el nom de la màquina dins del VirtualBox (que surti un nom sense números o codis). - Configurar la VM perquè disposi de 2 CPUs. - Augmentar la RAM a 2048 MB. ==== Exercici 4 ==== Fes un Vagrantfile que crei una màquina amb les següents característiques: - Debian darrera versió. - Que tingui com a //hostname// el teu nom i també com a nom de màquina en el VirtualBox. - Amb un Apache i PHP preinstal·lat. - Que redirigeixi el port 80 de la web d'Apache al port 9090 de la màquina //host//. - Amb una pàgina per defecte en PHP amb el missatge "El servidor de " i que ens mostri el ''phpinfo();'' - Amb el mòdul //userdir// d'[[apache2 en debian ubuntu|Apache]] activat. - Amb un usuari "manolo" creat. - Que l'usuari "manolo" tingui una web pròpia accessible per //userdir// que mostri "Hola soc el Manolo" i el ''phpinfo();''