Sådan konfigureres et lokalt Linux-miljø med Vagrant

Oprindeligt postet på DigitalShore.io den 12. maj 2016

Som udviklere og ingeniører stræber vi ofte efter minimalisme og modularitet. Dette gælder netop den kode, vi skriver og bruger til at skabe vores arbejde. Imidlertid kan minimalisme og modularitet ofte overses når det kommer til vores lokale udviklingsmaskiner. Over tid kan alle de forskellige programmer, afhængigheder og værktøjer, der er nødvendige for at afslutte vores job, hurtigt vokse i størrelse og spiral til forfalskning; modstridende versioner af de samme værktøjer eller programmer og uendelige OS-opdateringer kan blive ægte pligter at omgå, når det er tid til blot at afslutte vores arbejde - i strid med de to principper, vi til enhver tid bør stræbe efter.

I dette indlæg tilbyder jeg en introduktion fra top til bund i virtuelle maskiners verden, og hvordan de i vid udstrækning kan forbedre din udviklingsarbejdsgang mens jeg afhjælper de fleste af de bekymringer, der er anført ovenfor. Gennem brug af virtuelle maskiner åbner du muligheder for at udforske nye teknologier og teknikker uden risiko for din udviklingsmaskine - alt sammen mens du overholder en minimalistisk og modulær tankegang.

Hvorfor bruge virtuelle maskiner?

Dette er et spørgsmål, som jeg har kæmpet for i flere måneder nu. Og det er faktisk et vidunderligt spørgsmål. For at begynde at formulere et svar besluttede jeg, at jeg skulle tage en opgørelse over alt, der er installeret på min Mac:

  • Xcode (vejer ca. 10 GB når den er installeret)
  • Xcode kommandolinjeværktøjer
  • Git (OS X version; normalt bag og forældet)
  • Ruby (OS X-version; normalt bag og forældet)
  • Flere Ruby Gems
  • Apache (OS X-version; bag, forældet og konfigureret anderledes)
  • PHP (OS X version; normalt bag og forældet)
  • node.js
  • NPM og flere globalt installerede moduler
  • Heroku værktøjsbælte
  • MongoDB og muligvis enhver anden database jeg muligvis har brug for

Med et hurtigt blik kan du se, hvor uhåndterbart ovenstående kan vokse med tiden, især med Apples årlige OS X-frigivelseskadens. Lad os heller ikke glemme, at OS X i sig selv er en interessant distribution af Unix, og tingene er ikke altid, som de ser ud, mens de graver sig ind under hætten. Programmer, sprog og værktøjer opfører sig lidt anderledes her end i forhold til deres traditionelle Linux-kolleger, hvilket fører dig til risikoen for utilsigtet at ødelægge hele dit system.

Der skal helt sikkert være en bedre løsning for at gøre alt dette meget mere håndterbart, modulopbygget og sikrere.

Homebrew… måske?

Men Homebrew kan hjælpe med ovennævnte dilemma - siger du måske. Og for det meste er det sandt. Hvis du virkelig leder efter en modulopbygget tilgang, der ikke forstyrrer din lokale maskine og er ret sandkasse, vil en virtuel maskine være det bedste valg. Derudover vil en virtuel maskine være bedre egnet til fuldt ud at efterligne et produktionsmiljø mere end din værtsmaskine.

Kom godt i gang med VirtualBox

Jeg begynder min rejse med VirtualBox, arbejder mig igennem en temmelig manuel proces, der indebærer at downloade Ubuntu Server 14.04 LTS-diskbillede og navigere gennem kryptiske Ubuntu-installationsprompt.

Efter ca. 10 minutters værd af downloads og installationsprompt, er jeg i gang med en kopi af Ubuntu Linux på min Mac.

Hvis jeg nu vil oprette en anden VM, skal jeg bare gentage denne proces. Hver. Enkelt. Tid.

Vent, denne proces suger helt!

Vent et øjeblik, timeout. Denne proces suger virkelig! Ja, det er slags modulopbygget. Slags minimalistisk. Men hvis jeg vil oprette en anden virtuel maskine, bliver jeg bare nødt til at sidde igennem hele denne proces igen. Og igen. Og igen.

Jeg har to greb med ovenstående. For det første er det ikke meget TØRR. Og for det andet, i denne aktuelle dag og alder med øjeblikkelig tilfredsstillelse, hvem i verden ønsker at sidde gennem en kryptisk Linux-installationsskærm over en virtuel maskine, hver gang vi ønsker at skabe et nyt Linux-miljø? Hvor er min auto-magiske løsning, der netop indstiller så mange Linux-virtuelle maskiner til mig, som jeg vil?

Nå, ligesom en drivende vagabond, det er her Vagrant kommer ind.

Indtast Vagrant

Vagrant er et værktøj til at opbygge komplette udviklingsmiljøer. Med en letanvendelig arbejdsgang og fokus på automatisering, sænker Vagrant udviklingsmiljøets opsætningstid, øger udviklings- / produktionsparitet og får "værker på min maskine" til at undskylde en relikvie fra fortiden.

Den grundlæggende idé omkring Vagrant er at oprette et bibliotek på din lokale maskine, der fungerer som et "hjem" for en speciel Vagrantfile (denne bestemte fil har ingen udvidelse). Vagrantfile er alle Ruby og accepterer et antal parametre, der hjælper med at konfigurere og levere din Vagrantbox til nogle hurtige, øjeblikkelige glæder, som vi alle er vant til her i det 21. århundrede.

Det er værd at bemærke, at Vagrant handler direkte med VirtualBox men også fungerer med andre virtualiseringsprogrammer. For mig holder jeg mere end sandsynligt med VirtualBox, da det er gratis. Og gratis er generelt godt i min bog.

Start med VirtualBox og Vagrant

Efter at have indset præcis, hvordan manuel, kedelig og bare tidskrævende VirtualBox-kun-tilgang kan blive, begyndte jeg at bruge lidt tid på at lære detaljerne i Vagrant, og hvordan det i høj grad kan hjælpe med den generelle virtuelle maskineoprettelse, -provision og -styring behandle.

Jeg besluttede, at min første kniv ved at oprette en Vagrant administreret virtuel maskine ville være at skabe en, der spejler mit nuværende produktionsmiljø for en af ​​mine blogs.

Nedenfor er den generelle proces, som jeg har vedtaget efter at have lært de grundlæggende elementer og gennemgået en vis prøve og fejl. Følg disse trin, rediger alle nødvendige oplysninger, der er specifikke for dine individuelle behov, og du skal være i gang med Vagrant på cirka 10 minutter eller mindre!

  1. Installer VirtualBox
  2. Installer Vagrant
  3. Opret en lokal mappe til Vagrant
  4. Opret en Vagrantfile i dit nyoprettede bibliotek
  5. Kør vagrant op og klargør din virtuelle maskine

Bemærk: trinene nedenfor er skitseret, som om prøven Vagrant-fil, der er inkluderet i dette indlæg, bruges i sin helhed - hvilket betyder, at alle filstier og konstanter, der henvises til i denne fil, også vil blive henvist til i instruktionerne. Udskift venligst efter behov.

1. Installer VirtualBox

For at få fat i den nyeste version af VirtualBox skal du gå videre til downloadsiden og vælge den version, der passer til dit operativsystem. Download og installer ved at følge anvisningerne, som du ville gøre for ethvert andet program. Og selvom min artikel hovedsageligt fokuserer på mine erfaringer med denne arbejdsgang på OS X, skal de samme principper og koncepter gælde for Windows. Når det er installeret, lad os bevæge os opmærksom på Vagrant.

Bemærk: Fra skrivningen blev VirtualBox 5.0.20 installeret.

2. Installer Vagrant

Nu hvor VirtualBox er installeret, lad os fokusere på at få Vagrant installeret på din maskine. Igen, gå over til deres downloadside og tag den version, der passer til dit operativsystem. Ligesom ovenfor, skal du downloade og installere ved at følge anvisningerne, som du ville gøre for ethvert andet program.

Bemærk: Fra skrivning var Vagrant 1.8.1 installeret.

3. Opret en lokal mappe til vagrant

Dette trin kommer ned på personlig præference for, hvor du vil beholde og administrere din Vagrantfile, samt tilbyde dig nogle kreative indstillinger omkring, hvordan og hvor du vil synkronisere filer og mapper mellem din vært og gæsteautomater.

Personligt finder jeg, at det er en let at huske og nem at administrere oplevelse at holde kataloger for hver Vagrant-forekomst i min lokale hjemmekatalog.

For eksempel har jeg oprettet et bibliotek med titlen "new-vm" i mit hjemmekatalog. Dette er den nøjagtige samme værdi for VM_NAME-konstanten, der findes i prøven Vagrantfile i trin 4. Derefter tilføjede jeg den specifikke Vagrantfile til denne VM inden for det bibliotek til levering.

Kort sagt udførte jeg følgende kommandoer i Terminal:

cd ~ / && mkdir new-vm
cd new-vm && touch Vagrantfile

Den første kommando ændres til mit hjemmekatalog og opretter derefter kataloget "ny-vm" i hjemmet. Den anden kommando ændres til det nyoprettede bibliotek og opretter derefter Vagrantfile i det nye bibliotek.

4. Opdater din Vagrantfile

Ved at følge instruktionerne fra trin 3 skal du nu have et unikt bibliotek og Vagrantfile til din virtuelle maskine i dit hjemmekatalog på din Mac. For eksempel har jeg nu:

~ / Ny-vm / Vagrantfile

Nu er det tid til at gennemgå prøven Vagrantfile nedenfor og foretage passende redigeringer til dine specifikke behov.

Prøve Vagrantfile

Det næste trin er at tilføje nogle instruktioner i din Vagrantfile for Vagrant, der skal udføres under den virtuelle maskintildelingsproces. For at hjælpe med at fremskynde denne proces og indstille en håndfuld af de typiske standardelementer er nedenfor et eksempel på Vagrantfile, der får dig til at konfigurere en Ubuntu Linux-udviklingsmiljø med Node.js og Git. Denne fil fungerer gennem:

  1. Indstilling af flere konstanter omkring Linux OS, mapper, brugere og netværk mellem vært / gæsteautomater
  2. Levering af en virtuel maskine gennem VirtualBox, med 1 CPU, 512 MB hukommelse og 40 GB lagerplads
  3. Installation af nyeste Git, Node 6.x, seneste npm og opdatering af Ubuntu

Prøve:

# kodning: utf-8
# - * - tilstand: rubin - * -
# vi: sæt ft = rubin:
# Boks / OS
VAGRANT_BOX = 'ubuntu / trusty64'
# Mindeværdigt navn til din
VM_NAME = 'new-vm'
# VM-bruger - 'vagrant' som standard
VM_USER = 'vagrant'
# Brugernavn på din Mac
MAC_USER = 'John'
# Værtsmappe, der skal synkroniseres
HOST_PATH = '/ Brugere /' + MAC_USER + '/' + VM_NAME
# Hvor synkroniseres til med gæst - 'vagrant' er standardbrugernavnet
GUEST_PATH = '/ home /' + VM_USER + '/' + VM_NAME
# # VM Port - fjerner dette fra for at bruge NAT i stedet for DHCP
# VM_PORT = 8080
Vagrant.configure (2) do | config |
  # Vagrant-kasse fra Hashicorp
  config.vm.box = VAGRANT_BOX
  
  # Faktisk maskinnavn
  config.vm.hostname = VM_NAME
  # Indstil VM-navn i Virtualbox
  config.vm.provider "virtualbox" do | v |
    v.name = VM_NAME
    v.mory = 2048
  ende
  #DHCP - kommenter dette, hvis du planlægger at bruge NAT i stedet
  config.vm.network "private_network", type: "dhcp"
  # # Videresendelse af havn - fjern dette med at bruge NAT i stedet for DHCP
  # config.vm.network "videresendt_port", gæst: 80, vært: VM_PORT
  # Synkroniser mappe
  config.vm.synced_folder HOST_PATH, GUEST_PATH
  # Deaktiver standard Vagrant-mappe, brug en unik sti pr. Projekt
  config.vm.synced_folder '.', '/ home /' + VM_USER + '', deaktiveret: sand
  # Installer Git, Node.js 6.x.x, seneste npm
  config.vm.provision "shell", inline: << - SHELL
    apt-get-opdatering
    apt-get install -y git
    krølle -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
    apt-get install -y nodejs
    apt-get install -y build-essential
    npm installation -g npm
    apt-get-opdatering
    apt-get upgrade -y
    apt-get autoremove -y
  SKAL
ende

Nu hvor du har gennemgået denne prøve Vagrantfile, er der to stier, du kan vælge at fortsætte:

A. Finjuster ovenstående prøve til dine behov

Foretag de nødvendige redigeringer, du måtte have brug for (f.eks. Redigering af filstier, brugernavn, VM-navn osv.), Og indsæt indholdet i din lokale Vagrantfile. Når du er færdig, skal du fortsætte til trin 5.

B. Brug i stedet en standardvagrantfil

Hvis du ikke kan lide ovenstående prøve og vil vælge den standard Vagrantfile, der leveres af Vagrant, kan du blot fjerne filen, vi havde oprettet i trin 3, og oprette en ny fil, der indeholder det minimale minimum for at give en virtuel maskine med Vagrant:

cd ~ / new-vm
rm -r Vagrantfile
vagrant init

5. “vagrant up” og levering af din virtuelle maskine

Med din Vagrantfile på plads er det tid til at levere din virtuelle maskine!

Åbn terminal og indtast følgende kommandoer:

cd ~ / new-vm
vagrant op

Under denne proces vil Vagrant downloade ubuntu / trusty64 direkte fra Hashicorps Atlas og derefter levere den virtuelle maskine som specificeret i din Vagrantfile. Afhængig af din internetforbindelse og computerhastighed bør det tage omkring 3 til 5 minutter at gennemføre processen. Når den virtuelle maskine er klargjort, kan du logge ind på din virtuelle maskine med følgende kommando:

vagrant ssh

Denne kommando sørger for at forbinde dig direkte til din VM via SSH. Det håndterer brugernavnet og adgangskoden - som som standard begge er vagrant / vagrant.

Ovenstående "vagrant up" og "vagrant ssh" vil mere end sandsynligt være de to de facto-kommandoer, du vil bruge til at initialisere og få adgang til din VM. Nedenfor er et par flere nyttige kommandoer, der kommer godt med:

Tænde og slukke for din virtuelle maskine

Nogle gange er vi nødt til at tænde, slukke, stoppe eller ødelægge vores Vagrant administrerede virtuelle maskiner, især efter genstart eller test af nye funktioner osv.

For at tænde din VM skal du navigere til biblioteket med din Vagrantfile:

vagrant op

For at sætte din VM på pause skal du navigere til biblioteket med din Vagrantfile:

vagrant ophæng

For at slå din VM fra skal du navigere til biblioteket med din Vagrantfile:

vagrant stop

For at ødelægge din VM skal du navigere til biblioteket med din Vagrantfile:

vagrant ødelægge

Dette er kun et par af de umiddelbare grundlæggende kommandoer, som du vil lære, mens du bruger Vagrant. For en meget mere dybdegående manual, kan du tjekke dokumenterne fra Vagrant.

Næste skridt

Du har gjort det! Nu, hvor du nemt kan oprette VM'ere ved hjælp af Vagrant og du nemt kan SSH direkte ind i din helt egen virtuelle maskine, der kører Ubuntu 14.04, er himlen grænsen! Gå videre og brug denne VM, ligesom du ville gøre for enhver anden virtuel Linux-maskine gennem en udbyder som Digital Ocean eller andre, der tilbyder VPS-tjenester.

Det bedste af alt er, at du nu er i stand til at skabe så mange VM'er, som dit system er i stand til at køre - åbne oversvømmelsesportene for vækst og udforskning med din nyligt vedtagne modulære og minimale tilgang!

Bliv kodning!

Nyd hvad du har læst?

Sørg for at lide og dele nedenfor, eller endda købe mig en kaffe me!

John Foderaro er en fanatisk JavaScript placeret i New Jersey.