vagrantAan de slag met zwerver


Opmerkingen

Vagrant een softwaretool die wordt gebruikt om virtuele ontwikkelomgevingen te maken en te configureren. Het werkt als wrapper over andere virtualisatiesoftware zoals VirtualBox of VMware. Vagrant zelf is een opdrachtregelprogramma.

Vagrant boxes worden geconfigureerd met behulp van speciale Vagrantfile config geschreven in Ruby maar kunnen extra configuratiescripts bevatten geschreven in bash, Chef of Puppet. Ontwikkelaars in een team kunnen de Vagrant-configuratiebestanden downloaden van een gemeenschappelijke bron en lokaal dezelfde ontwikkelomgeving opnieuw maken.

Handige links

versies

Versie Download changelog Publicatiedatum
1.8.5 Download changelog 2016/07/18
1.8.4 Download changelog 2016/06/13
1.8.3 Download changelog 2016/06/10
1.8.1 Download changelog 2015/12/24
1.8.0 Download changelog 2015/12/21
1.7.4 Download changelog 2015/07/17
1.7.3 Download changelog 2015/07/10
1.7.2 Download changelog 2015/01/06
1.7.1 Download changelog 2014/12/12
1.7.0 Download changelog 2014/12/10
1.6.5 Download changelog 2014/09/04
1.6.4 Download changelog 2014/09/02
1.6.3 Download changelog 2014/05/29
1.6.2 Download changelog 2014/05/12
1.6.1 Download changelog 2014/05/08
1.6.0 Download changelog 2014/05/06

Gemakkelijkste manier om een virtuele linux in slechts enkele minuten te hebben (in 3 stappen)

Stap 1.

Maak op uw my_project (Windows / Linux / OSX) een leeg dir my_project .

Stap 2.

Maak een bestand met de naam Vagrantfile met dit:

Vagrant.configure("2") do |config|
  config.vm.box = "gbarbieru/xenial" #An Ubuntu 16.04 based image
  config.vm.hostname = "my_project"
  config.vm.network :private_network, ip: "172.16.123.10"
end
 

Stap 3.

Start uw machine:

host$ vagrant up
host$ vagrant ssh
virtual$ cd /vagrant
 

Gedaan!


Opmerkingen:

  • Misschien wilt u een ander IP-adres toewijzen.
  • Als uw host Windows is, wilt u misschien ssh van putty . U kunt dit doen door ssh-ing naar hostnaam 127.0.0.1 en poort 2222 . Gebruikersnaam is vagrant en wachtwoord is vagrant .

Installatie voor Windows met VirtualBox en SSH-ondersteuning

Om Vagrant op het Windows-platform te gebruiken, moet u eerst virtualisatiesoftware en een ssh-opdrachtregelprogramma installeren. In dit voorbeeld wordt freeware VirtualBox en Cygwin gebruikt.

Installeer VirtualBox

Download de nieuwste VirtualBox-versie van de officiële downloadpagina en voer het gedownloade bestand uit. Merk op dat u tijdens de installatie tijdelijk de netwerkverbinding verliest. Waarschuwing: netwerkinterfaces

U moet Oracle ook extra stuurprogramma's laten installeren.

Installeer Cygwin

Download het van cygwin.com en voer de installatie uit totdat u de pagina "Pakketten selecteren" krijgt.

We hebben alleen ssh bin-s nodig van hier: Cygwin SSH-pakketten

Voeg Cygwin toe aan PATH

U moet ook de map C:\cygwin64\bin aan de omgevingsvariabele Windows PATH. Zodat u het ssh commando overal kunt oproepen.

Installeer Vagrant zelf

Download Vagrant van vagrantup.com en volg gewoon de installatiehandleiding om het te installeren. Hierna moet u uw computer opnieuw opstarten.

testen

Virtualisatietechnologie VTx / VTd moet zijn ingeschakeld. (U kunt dat vinden in het BIOS in de beveiligingsopties)

Om te testen of alles correct is geïnstalleerd, maakt u ergens op de harde schijf een lege map aan, opent u de opdrachtregel en gaat u naar de map die u zojuist hebt gemaakt:

cd c:/path/to/your/folder
 

voer vervolgens in

vagrant init hashicorp/precise64
vagrant up
 

Hiermee wordt de VirtualBox met Ubuntu 12.04 LTS 64-bits gemaakt en gestart. Gebruik de vagrant init hashicorp/precise32 32 om de 32-bits versie te starten. Als je nog een doos nodig hebt, kun je er meer vinden op de website van hashicorp .

De opdracht vagrant init maakt ook een Vagrantfile configuratiebestand in de huidige map. Nu kunt u het eenvoudig naar iemand anders verzenden en wanneer die persoon vagrant up oproept, vagrant up dezelfde exacte virtuele machine op zijn / haar pc gemaakt.

Om ssh te testen nadat deze twee opdrachten met succes zijn uitgevoerd, voert u deze opdracht in dezelfde map uit:

vagrant ssh
 

Als alles goed is verlopen, beland je in de virtuele machine die is ingelogd als de vagrant .

Verdere stappen

U kunt de VM stoppen met

vagrant halt
 

of verwijder het met

vagrant destroy
 

Meer vakken samen met de instructies voor het installeren ervan zijn te vinden op de pagina vagrantbox.es .

LAMP-project

In dit voorbeeld wordt een aangepaste LAMP-projectontwikkelingsomgeving gemaakt met Vagrant.

Allereerst moet u Virtual Box en Vagrant installeren.

Maak vervolgens een vagrant map in je home directory, open uw terminal en verander de huidige directory naar de nieuwe vagrant directory. vagrant init nu vagrant init . Er wordt een Vagrantfile bestand aangemaakt en ziet er als volgt uit:

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

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure(2) do |config|
  # The most common configuration options are documented and commented below.
  # For a complete reference, please see the online documentation at
  # https://docs.vagrantup.com.

  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://atlas.hashicorp.com/search.
  config.vm.box = "base"

  # Disable automatic box update checking. If you disable this, then
  # boxes will only be checked for updates when the user runs
  # `vagrant box outdated`. This is not recommended.
  # config.vm.box_check_update = false

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine. In the example below,
  # accessing "localhost:8080" will access port 80 on the guest machine.
  # config.vm.network "forwarded_port", guest: 80, host: 8080

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  # config.vm.network "private_network", ip: "192.168.33.10"

  # Create a public network, which generally matched to bridged network.
  # Bridged networks make the machine appear as another physical device on
  # your network.
  # config.vm.network "public_network"

  # Share an additional folder to the guest VM. The first argument is
  # the path on the host to the actual folder. The second argument is
  # the path on the guest to mount the folder. And the optional third
  # argument is a set of non-required options.
  # config.vm.synced_folder "../data", "/vagrant_data"

  # Provider-specific configuration so you can fine-tune various
  # backing providers for Vagrant. These expose provider-specific options.
  # Example for VirtualBox:
  #
  # config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
  #   vb.gui = true
  #
  #   # Customize the amount of memory on the VM:
  #   vb.memory = "1024"
  # end
  #
  # View the documentation for the provider you are using for more
  # information on available options.

  # Define a Vagrant Push strategy for pushing to Atlas. Other push strategies
  # such as FTP and Heroku are also available. See the documentation at
  # https://docs.vagrantup.com/v2/push/atlas.html for more information.
  # config.push.define "atlas" do |push|
  #   push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME"
  # end

  # Enable provisioning with a shell script. Additional provisioners such as
  # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
  # documentation for more information about their specific syntax and use.
  # config.vm.provision "shell", inline: <<-SHELL
  #   sudo apt-get update
  #   sudo apt-get install -y apache2
  # SHELL
end
 

Volgende regels toevoegen of verwijderen door het bovenstaande bestand te bewerken:

config.vm.box = "hashicorp/precise64"
config.vm.network :forwarded_port, guest: 80, host: 8080
config.vm.network :private_network, ip: "192.168.33.10"
config.ssh.forward_agent = true
if Vagrant::Util::Platform.windows?
  config.vm.synced_folder "./", "/vagrant"
else
  config.vm.synced_folder "./", "/vagrant", type: "nfs"
end
# https://stefanwrobel.com/how-to-make-vagrant-performance-not-suck
config.vm.provider "virtualbox" do |v|
  host = RbConfig::CONFIG['host_os']

  # Give VM 1/4 system memory & access to all cpu cores on the host
  if host =~ /darwin/
    cpus = `sysctl -n hw.ncpu`.to_i
    # sysctl returns Bytes and we need to convert to MB
    mem = `sysctl -n hw.memsize`.to_i / 1024 / 1024 / 4
  elsif host =~ /linux/
    cpus = `nproc`.to_i
    # meminfo shows KB and we need to convert to MB
    mem = `grep 'MemTotal' /proc/meminfo | sed -e 's/MemTotal://' -e 's/ kB//'`.to_i / 1024 / 4
  else # sorry Windows folks, I can't help you
    cpus = 2
    mem = 1024
  end

  v.customize ["modifyvm", :id, "--memory", mem]
  v.customize ["modifyvm", :id, "--cpus", cpus]
end
 

Bewerk uw hosts bestand voor het omleiden van uw gewenste domein naar de zwerver VM. Voor Linux waren dit /etc/hosts , voor Windows C:\Windows\System32\Drivers\etc\hosts ; en voeg deze regel toe:

192.168.33.10 vagrantServer.com
 

Natuurlijk kunt u vagrantServer.com vervangen door elke naam.

Nu is het tijd om het bootstrap.sh bestand te maken (in de vagrant map). Dit script wordt elke keer uitgevoerd dat de VM helemaal opnieuw wordt gegenereerd. Lees de opmerkingen aandachtig:

#!/usr/bin/env bash

# .ssh/authorized_keys (you will need to create a `.ssh` directory inside the `vagrant` one and add a file named `authorized_keys` with the public keys of the users who have access to the repository and may use this environment).
# You also will have to grant access to those public keys from the Github account, Bitbucket, or whatever you're using.
cat /vagrant/config/authorized_keys >> /home/vagrant/.ssh/authorized_keys
if ! [ -d /root/.ssh ]; then
  mkdir /root/.ssh
fi
cp /vagrant/config/authorized_keys /root/.ssh
chmod 600 /root/.ssh/authorized_keys

# Install packages
apt-get update
apt-get install -y python-software-properties
add-apt-repository ppa:ondrej/php5 -y
apt-get update
apt-get install -y curl nano apache2 php5 php5-mysql php5-curl php5-gd php5-intl php5-mcrypt git

# Apache2 run with user vagrant
APACHEUSR=`grep -c 'APACHE_RUN_USER=www-data' /etc/apache2/envvars`
APACHEGRP=`grep -c 'APACHE_RUN_GROUP=www-data' /etc/apache2/envvars`
if [ APACHEUSR ]; then
    sed -i 's/APACHE_RUN_USER=www-data/APACHE_RUN_USER=vagrant/' /etc/apache2/envvars
fi
if [ APACHEGRP ]; then
    sed -i 's/APACHE_RUN_GROUP=www-data/APACHE_RUN_GROUP=vagrant/' /etc/apache2/envvars
fi
sudo chown -R vagrant:www-data /var/lock/apache2

# Set user/password to mysql previously to installation
# Replace rootMysqlPassword with your desired MySQL root password
debconf-set-selections <<< 'mysql-server mysql-server/root_password password rootMysqlPassword'
debconf-set-selections <<< 'mysql-server mysql-server/root_password_again password rootMysqlPassword'

# Install mysql
apt-get update
apt-get install -y mysql-server mysql-client

# Link /vagrant (sync_folder) to apache directory (/var/www)
if ! [ -L /var/www ]; then
  rm -rf /var/www
  ln -fs /vagrant /var/www
fi

# Install composer
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

# Composer example. Uncoment to istall phpunit
#composer global require "phpunit/phpunit=3.7.*" --prefer-source

# Create mysql database (replace "vagrantDB" with any desired database name, and "rootMysqlPassword" with the password set above)
mysql -u root -prootMysqlPassword -v -e "CREATE USER 'developer'@'%' IDENTIFIED BY 'dev'; 
CREATE SCHEMA vagrantDB;
GRANT ALL ON vagrantDB TO 'developer'@'%';"

# Uncomment to set default database fixtures based on `/vagrant/config/vagrantDBFixtures.sql` file.
#mysql -u root -prootMysqlPassword -v vagrantDB < /vagrant/config/vagrantDBFixtures.sql

###################################################
################ THIS IS OPTIONAL #################
###################################################

# Install nodejs
curl -sL https://deb.nodesource.com/setup | sudo bash -
apt-get install -y nodejs

# Install npm packages
npm install -g npm
npm install -g bower
npm install -g forever
npm install -g gulp

# Set accepted license before install java
echo debconf shared/accepted-oracle-license-v1-1 select true | sudo debconf-set-selections
echo debconf shared/accepted-oracle-license-v1-1 seen true | sudo debconf-set-selections

# Install java7
apt-get install -y oracle-java7-installer oracle-java7-set-default

###################################################
################### END OPTIONAL ##################
###################################################

# Generate ssh key without passphrase
ssh-keygen -f /root/.ssh/id_rsa -t rsa -N ""

# Add bitbucket and github to known hosts
touch /root/.ssh/known_hosts
ssh-keyscan -H bitbucket.org >> /root/.ssh/known_hosts
ssh-keyscan -H github.com >> /root/.ssh/known_hosts

# Source: https://gist.github.com/winhamwr/7122947
# Sleep until we can successfully SSH into Bitbucket.
# Uses doublinng backoff while waiting 
# with_backoff() adapted from http://stackoverflow.com/a/8351489
# Retries a command a configurable number of times with backoff.
#
# The retry count is given by ATTEMPTS (default 5), the initial backoff
# timeout is given by TIMEOUT in seconds (default 1.)
#
# Successive backoffs double the timeout.
#generatedKey="`cat /root/.ssh/id_rsa.pub`"
echo -n "Generate a SSH key (https://help.github.com/articles/generating-ssh-keys/) 
and add it to your Bitbucket account (Profile -> SHH keys) to continue. "

with_backoff() {
  local max_attempts=${ATTEMPTS-5}
  local timeout=${TIMEOUT-1}
  local attempt=0
  local exitCode=0
 
  while [ $attempt -lt $max_attempts ]
  do
    set +e
    "$@"
    exitCode=$?
    set -e
 
    if [ $exitCode -eq 0 ]
    then
      break
    fi
 
    echo "Failure! Retrying in $timeout.." 1>&2
    sleep $timeout
    attempt=$(( attempt + 1 ))
    timeout=$(( timeout * 2 ))
  done
 
  if [ $exitCode -ne 0 ]
  then
    echo "You've failed me for the last time! ($@)" 1>&2
  fi
 
  return $exitCode
}
 
ATTEMPTS=${ATTEMPTS:-5}
 
export ATTEMPTS
with_backoff ssh -T git@bitbucket.org;

# Clone repositories (replace "yourProjectName" and "yourProjectRepository" with your project data)
cd /var/www
rm -rf yourProjectName/
git clone yourProjectRepository

# Add server names to /etc/hosts (replace "vagrantServer.com" with the domain set above)
echo -e '\n127.0.0.1       vagrantServer.com' >> /etc/hosts

# Enable apache modes
a2enmod rewrite

# Copy sites-available file (you need to add the Apache configuration file for the desired domain in `config/sites-available`. Replace "vagrantServer.conf" with the desired name)
cp /vagrant/config/sites-available/vagrantServer.conf /etc/apache2/sites-available/

# Remove html from document root
sed -i 's/\/var\/www\/html/\/var\/www/g' /etc/apache2/sites-available/*
service apache2 restart

# Enable sites (replace "vagrantServer.conf" with the above file name)
a2ensite vagrantServer.conf

# Install ruby, compass and sass (Optional)
apt-get install -y rubygems
gem install compass
npm install -g sass

# Pull the repo
cd /var/www/yourProjectName
git pull --all
 

Eenmaal ingecheckt en opgeslagen het bestand hierboven, gaat u naar uw terminal, wijzigt de huidige map naar de vagrant degene die je hebt gemaakt voordat en typ vagrant up . De VM wordt gemaakt en het boostrap-bestand wordt uitgevoerd vanuit de VM, zodat alle benodigde dingen worden gekopieerd / geïnstalleerd. Eenmaal voltooid, kunt u uw browser openen en naar vagrantServer.com (of een andere naam die u hem gaf) en zou u de inhoud moeten zien die wordt aangeboden door de vagrant VM.

U kunt ook uw projectbestanden bewerken via de map vagrant/yourProjectName en alle bestanden in de map vagrant worden gedeeld en gesynchroniseerd tussen uw host en de vagrant VM.

alle mappen synchroniseren

Om alle mappen in beide richtingen te synchroniseren, plaatst u dit in uw Vagrantfile

config.vm.synced_folder "my-project1", "/home/vagrant/my-project1"
 

mappen synchroniseren maar sommige mappen uitsluiten

Om alle mappen in beide richtingen te synchroniseren, voegt u dit in uw Vagrantfile in:

config.vm.synced_folder "my-project1", "/home/vagrant/my-project1", type: "rsync",
 :rsync__exclude => ['my-project1/mini_project2/target,my-project1/mini_project2/target,my-project1/mini_project3/target']
 

Alle doelmappen zijn uitgesloten van synchronisatie.
Synchronisatie gebeurt alleen op vagrant up en op vagrant reload .
Om elke wijziging van uw host naar gast te synchroniseren, moet u het volgende gebruiken:

vagrant rsync-auto
 

Upload Vagrant Box-afbeelding naar Amazon AWS AMI

Je hebt een lokaal zwervervak dat je wilt uploaden naar Amazon AWS. Eerst moet je om te creëren een .box bestand:

vagrant package --base my-virtual-machine

Deze stap kan enige tijd duren, afhankelijk van de grootte van uw afbeelding. Vervolgens moet u de .vmdk afbeelding uit het .box bestand halen:

gunzip -S .box package.box
tar xf package
 

Na deze stap zou u 4 nieuwe bestanden moeten hebben: package , box-disk1.vmdk , Vagrantfile en box.ovf . Nu om te uploaden naar AWS. Ervan uitgaande dat u een AWS-account hebt , maakt u een S3-bucket om de afbeelding op de servers van Amazon op te slaan. Je hebt Amazon's EC2 CLI nodig voor de volgende stap (omdat je dit voor zover ik weet niet via de console kunt doen):

ec2-import-instance box-disk1_1.vmdk -f VMDK -t t2.micro -a x86_64 -b <S3-bucket-name> -o $AWS_ACCESS_KEY -w $AWS_SECRET_KEY -p Linux

Dit resultaat van deze opdracht zou even moeten duren - het uploadt het grote afbeeldingsbestand naar S3, maar de opdracht zelf keert sneller terug. U kunt de voortgang van de import controleren met de opdracht ec2-describe-conversion-tasks .

Zodra dat is voltooid, ziet u een exemplaar van uw vak in de AWS-console. Mogelijk hebt u er echter geen toegang toe omdat het geen openbaar IP-adres heeft en / of er geen .pem bestand aan is gekoppeld. Dus de volgende stap is om een AMI te maken van het exemplaar. Om een AMI te maken, stopt u het exemplaar (niet beëindigen!) En klikt u met de rechtermuisknop op het exemplaar en gaat u naar Image -> Create Image . Dit zou ook een tijdje moeten duren. U kunt de voortgang controleren in de AMI-weergave van de console. Zodra het is voltooid, start u een exemplaar met behulp van de AMI die een .pem sleutelbestand .pem en dan kunt u ssh in en bent u klaar om te gaan.