GaGa

One GaGa, One World !

vagrant provision 是 Vagrant 的核心功能之一,帮你自动在虚拟机上应用配置,省去手动操作的麻烦。它支持多种 provisioner(Shell、Ansible、Chef 等),灵活性很高。无论你是想快速搭个开发环境,还是调试复杂的部署脚本,vagrant provision 都能派上用场。


1.内容

  • Provision 简介:自动化配置虚拟机环境(如安装软件、配置服务)。
  • 支持的 Provision 类型
    • Shell:最简单的脚本方式,支持内联和外部脚本。
    • Ansible:使用 playbook 进行声明式配置。
    • Puppet:通过 manifests 实现配置管理。
    • Chef:使用 cookbooks 进行自动化部署。
    • Docker:直接在虚拟机中运行 Docker 容器。
    • File:将主机文件传输到虚拟机。
  • 触发 Provision:控制自动化执行时机(首次启动、每次启动、手动触发)。
  • 最佳实践:编写可复用、可维护的脚本。
Read more »

vagrant provision 是 Vagrant 提供的一个命令,用于在已创建的虚拟机(VM)上运行预定义的配置和脚本,来自动完成环境搭建和软件安装。


1. 什么是 vagrant provision

Vagrant 是一个用于构建和管理虚拟开发环境的工具,而 vagrant provision 是它的核心命令之一。它的作用是根据 Vagrantfile 中定义的 provisioner(配置工具),在虚拟机上执行配置任务。常见的 provisioner 包括 Shell 脚本、Ansible、Chef、Puppet,或者简单的文件拷贝。

Read more »

网络与端口映射

目标:掌握 Vagrant 的网络配置,包括端口转发、私有网络、公有网络,理解网络类型的使用场景,并能够通过端口映射访问虚拟机中的服务。


官方文档

Read more »

1. 什么是 Vagrant?

1.1 内容

  • Vagrant 的定义与作用
    Vagrant 是一个用于构建和管理虚拟机环境的开源工具,主要用于创建一致、可重复的开发环境。它通过脚本化的方式(主要是 Vagrantfile)定义虚拟机配置,简化环境搭建流程。
  • Vagrant 的优势
    • 环境一致性:确保开发、测试、生产环境一致,避免“在我机器上可以运行”的问题。
    • 快速部署:通过预配置的 Box 文件快速启动虚拟机。
    • 跨平台支持:支持 Windows、macOS、Linux,支持多种虚拟化提供者(如 VirtualBox、VMware、Hyper-V)。
  • Vagrant 与其他工具的对比
    • Vagrant vs Docker:Vagrant 创建完整的虚拟机(包含操作系统),而 Docker 使用容器(共享主机内核)。Vagrant 更适合需要完整系统隔离的场景。
    • Vagrant vs Terraform:Terraform 用于基础设施即代码(IaC),多用于云端资源管理;Vagrant 更专注于本地开发环境。
  • 适用场景
    • 本地开发环境:如 LAMP、LEMP 栈。
    • 测试环境:模拟生产环境。
    • 学习新工具:如 Hadoop、Kubernetes 等复杂系统。

box provider/provisioner 302ba9daab2d1c405366fef334b876a6.png

Read more »

目的

开启密码、key认证、添加国内yum源、增加磁盘大小、关闭selinux、安装常用软件包、关闭防火墙

1.Vagrantfile

Vagrant.configure("2") do |config|
    config.vm.box = "centos7"
    config.vm.hostname = "vgt-c7-101"
    config.disksize.size = '50GB'
    #config.vm.disk :disk, size: "50GB", primary: true
    config.vm.network "private_network", ip: "172.24.20.101", hostname: true
    config.ssh.insert_key = true
    config.vm.provider "virtualbox" do |vb|
      vb.memory = 2048
      vb.cpus   = 2
      vb.name   = "vgt-c7-101"
    end

    config.vm.provision "shell", path: "init.sh"
end
Read more »

目的

当前虚机做了优化,想基于此虚机打包xx.box当作基础镜像

1.检查vagrant默认insecure_private_key

ll ~/.vagrant.d/insecure_private_key

➜  .vagrant.d ll ~/.vagrant.d/insecure_private_keys 
total 32
-rw-------  1 mvpbang  staff   411  4  2  2024 vagrant.key.ed25519
-rw-r--r--  1 mvpbang  staff    98  3  5 15:58 vagrant.key.ed25519.pub
-rw-------  1 mvpbang  staff  1675  4  2  2024 vagrant.key.rsa
-rw-r--r--  1 mvpbang  staff   381  3  5 15:58 vagrant.key.rsa.pub
Read more »

问题

操作来看是调整了nat网络配置导致的nat rule异常

日志如下

➜  c7-10x vgtu
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["modifyvm", "ded6483d-ae4c-4baa-8c1e-421b6f44ba90", "--natpf1", "ssh,tcp,127.0.0.1,2222,,22"]

Stderr: VBoxManage: error: A NAT rule of this name already exists
VBoxManage: error: Details: code NS_ERROR_INVALID_ARG (0x80070057), component NATEngineWrap, interface INATEngine, callee nsISupports
VBoxManage: error: Context: "AddRedirect(Bstr(strName).raw(), proto, Bstr(strHostIp).raw(), RTStrToUInt16(strHostPort), Bstr(strGuestIp).raw(), RTStrToUInt16(strGuestPort))" at line 2102 of file VBoxManageModifyVM.cpp
Read more »
0%