Zum Inhalt springen

Vagrant

Umfassende HashiCorp Vagrant Befehle und Workflows für Entwicklungsumgebungsmanagement und virtuelle Maschinenbereitstellung.

Installation & Einrichtung

BefehlBeschreibung
vagrant versionZeige Vagrant-Version
vagrant -hHilfe-Informationen anzeigen
vagrant initNeue Vagrantfile initialisieren
vagrant init ubuntu/jammy64Mit spezifischer Box initialisieren

Box-Verwaltung

Box-Operationen

BefehlBeschreibung
vagrant box listInstallierte Boxen auflisten
vagrant box add ubuntu/jammy64Box hinzufügen
vagrant box add --name mybox /path/to/box.boxLokale Box hinzufügen
vagrant box remove ubuntu/jammy64Box entfernen
vagrant box updateAlle Boxen aktualisieren
vagrant box update --box ubuntu/jammy64Bestimmte Box aktualisieren

Box-Informationen

BefehlBeschreibung
vagrant box outdatedAuf veraltete Boxen prüfen
vagrant box pruneAlte Box-Versionen entfernen
vagrant box repackage ubuntu/jammy64Box neu verpacken

VM-Lebenszyklus-Management

Grundlegende Operationen

BefehlBeschreibung
vagrant upVM starten und bereitstellen
vagrant haltShutdown VM
vagrant reloadVM neu starten
vagrant destroyVM zerstören
vagrant suspendVM aussetzen
vagrant resumeGestoppte VM fortsetzen

VM-Status und Informationen

BefehlBeschreibung
vagrant statusVM-Status anzeigen
vagrant global-statusStatus aller VMs anzeigen
vagrant global-status --pruneUngültige Einträge bereinigen

SSH und Zugriff

SSH-Operationen

BefehlBeschreibung
vagrant sshSSH in die VM
vagrant ssh-configSSH-Konfiguration anzeigen
vagrant ssh -- -L 8080:localhost:80SSH mit Port-Weiterleitung

Bereitstellung

Bereitstellungsbefehle

BefehlBeschreibung
vagrant provisionProvisioner ausführen
vagrant provision --provision-with shellBestimmten Provisioner ausführen
vagrant up --provisionStarten und bereitstellen
vagrant reload --provisionNeu starten und bereitstellen

Multi-Maschinen-Umgebungen

Multi-Maschinen-Befehle

BefehlBeschreibung
vagrant up webStarte spezifische Maschine
vagrant ssh webSSH zu bestimmter Maschine
vagrant halt dbStopp spezifische Maschine
vagrant destroy --forceZerstöre alle ohne Bestätigung

Snapshots

Snapshot-Verwaltung

BefehlBeschreibung
vagrant snapshot save snapshot_nameSchnappschuss speichern
vagrant snapshot listSnapshots auflisten
vagrant snapshot restore snapshot_nameSnapshot wiederherstellen
vagrant snapshot delete snapshot_nameSnapshot löschen

Plugin-Verwaltung

Plugin-Operationen

BefehlBeschreibung
vagrant plugin listInstallierte Plugins auflisten
vagrant plugin install vagrant-vbguestPlugin installieren
vagrant plugin uninstall vagrant-vbguestPlugin deinstallieren
vagrant plugin updateAlle Plugins aktualisieren

Vagrantfile-Beispiele

Basis-Vagrantfile

Vagrant.configure("2") do|config|
  config.vm.box = "ubuntu/jammy64"
  config.vm.hostname = "myserver"

  # Network configuration
  config.vm.network "private_network", ip: "192.168.56.10"
  config.vm.network "forwarded_port", guest: 80, host: 8080

  # Provider configuration
  config.vm.provider "virtualbox" do|vb|
    vb.memory = "2048"
    vb.cpus = 2
    vb.name = "MyVM"
  end

  # Provisioning
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install -y nginx
    systemctl enable nginx
    systemctl start nginx
  SHELL
end

Multi-Maschinen-Setup

Vagrant.configure("2") do|config|
  # Web server
  config.vm.define "web" do|web|
    web.vm.box = "ubuntu/jammy64"
    web.vm.hostname = "web"
    web.vm.network "private_network", ip: "192.168.56.10"

    web.vm.provider "virtualbox" do|vb|
      vb.memory = "1024"
      vb.cpus = 1
    end

    web.vm.provision "shell", inline: <<-SHELL
      apt-get update
      apt-get install -y nginx
    SHELL
  end

  # Database server
  config.vm.define "db" do|db|
    db.vm.box = "ubuntu/jammy64"
    db.vm.hostname = "database"
    db.vm.network "private_network", ip: "192.168.56.11"

    db.vm.provider "virtualbox" do|vb|
      vb.memory = "2048"
      vb.cpus = 2
    end

    db.vm.provision "shell", inline: <<-SHELL
      apt-get update
      apt-get install -y mysql-server
    SHELL
  end
end

Erweiterte Konfiguration

Vagrant.configure("2") do|config|
  config.vm.box = "ubuntu/jammy64"
  config.vm.box_version = "20230607.0.0"

  # Synced folders
  config.vm.synced_folder ".", "/vagrant", disabled: true
  config.vm.synced_folder "./app", "/var/www/html",
    owner: "www-data", group: "www-data"

  # Network configuration
  config.vm.network "private_network",
    ip: "192.168.56.10",
    netmask: "255.255.255.0"

  config.vm.network "public_network",
    bridge: "en0: Wi-Fi (AirPort)"

  # Port forwarding
  config.vm.network "forwarded_port", guest: 80, host: 8080
  config.vm.network "forwarded_port", guest: 443, host: 8443

  # Provider-specific configuration
  config.vm.provider "virtualbox" do|vb|
    vb.gui = false
    vb.memory = "4096"
    vb.cpus = 4
    vb.name = "Development Server"

    # VirtualBox specific settings
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
    vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
  end

  # Multiple provisioners
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get upgrade -y
  SHELL

  config.vm.provision "file",
    source: "./configs/nginx.conf",
    destination: "/tmp/nginx.conf"

  config.vm.provision "shell", path: "scripts/setup.sh"

  config.vm.provision "ansible" do|ansible|
    ansible.playbook = "playbook.yml"
    ansible.inventory_path = "inventory"
  end
end

Bereitstellungsmethoden

Shell-Bereitstellung

# Inline shell commands
config.vm.provision "shell", inline: <<-SHELL
  apt-get update
  apt-get install -y docker.io
  usermod -aG docker vagrant
SHELL

# External script
config.vm.provision "shell", path: "scripts/bootstrap.sh"

# Privileged and non-privileged
config.vm.provision "shell", privileged: false, inline: <<-SHELL
  echo "Running as vagrant user"
SHELL

# Environment variables
config.vm.provision "shell", env: \\\\{"DEBIAN_FRONTEND" => "noninteractive"\\\\}, inline: <<-SHELL
  apt-get install -y mysql-server
SHELL

Datei-Bereitstellung

config.vm.provision "file",
  source: "~/.ssh/id_rsa.pub",
  destination: "~/.ssh/authorized_keys"

config.vm.provision "file",
  source: "./configs/",
  destination: "/tmp/configs"

Ansible-Bereitstellung

config.vm.provision "ansible" do|ansible|
  ansible.playbook = "site.yml"
  ansible.inventory_path = "inventory/vagrant"
  ansible.limit = "all"
  ansible.verbose = "v"

  ansible.extra_vars = \\\\{
    nginx_port: 80,
    database_name: "myapp"
  \\\\}
end

Docker-Bereitstellung

config.vm.provision "docker" do|d|
  d.pull_images "nginx"
  d.pull_images "mysql:8.0"

  d.run "nginx",
    args: "-p 80:80 -v /vagrant/html:/usr/share/nginx/html"

  d.run "mysql",
    args: "-e MYSQL_ROOT_PASSWORD=secret -p 3306:3306"
end

Netzwerkkonfiguration

Private Netzwerke

# Static IP
config.vm.network "private_network", ip: "192.168.56.10"

# DHCP
config.vm.network "private_network", type: "dhcp"

# Multiple interfaces
config.vm.network "private_network", ip: "192.168.56.10"
config.vm.network "private_network", ip: "10.0.0.10"

Öffentliche Netzwerke

Would you like me to continue with the remaining translations or provide more details for the empty sections?```ruby

Bridge to default interface

config.vm.network “public_network”

Bridge to specific interface

config.vm.network “public_network”, bridge: “en0: Wi-Fi (AirPort)“

Static IP on public network

config.vm.network “public_network”, ip: “192.168.1.100” **Ressourcenzuweisung**: Geeignete CPU und Arbeitsspeicher zuweisenruby

Basic port forwarding

config.vm.network “forwarded_port”, guest: 80, host: 8080

Multiple ports

config.vm.network “forwarded_port”, guest: 80, host: 8080 config.vm.network “forwarded_port”, guest: 443, host: 8443 config.vm.network “forwarded_port”, guest: 3306, host: 3306

Auto-correct port conflicts

config.vm.network “forwarded_port”, guest: 80, host: 8080, auto_correct: true **Synchronisierte Ordner**: NFS für bessere Leistung auf macOS/Linux verwendenruby config.vm.provider “virtualbox” do|vb| vb.gui = true vb.memory = “4096” vb.cpus = 4 vb.name = “MyVM”

Advanced settings

vb.customize [“modifyvm”, :id, “—vram”, “128”] vb.customize [“modifyvm”, :id, “—accelerate3d”, “on”] vb.customize [“modifyvm”, :id, “—clipboard”, “bidirectional”] end **Box-Auswahl**: Minimale Basis-Boxen wählenruby config.vm.provider “vmware_desktop” do|vmware| vmware.vmx[“memsize”] = “4096” vmware.vmx[“numvcpus”] = “4” vmware.vmx[“displayName”] = “MyVM” end **Snapshot-Management**: Snapshots für schnelle Rollbacks verwendenruby config.vm.provider “hyperv” do|hv| hv.memory = 4096 hv.cpus = 4 hv.vmname = “MyVM” end


### Sicherheit```ruby
# Default synced folder (disabled)
config.vm.synced_folder ".", "/vagrant", disabled: true

# Custom synced folder
config.vm.synced_folder "./src", "/var/www/html"

# With options
config.vm.synced_folder "./app", "/var/www/html",
  owner: "www-data",
  group: "www-data",
  mount_options: ["dmode=775,fmode=664"]
```**SSH-Schlüssel**: SSH-Schlüssel statt Passwörter verwenden```ruby
config.vm.synced_folder "./", "/vagrant",
  type: "nfs",
  nfs_udp: false,
  nfs_version: 4
```**Netzwerkisolation**: Private Netzwerke verwenden, wenn möglich```ruby
config.vm.synced_folder "./", "/vagrant",
  type: "smb",
  smb_username: "username",
  smb_password: "password"
```**Firewall**: Geeignete Firewall-Regeln konfigurieren`vagrant ssh-config`**Updates**: Boxen und Vagrant aktuell halten