Looking for vagrant Keywords? Try Ask4Keywords

vagrantErste Schritte mit Vagrant


Bemerkungen

Vagrant ein Softwaretool zum Erstellen und Konfigurieren von virtuellen Entwicklungsumgebungen. Es funktioniert als Wrapper für andere Virtualisierungssoftware wie VirtualBox oder VMware. Vagrant selbst ist ein Befehlszeilenprogramm.

Vagrant-Boxen werden mit einer speziellen Vagrantfile Konfiguration konfiguriert, die in Ruby geschrieben wurde, können jedoch zusätzliche Konfigurationsskripts enthalten, die in bash, Chef oder Puppet geschrieben sind. Entwickler in einem Team können die Vagrant-Konfigurationsdateien von einer gemeinsamen Quelle herunterladen und die gleiche Entwicklungsumgebung lokal neu erstellen.

Nützliche Links

Versionen

Ausführung Herunterladen Änderungsprotokoll Veröffentlichungsdatum
1.8.5 Herunterladen Änderungsprotokoll 2016-07-18
1.8.4 Herunterladen Änderungsprotokoll 2016-06-13
1.8.3 Herunterladen Änderungsprotokoll 2016-06-10
1.8.1 Herunterladen Änderungsprotokoll 2015-12-24
1.8.0 Herunterladen Änderungsprotokoll 2015-12-21
1.7.4 Herunterladen Änderungsprotokoll 2015-07-17
1.7.3 Herunterladen Änderungsprotokoll 2015-07-10
1.7.2 Herunterladen Änderungsprotokoll 2015-01-06
1.7.1 Herunterladen Änderungsprotokoll 2014-12-12
1.7.0 Herunterladen Änderungsprotokoll 2014-12-10
1.6.5 Herunterladen Änderungsprotokoll 2014-09-04
1.6.4 Herunterladen Änderungsprotokoll 2014-09-02
1.6.3 Herunterladen Änderungsprotokoll 2014-05-29
1.6.2 Herunterladen Änderungsprotokoll 2014-05-12
1.6.1 Herunterladen Änderungsprotokoll 2014-05-08
1.6.0 Herunterladen Änderungsprotokoll 2014-05-06

Die einfachste Möglichkeit, einen virtuellen Linux in nur wenigen Minuten zu haben (in 3 Schritten)

Schritt 1.

Erstellen Sie auf Ihrem Host-Computer (Windows / Linux / OSX) ein leeres my_project .

Schritt 2.

Erstellen Sie eine Datei mit dem Namen Vagrantfile :

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
 

Schritt 3.

Führen Sie Ihre Maschine aus:

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

Erledigt!


Anmerkungen:

  • Vielleicht möchten Sie eine andere IP-Adresse vergeben.
  • Wenn Ihr Host Windows ist, möchten Sie vielleicht von putty aus ssh . Sie können dies tun, indem Sie den Hostnamen 127.0.0.1 und den Port 2222 . Der Benutzername ist vagrant und das Passwort ist vagrant .

Installation für Windows mit Unterstützung von VirtualBox und SSH

Um Vagrant auf der Windows-Plattform verwenden zu können, müssen Sie zuerst die Virtualisierungssoftware und ein Befehlszeilenprogramm ssh installieren. In diesem Beispiel werden Freeware VirtualBox und Cygwin verwendet.

Installieren Sie VirtualBox

Laden Sie die neueste VirtualBox-Version von der offiziellen Downloadseite herunter und führen Sie die heruntergeladene Datei aus. Beachten Sie, dass Sie während der Installation vorübergehend die Netzwerkverbindung verlieren. Warnung: Netzwerkschnittstellen

Sie sollten auch zulassen, dass Oracle zusätzliche Treiber installiert.

Installieren Sie Cygwin

Laden Sie es von cygwin.com herunter und führen Sie das Setup aus, bis Sie die Seite "Pakete auswählen " sehen.

Wir brauchen nur ssh bin-s von hier: Cygwin SSH-Pakete

Füge Cygwin zu PATH hinzu

Sie müssen auch den Ordner C:\cygwin64\bin zur Windows-Umgebungsvariablen PATH hinzufügen. Damit Sie den ssh Befehl von überall aus aufrufen können.

Installieren Sie Vagrant selbst

Laden Sie Vagrant von vagrantup.com herunter und folgen Sie der Installationsanleitung, um es zu installieren. Danach müssen Sie Ihren Computer neu starten.

Testen

Die Virtualisierungstechnologie VTx / VTd sollte aktiviert sein. (Das finden Sie im BIOS in den Sicherheitsoptionen.)

Um zu testen, ob alles korrekt installiert ist, erstellen Sie irgendwo auf der Festplatte einen leeren Ordner. Öffnen Sie die Befehlszeile und wechseln Sie zu dem Ordner, den Sie gerade erstellt haben:

cd c:/path/to/your/folder
 

dann eingeben

vagrant init hashicorp/precise64
vagrant up
 

Dadurch wird die VirtualBox erstellt und gestartet, auf der Ubuntu 12.04 LTS 64-Bit ausgeführt wird. Zum Starten der 32-Bit-Version verwenden Sie vagrant init hashicorp/precise32 . Wenn Sie eine andere Box benötigen, finden Sie weitere Informationen auf der Website von Hashicorp .

Mit dem Befehl vagrant init wird auch eine Vagrantfile Konfigurationsdatei im aktuellen Ordner erstellt. Jetzt können Sie es einfach an eine andere Person senden, und wenn diese Person vagrant up aufruft, wird vagrant up demselben Computer dieselbe virtuelle Maschine erstellt.

Um ssh zu testen, nachdem diese beiden Befehle erfolgreich ausgeführt wurden, führen Sie diesen Befehl in demselben Ordner aus:

vagrant ssh
 

Wenn alles gut lief, landen Sie in der virtuellen Maschine, die als vagrant Benutzer angemeldet ist.

Weitere Schritte

Sie können die VM mit stoppen

vagrant halt
 

oder löschen Sie es mit

vagrant destroy
 

Weitere Boxen sowie Anweisungen zur Installation finden Sie auf der Seite vagrantbox.es .

LAMP-Projekt

In diesem Beispiel wird eine benutzerdefinierte LAMP-Projektentwicklungsumgebung mit Vagrant erstellt.

Zunächst müssen Sie Virtual Box und Vagrant installieren.

Erstellen Sie anschließend einen vagrant Ordner in Ihrem Basisverzeichnis, öffnen Sie Ihr Terminal und ändern Sie das aktuelle Verzeichnis in das neue vagrant Verzeichnis. Führen Sie nun vagrant init . Eine Vagrantfile Datei wird darin erstellt und sieht folgendermaßen aus:

# -*- 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
 

Nächste Zeilen hinzufügen oder unkommentieren, wenn Sie die obige Datei bearbeiten:

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
 

Bearbeiten Sie Ihre hosts Datei, um die gewünschte Domäne an die virtuelle VM zu leiten. Für Linux ist dies /etc/hosts , für Windows C:\Windows\System32\Drivers\etc\hosts . und füge diese Zeile hinzu:

192.168.33.10 vagrantServer.com
 

Natürlich können Sie vagrantServer.com durch einen beliebigen Namen ersetzen.

Jetzt ist es Zeit, die Datei bootstrap.sh (im Verzeichnis vagrant ) zu erstellen. Dieses Skript wird jedes Mal ausgeführt, wenn die VM von Grund auf neu erstellt wird. Lesen Sie die Kommentare sorgfältig durch:

#!/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
 

Wenn Sie die Datei oben geprüft und gespeichert haben, gehen Sie erneut zu Ihrem Terminal, ändern Sie das aktuelle Verzeichnis in das zuvor erstellte Verzeichnis, und geben Sie das vagrant vagrant up . Die VM wird erstellt und die Boostrap-Datei wird von der VM aus ausgeführt, sodass alle erforderlichen Elemente kopiert / installiert werden. Wenn Sie fertig sind, können Sie Ihren Browser öffnen und zu vagrantServer.com gehen (oder wie auch immer Sie diesen Namen nennen). Sie sollten den Inhalt sehen, der von der virtuellen VM vagrantServer.com .

Sie können Ihre Projektdateien auch über das Verzeichnis vagrant/yourProjectName bearbeiten, und alle Dateien im Verzeichnis vagrant werden zwischen Ihrem Host und der vagrant/yourProjectName des vagrant freigegeben und synchronisiert.

Alle Ordner synchronisieren

Um alle Ordner in beide Richtungen zu synchronisieren, fügen Sie diese in Ihre Vagrantfile

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

Ordner synchronisieren, aber einige Ordner ausschließen

Um alle Ordner in beide Richtungen zu synchronisieren, fügen Sie diese in Ihre Vagrant-Datei ein:

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 Zielordner werden von der Synchronisierung ausgeschlossen.
Die Synchronisierung erfolgt nur bei vagrant up und beim vagrant reload von vagrant reload .
Um jede Änderung von Ihrem Host zu Gast zu synchronisieren, müssen Sie Folgendes verwenden:

vagrant rsync-auto
 

Laden Sie das Bild der Vagrant Box zu Amazon AWS AMI hoch

Sie haben eine lokale Vagrant-Box, die Sie zu Amazon AWS hochladen möchten. Zuerst müssen Sie eine .box Datei erstellen :

vagrant package --base my-virtual-machine

Dieser Schritt kann je nach Größe des Bildes eine Weile dauern. Dann müssen Sie das .vmdk Image aus der .box Datei .box :

gunzip -S .box package.box
tar xf package
 

Nach diesem Schritt sollten Sie 4 neue Dateien haben: package , box-disk1.vmdk , Vagrantfile und box.ovf . Nun zum Hochladen auf AWS. Wenn Sie ein AWS-Konto haben , erstellen Sie einen S3-Bucket , um das Bild auf den Servern von Amazon zu speichern. Sie benötigen die EC2-CLI von Amazon für den nächsten Schritt (da Sie dies nicht über die Konsole tun können, soweit ich das beurteilen kann):

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

Dieses Ergebnis dieses Befehls sollte eine Weile dauern. Es wird die große Bilddatei in S3 hochgeladen, der Befehl selbst kehrt jedoch schneller zurück. Sie können den Fortschritt des Imports mit dem ec2-describe-conversion-tasks überprüfen.

Sobald dies abgeschlossen ist, wird eine Instanz Ihrer Box in der AWS-Konsole ausgeführt. Möglicherweise können Sie jedoch nicht darauf zugreifen, da keine öffentliche IP-Adresse und / oder keine .pem Datei vorhanden ist. Der nächste Schritt ist also das Erstellen einer AMI aus der Instanz. Um ein AMI zu erstellen, stoppen Sie die Instanz (nicht beenden!), Klicken Sie mit der rechten Maustaste auf die Instanz und gehen Sie zu Image -> Create Image . Dies sollte auch eine Weile dauern. Sie können den Fortschritt in der AMIs-Ansicht der Konsole überprüfen. Wenn es .pem , starten Sie eine Instanz mit AMI, indem Sie eine .pem Schlüsseldatei .pem , und dann können Sie ssh .pem und schon kann es losgehen.