Vagrant开发环境管理
Vagrant开发环境管理
什么是Vagrant
Vagrant是一个用于构建和管理虚拟化开发环境的工具,使用单一配置文件即可创建一致的开发环境。
安装Vagrant
# Windows
# 下载安装包: https://www.vagrantup.com/downloads
# macOS
brew install vagrant
# Linux
sudo apt-get install vagrant
# 验证安装
vagrant --version
基本使用
初始化项目
# 创建目录
mkdir myproject && cd myproject
# 初始化Vagrant
vagrant init ubuntu/bionic64
Vagrantfile
# Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/bionic64"
config.vm.hostname = "dev-server"
# 网络配置
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 3000, host: 3000
# 同步文件夹
config.vm.synced_folder ".", "/vagrant"
config.vm.synced_folder "./src", "/app"
# 虚拟机配置
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = 2
vb.name = "my-dev-server"
end
# 配置脚本
config.vm.provision "shell", inline: <<-SHELL
apt-get update
apt-get install -y nginx docker.io
systemctl enable nginx
SHELL
end
常用命令
# 启动虚拟机
vagrant up
# SSH登录
vagrant ssh
# 查看状态
vagrant status
# 暂停
vagrant halt
# 销毁
vagrant destroy
# 重新加载配置
vagrant reload
# 执行provision
vagrant provision
使用Provisioner
Shell脚本
config.vm.provision "shell", path: "scripts/setup.sh"
#!/bin/bash
# scripts/setup.sh
apt-get update
apt-get install -y build-essential curl git
# 安装Node.js
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
apt-get install -y nodejs
# 安装Docker
apt-get install -y docker.io
usermod -aG docker vagrant
Ansible
config.vm.provision "ansible" do |ansible|
ansible.playbook = "playbook.yml"
ansible.inventory_path = "inventory"
end
实践:开发环境配置
# Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/focal64"
config.vm.hostname = "dev-machine"
# 网络
config.vm.network "private_network", ip: "192.168.56.10"
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "forwarded_port", guest: 3000, host: 3000
config.vm.network "forwarded_port", guest: 5432, host: 5432
# 虚拟机配置
config.vm.provider "virtualbox" do |vb|
vb.memory = "4096"
vb.cpus = 4
vb.name = "dev-machine"
end
# 同步文件夹
config.vm.synced_folder "./project", "/home/vagrant/project"
# Provisions
config.vm.provision "shell", inline: <<-SHELL
# 更新系统
apt-get update && apt-get upgrade -y
# 安装基础工具
apt-get install -y curl wget git vim htop
# 安装Docker
curl -fsSL https://get.docker.com | sh
usermod -aG docker vagrant
# 安装Docker Compose
curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# 安装Node.js
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
apt-get install -y nodejs
# 安装Python
apt-get install -y python3-pip python3-venv
echo "环境配置完成!"
SHELL
end
多机器配置
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/focal64"
# Web服务器
config.vm.define "web" do |web|
web.vm.hostname = "web-server"
web.vm.network "private_network", ip: "192.168.56.10"
web.vm.network "forwarded_port", guest: 80, host: 8080
web.vm.provision "shell", path: "scripts/setup-web.sh"
end
# 数据库服务器
config.vm.define "db" do |db|
db.vm.hostname = "db-server"
db.vm.network "private_network", ip: "192.168.56.20"
db.vm.provision "shell", path: "scripts/setup-db.sh"
end
end
总结
Vagrant是管理开发环境的利器。通过Vagrantfile定义环境,可以确保团队成员使用一致的开发环境,避免"在我电脑上可以运行"的问题。