Vagrant 自动化部署实战指南
一 核心思路与流程
二 最小化 Vagrantfile 示例
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.define "app01" do |node|
node.vm.box = "ubuntu/focal64"
node.vm.hostname = "app01"
node.vm.network "private_network", ip: "192.168.56.10"
# 可选:共享目录(当前目录 -> /vagrant)
node.vm.synced_folder ".", "/vagrant", type: "nfs"
# 可选:端口转发(宿主机 8080 -> 虚拟机 80)
node.vm.network "forwarded_port", guest: 80, host: 8080
node.vm.provider "virtualbox" do |vb|
vb.memory = 2048
vb.cpus = 2
vb.name = "app01"
end
# 核心:Provision 自动化(Shell 脚本)
node.vm.provision "shell", path: "bootstrap.sh"
end
end
#!/usr/bin/env bash
set -eux
apt-get update
apt-get install -y nginx
systemctl enable --now nginx
echo "Hello, Vagrant Provision!" > /var/www/html/index.html
三 常用自动化方案对比与选型
| 方案 | 适用场景 | 关键配置 | 优点 | 局限 |
|---|---|---|---|---|
| Shell Provision | 快速上手、简单脚本 | inline 或 path 指向脚本 | 简单直观、零依赖 | 复杂场景可维护性一般 |
| Ansible Provision | 可复用、可版本化的配置管理 | config.vm.provision “ansible” | 幂等、结构清晰、适合团队 | 需学习 Ansible 语法 |
| Docker Compose 插件 | 容器化应用的一键编排 | 安装 vagrant-docker-compose 插件并配置 compose 文件 | 复用 docker-compose.yml,开发/测试一致 | 依赖容器生态 |
config.vm.provision "ansible" do |ansible|
ansible.playbook = "playbook.yml"
ansible.inventory_path = "inventory"
end
# 安装插件:vagrant plugin install vagrant-docker-compose
config.vm.provision :docker_compose, yml: "docker-compose.yml", rebuild: true, run: "always"
四 多机集群与网络规划
Vagrant.configure("2") do |config|
%w[master01 worker01 worker02].each_with_index do |name, i|
config.vm.define name do |node|
node.vm.box = "centos/7"
node.vm.hostname = name
node.vm.network "private_network", ip: "192.168.56.#{101 + i}"
node.vm.provider "virtualbox" do |vb|
vb.memory = 2048
vb.cpus = 2
vb.name = name
end
# 每台机器各自执行自己的 bootstrap
node.vm.provision "shell", path: "bootstrap-#{name}.sh"
end
end
end
五 实践建议与常见问题
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。