Trädvy Permalänk
Medlem
Plats
stockholm
Registrerad
Okt 2007

Vad är Vagrant?

Jag tycker denna forumdelen inte riktigt uppnår sin potential, och tänkte göra mitt för att åtgärda detta genom att prata lite om ett häftigt verktyg jag använder både i jobbet och privat. Om detta leder till någon kul diskussion så kanske detta kan bli till något återkommande, att man beskriver användningsområden för användbara Linux-prylar.

Vagrant är ett verktyg för att hantera virtuella maskiner. Det är extremt smidigt för att snabbt få igång en liten (eller stor) labbmiljö man kan meka med. Om man skulle göra något dumt går det lika snabbt att skrota allt och börja på ny kula.

Hur använder man då vagrant? Jo, det första man behöver göra är att installera det, detta görs med fördel med valfri pakethanterare. Men jag tror många här kör Ubuntu eller någon annan debian-baserad dist så det kommandot kommer här:

sudo apt-get install vagrant

Sedan behöver man en VM-leverantör, detta kan vara t.ex. VM-ware, Virtualbox eller till och med docker, som vagrant ska använda sig av. Eftersom VirtualBox är väldigt vanligt att man använder till detta och jag tror VM-ware kostar pengar så kommer jag i detta exemplet använda mig av VirtualBox, så vi installerar det också:

sudo apt-get install vagrant sudo apt-get install virtualbox-dkms

Nu när allt är installerat är det dags att sätta upp en virtuell maskin.

mkdir vagrant-projekt # Vi börjar med att skapa upp en mapp för vårt lilla projekt cd vagrant-projekt # Sedan går vi in i mappen vagrant init bento/ubuntu-16.04 # Vi initierar en maskin med Ubuntu 16.04 vagrant up # Vi sätter igång maskinen

Då var det klart! Nu kommer vagrant hämta ner snurra igång en maskin med Ubuntu 16.04. Du kan nu logga in på maskinen genom att köra kommandot:

vagrant ssh # Detta ansluter med ssh till den virtuella maskinen du

(vill du lämna den virtuella maskinen så kan det göras med CTRL+d eller kommandot exit, precis som vilken ssh-session som helst)
Vi gör en liten djupdykning i vad som faktiskt hände i initieringssteget. Det skapades en fil i din mapp som heter Vagrantfile. Denna fil beskriver hur maskinen ska konfigureras.

Vagrantfile
I denna fil så hamnar t.ex. vilket typ av "box" (ord för typ "förpackad maskin", i detta fallet Bentos Ubuntu 16.04 box) det ska vara. Anledningen till att vi valde just denna box är att Ubuntu 16.04 är i skrivande stund senaste LTS releasen av Ubuntu och att Hashicorp (de som gör Vagrant) brukar rekommendera Bentos opensourceboxar.

Om vi öppnar Vagrantfile i valfri text-editor så finns det många utkommenterade konfigurationsrader. Dessa beskriver bl.a. hur man delar en mapp från sin lokala maskin med den virtuella:

config.vm.synced_folder "../data", "/vagrant_data"

Detta skulle alltså dela mappen data, som ligger en nivå upp, med den virtuella maskinen som skulle se den som /vagrant_data. Detta kan vara bra i många situationer, men t.ex. när man vill ta ut en konfigurationsfil ur den virtuella maskinen så kan man lägga den i /vagrant_data så kan du hitta den i data-mappen på din lokala maskin.

Det finns mängder med olika inställningar man kan göra i Vagrantfile, och jag kommer verkligen inte gå igenom alla, men en häftig grej vi snabbt kan beröra är hur man sätter upp flera virtuella maskiner i samma fil:
Denna kod ska vara mellan Vagrant.configure("2") do |config|
och end

config.vm.define :vm1 do |vm1| # Här skulle vi kunna köra maskinspecifika kommandon om vi vill end config.vm.define :vm2 do |vm2| # Här skulle vi kunna köra maskinspecifika kommandon om vi vill end

Ovan sätter vi upp vm1 och vm2, men eftersom Vagrantfile är skriven i Ruby kan vi också göra flera maskiner med en loop:

(1..3).each do |i| config.vm.define "vm-#{i}" do |vm| # Här skulle vi kunna köra maskinspecifika kommandon om vi vill end end

När man har flera maskiner kan man t.ex. skapa ett privat nätverk mellan dem, testa att hosta olika tjänster på dem och testa system som kommunicerar med varann. Man ansluter till en specifik maskin med

vagrant ssh maskinens namn

Stänga av och förstöra de virtuella maskinerna
När man lekt färdigt och inte vill att de virtuella maskinerna ska hålla på och ta kraft så kan man stänga ner dem med

vagrant halt

Vill man helt börja om på nytt och ta bort den virtuella maskinen (notera att Vagrantfile finns kvar) så kör man

vagrant destroy

eller om maskinen körs:

vagrant destroy -f

Användningsområden
Vad har jag använt detta till då? Jo, det är ett så smidigt sätt att sätta upp en testmiljö på så jag använder det i princip till alla projekt jag har. Nu senast skulle jag sätta upp min media-server och då gjorde jag ett ansible-script som deployar ut alla de olika tjänsterna och istället för att testa på min körande server så riktade jag scriptet mot en virtuell maskin. På så sätt kunde jag enkelt se till att allting fungerade på en gång på en helt ren maskin och behövde inte hålla på och få massa "skräp" i den verkliga miljön. Man behöver inte återställa något manuellt till ursprungstillståndet utan man kan bara köra en vagrant destroy följt av en vagrant up så är allt som nytt igen.

Trädvy Permalänk
Medlem
Plats
stockholm
Registrerad
Okt 2007

Detta kanske blev en lite för basic nivå, men jag visste inte riktigt vilken nivå som skulle uppskattas. Om intresse finns kan vi ju gå in lite mer på djupet i vagrant eller något annat kul.

Trädvy Permalänk
Hedersmedlem
Plats
Norrland
Registrerad
Jan 2002

Nu är jag inte Linux-användare i dagsläget men gillar att hantera virtuella maskiner och det låter som ett intressant verktyg som nog måste provas när jag får möjlighet.

Jag hade gärna sett något sådant för Windows med och då specifikt snabbt få igång en virtualiserad Windows-miljö.

Main: Corsair 350D, Ryzen 1700, 32GB RAM, 4,5TB SSD+HDD, GTX 1070 Phoenix GS, XB271HU, U2713HM, HP ZR24w
Spel: R5 Blackout, 6700K, 32GB RAM, 2TB SSD, 1080 Ti Phoenix GS, X34A + Oculus Rift
"HTPC": Ncase M1, 2700K, 16GB RAM, 0,75TB SSD lagring, GTX 1070 Mini, TV
Lenovo 700-15ISK: 6300HQ, 16GB RAM, 2,25TB lagring, 950m 4GB
Switch, Wii U, 3DS, GBA, PS4, PS3, PS2, PSP, PS Vita, Xbox One, Dreamcast

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Aug 2007
Skrivet av anders190:

Nu är jag inte Linux-användare i dagsläget men gillar att hantera virtuella maskiner och det låter som ett intressant verktyg som nog måste provas när jag får möjlighet.

Jag hade gärna sett något sådant för Windows med och då specifikt snabbt få igång en virtualiserad Windows-miljö.

Teoretiskt möjligt på Win10, Kör du 'Bash on Ubuntu on Win10', windows inbyggda ubuntu terminal, så finns vagrant att ladda ner från vanliga repot. Om du har virtualbox på din win10 dator antar jag att du kan använda vagrant för att styra. Även virtualbox finns som paket i vanliga repot, så.. :=)

https://minfil.org/d99dZcb8be/win10.png

Ryzen 1700x @ Corsair 16gb 3200mhz lpx @ 512gb M2 pcie @ Gigabyte 7950 @ Msi x370 plus @ Evga 650 80+gold modulärt @ Fractal r5 @ Corsair hydro 110i @ Benq 144hz 1920-1080 24tum
i5 4670k @ Asus z-87a @ Corsair vx450 @ Corsair 16gb 1600mhz @ Fractal r3 @ 256gb Kingston
c2d e4400 @ 4gb noname @ 10tb+ @ noname chassi @ 128gb Kingston ssd

Trädvy Permalänk
Medlem
Registrerad
Jan 2007

Kör själv Vagrant i Windows 10 genom att tanka ner det från download-sidan, precis som ovan tipsade om.
Funkar prima!