Vagrant CentOS 7 配置完全指南(新手友好版)

目录

  1. 前置知识
  2. 简单配置(5分钟上手)
  3. 完美配置(生产级)
  4. 常见问题排查
  5. 常用命令速查

前置知识

什么是 Vagrant?

Vagrant 是一个虚拟机管理工具,让你用代码(Vagrantfile)定义和创建虚拟机,实现"基础设施即代码"。

核心概念

术语 解释 类比
Box 虚拟机模板(预装好的系统镜像) Docker 镜像
Vagrantfile 虚拟机配置文件(Ruby 语法) Dockerfile
Provider 虚拟化软件(VirtualBox/VMware/Hyper-V) 容器运行时
Provisioning 启动后自动执行的配置脚本 容器启动脚本

文件结构

D:\VagrantFiles\CentOS7\ # 项目目录
├── Vagrantfile # 核心配置文件(必需)
├── .vagrant\ # Vagrant 运行时数据(自动生成)
│ └── machines\default\virtualbox
└── [你的项目文件...] # 共享到虚拟机的文件


简单配置(5分钟上手)

适用场景

  • 快速测试 CentOS 7
  • 学习 Linux 基础
  • 临时开发环境

完整 Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  # 使用 CentOS 7 官方 box
  config.vm.box = "centos/7"
  
  # 设置虚拟机名称(在 VirtualBox 中显示)
  config.vm.hostname = "centos7-simple"
  
  # VirtualBox 配置
  config.vm.provider "virtualbox" do |vb|
    vb.name = "CentOS7-Simple"    # 虚拟机名字
    vb.memory = "2048"              # 内存 2GB
    vb.cpus = 2                     # CPU 2核
  end
end

操作步骤

:: 1. 创建项目目录
mkdir D:\VagrantFiles\CentOS7-Simple
cd D:\VagrantFiles\CentOS7-Simple

:: 2. 创建 Vagrantfile(复制上面的内容)
notepad Vagrantfile

:: 3. 启动虚拟机(首次会自动下载 box)
vagrant up

:: 4. 连接虚拟机
vagrant ssh

:: 5. 退出虚拟机
exit

:: 6. 关闭虚拟机
vagrant halt

:: 7. 完全删除虚拟机
vagrant destroy -f

简单配置的特点

优点 缺点
配置简单,5分钟上手 没有共享文件夹
不容易出错 没有端口转发
资源占用少 每次连 SSH 都要 vagrant ssh
启动速度快 没有自动安装软件

完美配置(生产级)

适用场景

  • 长期开发环境
  • Web 开发/测试
  • 需要与主机文件同步
  • 需要外部访问虚拟机服务

完整 Vagrantfile(带详细注释)

# -*- mode: ruby -*-
# vi: set ft=ruby :

# ============================================
# Vagrant 配置 API 版本,固定为 "2"
# ============================================
Vagrant.configure("2") do |config|
  
  # ==========================================
  # 第一部分:基础配置
  # ==========================================
  
  # 使用的 box(虚拟机模板)
  # centos/7 是官方维护的 CentOS 7 最新版本
  config.vm.box = "centos/7"
  
  # 虚拟机主机名(登录后显示在命令提示符)
  config.vm.hostname = "centos7-dev"
  
  # 是否检查 box 更新(建议关闭,避免每次启动都检查)
  config.vm.box_check_update = false
  
  # ==========================================
  # 第二部分:网络配置
  # ==========================================
  
  # 【配置 1】私有网络(Host-Only)
  # 作用:主机和虚拟机互通,虚拟机有固定 IP
  # 适用:需要主机访问虚拟机服务(如 Web、数据库)
  # IP 范围:192.168.56.0/24 是 VirtualBox 默认的 Host-Only 网段
  config.vm.network "private_network", ip: "192.168.56.101"
  
  # 【配置 2】端口转发(NAT 网络)
  # 作用:将虚拟机的端口映射到主机,外部可访问
  # 格式:guest: 虚拟机端口, host: 主机端口
  
  # SSH 端口转发(默认已启用,这里显式声明)
  config.vm.network "forwarded_port", 
    guest: 22,        # 虚拟机 SSH 端口
    host: 2222,       # 主机映射端口(避免与主机 SSH 22 冲突)
    id: "ssh", 
    auto_correct: true  # 如果端口被占用,自动换其他端口
  
  # HTTP 端口转发(访问虚拟机的 Web 服务)
  # 访问方式:浏览器打开 http://localhost:8090
  config.vm.network "forwarded_port", 
    guest: 80,        # 虚拟机 HTTP 端口
    host: 8090,       # 主机映射端口
    host_ip: "127.0.0.1"  # 只允许本机访问(安全)
  
  # HTTPS 端口转发
  config.vm.network "forwarded_port", 
    guest: 443, 
    host: 8443, 
    host_ip: "127.0.0.1"
  
  # 【配置 3】桥接网络(可选,慎用)
  # 作用:虚拟机获得局域网真实 IP,与主机同级
  # 适用:需要外部设备(如手机)访问虚拟机
  # 注意:需要指定网卡名称,不同电脑不同
  # config.vm.network "public_network", 
  #   bridge: "Intel(R) Wi-Fi 6 AX201 160MHz"  # 你的网卡名称
  
  # ==========================================
  # 第三部分:共享文件夹
  # ==========================================
  
  # 默认共享:项目目录(D:\VagrantFiles\CentOS7) ↔ 虚拟机 /vagrant
  # 作用:主机和虚拟机实时同步文件
  # 注意:CentOS 7 需要安装 Guest Additions 才能用 virtualbox 类型
  
  # 方案 A:使用 rsync(推荐,无需额外安装)
  # 缺点:单向同步(主机→虚拟机),不是实时
  config.vm.synced_folder ".", "/vagrant", type: "rsync"
  
  # 方案 B:禁用共享文件夹(如果不需要)
  # config.vm.synced_folder ".", "/vagrant", disabled: true
  
  # 方案 C:额外共享其他目录(示例)
  # config.vm.synced_folder "D:/Workspace", "/workspace", type: "rsync"
  
  # ==========================================
  # 第四部分:VirtualBox 硬件配置
  # ==========================================
  
  config.vm.provider "virtualbox" do |vb|
    # 虚拟机名称(在 VirtualBox 管理器中显示)
    vb.name = "CentOS7-Dev"
    
    # 内存配置(根据主机内存调整)
    # 建议:主机 16GB → 虚拟机 4-8GB;主机 8GB → 虚拟机 2-4GB
    vb.memory = "4096"  # 4GB
    
    # CPU 配置(建议不超过主机物理核心数的一半)
    vb.cpus = 2
    
    # 【性能优化】CPU 使用上限(防止虚拟机卡死主机)
    # 80 表示虚拟机最多使用主机 80% 的 CPU
    vb.customize ["modifyvm", :id, "--cpuexecutioncap", "80"]
    
    # 【网络优化】启用 DNS 解析(解决虚拟机内访问域名慢的问题)
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
    vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
    
    # 【多核必需】启用 IO APIC(多核 CPU 必须启用)
    vb.customize ["modifyvm", :id, "--ioapic", "on"]
    
    # 【可选】显示图形界面(默认无界面,需要桌面时启用)
    # vb.gui = true
    # vb.customize ["modifyvm", :id, "--vram", "128"]  # 显存 128MB
  end
  
  # ==========================================
  # 第五部分:启动后自动配置(Provisioning)
  # ==========================================
  
  # 作用:虚拟机第一次启动时,自动执行脚本安装软件
  # 注意:只有第一次 vagrant up 执行,之后用 vagrant provision 触发
  
  config.vm.provision "shell", inline: <<-SHELL
    # 打印进度信息
    echo "=========================================="
    echo "  开始初始化 CentOS 7 开发环境"
    echo "=========================================="
    
    # ----- 步骤 1:更换国内镜像源(加速下载)-----
    echo "[1/6] 更换 Yum 源为阿里云镜像..."
    # 备份原配置
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2>/dev/null || true
    # 下载阿里云配置
    curl -fsSL -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    curl -fsSL -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
    # ----- 步骤 2:更新系统-----
    echo "[2/6] 更新系统软件包..."
    yum clean all
    yum makecache fast
    yum update -y
    
    # ----- 步骤 3:安装常用工具-----
    echo "[3/6] 安装开发工具..."
    # 基础工具
    yum install -y vim wget curl net-tools telnet tree htop git
    
    # 开发工具集(包含 gcc、make 等)
    yum groupinstall -y "Development Tools"
    
    # 其他实用工具
    yum install -y yum-utils device-mapper-persistent-data lvm2
    
    # ----- 步骤 4:安装 Docker-----
    echo "[4/6] 安装 Docker..."
    # 添加 Docker 阿里云镜像源
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    # 安装 Docker
    yum install -y docker-ce docker-ce-cli containerd.io
    # 启动并设置开机自启
    systemctl enable docker
    systemctl start docker
    # 将 vagrant 用户加入 docker 组(免 sudo 使用 docker)
    usermod -aG docker vagrant
    
    # ----- 步骤 5:系统优化-----
    echo "[5/6] 优化系统设置..."
    # 设置时区为上海(中国时间)
    timedatectl set-timezone Asia/Shanghai
    
    # 关闭 SELinux(开发环境方便,生产环境建议开启)
    setenforce 0
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    
    # 关闭防火墙(开发环境方便,生产环境建议开启并配置规则)
    systemctl stop firewalld
    systemctl disable firewalld

    # 设置 root 密码
    echo "root:vagrant" | chpasswd

    # 启用 SSH 密码认证
    sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
    sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/g' /etc/ssh/sshd_config

    # 重启 SSH 服务使配置生效
    systemctl restart sshd
    
    # ----- 步骤 6:完成-----
    echo "[6/6] 初始化完成!"
    echo "=========================================="
    echo "  建议执行:vagrant reload"
    echo "  以确保所有配置生效"
    echo "=========================================="
  SHELL
  
  # ==========================================
  # 第六部分:高级配置(可选)
  # ==========================================
  
  # 【插件配置】vagrant-vbguest(自动安装 Guest Additions)
  # 作用:自动安装 VirtualBox 增强工具,启用共享文件夹、更好的性能
  # 安装命令:vagrant plugin install vagrant-vbguest
  if Vagrant.has_plugin?("vagrant-vbguest")
    config.vbguest.auto_update = true   # 自动更新
    config.vbguest.no_remote = false  # 允许下载最新版本
  end
  
  # 【触发器】每次启动后执行(可选)
  # config.vm.provision "shell", run: "always", inline: <<-SHELL
  #   echo "虚拟机启动于: $(date)" >> /var/log/vagrant-boot.log
  # SHELL
end

常见问题排查

Q1:vagrant up 卡在 "SSH auth method: private key"

原因:SSH 密钥认证失败

解决

# 强制使用密码认证(临时)
set VAGRANT_SSH_INSERT_KEY=false
vagrant up

或在 Vagrantfile 添加:

config.ssh.insert_key = false
config.ssh.password = "vagrant"

Q2:共享文件夹挂载失败 "unknown filesystem type 'vboxsf'"

原因:缺少 VirtualBox Guest Additions

解决

# 安装插件自动处理
vagrant plugin install vagrant-vbguest
vagrant reload

或改用 rsync:

config.vm.synced_folder ".", "/vagrant", type: "rsync"

Q3:端口转发提示 "端口已被占用"

原因:主机上其他程序占用了该端口

解决:修改 Vagrantfile 中的 host 端口:

config.vm.network "forwarded_port", guest: 80, host: 8081  # 改成 8081

Q4:虚拟机启动后无法联网

原因:DNS 解析问题

解决:在 Vagrantfile 添加:

vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]

或在虚拟机内执行:

echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

常用命令速查

命令 作用 使用场景
vagrant up 启动/创建虚拟机 第一次使用或关机后启动
vagrant halt 关闭虚拟机(保存状态) 暂时不用,下次快速恢复
vagrant suspend 暂停虚拟机(类似休眠) 快速暂停,保留内存状态
vagrant resume 恢复暂停的虚拟机 从 suspend 恢复
vagrant reload 重启并重新加载配置 修改 Vagrantfile 后
vagrant ssh SSH 登录虚拟机 进入系统操作
vagrant destroy -f 强制删除虚拟机 彻底重建,释放空间
vagrant status 查看虚拟机状态 确认运行状态
vagrant provision 重新执行配置脚本 修改 provision 后
vagrant box list 查看已下载的 box 管理基础镜像
vagrant box remove centos/7 删除指定 box 清理磁盘空间
vagrant global-status 查看所有虚拟机 管理多个项目

配置选择建议

场景 推荐配置 理由
第一次学习 Vagrant 简单配置 先跑起来,建立信心
临时测试命令 简单配置 快速启动,用完即删
Web 开发环境 完美配置 需要端口转发、文件同步
Docker/K8s 学习 完美配置 + 4GB+ 内存 容器需要资源
长期开发工作 完美配置 + vbguest 插件 完整功能,体验最好

总结

  • 简单配置:理解 Vagrant 核心概念(box、Vagrantfile、provider)
  • 完美配置:掌握网络、共享文件夹、自动化配置,实现真正的"开发环境即代码"

建议:先用简单配置跑通流程,再逐步添加完美配置的功能,遇到问题对照排查章节解决!

我的自用配置(亲测有效)

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  # ==================== 基础配置 ====================
  config.vm.box = "centos/7"
  config.vm.hostname = "centos7-dev"
  
  # 检查 box 更新(建议关闭以加快启动速度,除非你需要更新系统)
  config.vm.box_check_update = false
  
  # ==================== 关键修复:Vagrant VBGuest 插件配置 ====================
  # 这段代码会自动检测并安装/更新 VirtualBox Guest Additions
  # 这是解决 "unknown filesystem type 'vboxsf'" 的核心
  if Vagrant.has_plugin?("vagrant-vbguest")
    config.vbguest.auto_update = true
    config.vbguest.no_remote = true # 优先使用本地 ISO,如果没有则自动下载
    config.vbguest.install_options = [ '--', '--no-force', '--verbose' ]
  end

  # ==================== 网络配置 ====================
  # 私有网络(Host-Only),固定 IP
  config.vm.network "private_network", ip: "192.168.56.101", netmask: "255.255.255.0"
  
  # 端口转发:SSH
  config.vm.network "forwarded_port", guest: 22, host: 2222, id: "ssh", auto_correct: true
  
  # 端口转发:Web
  config.vm.network "forwarded_port", guest: 80, host: 8090, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 443, host: 8443, host_ip: "127.0.0.1"

  # ==================== 共享文件夹修复 ====================
  # 核心修复:显式指定类型和挂载选项
  # 如果你的 VirtualBox 版本较老,可能需要将 type 改为 "smb" (Windows) 或 "nfs" (Linux/Mac)
  config.vm.synced_folder ".", "/vagrant",
    type: "rsync",
    mount_options: ["vers=3,udp,noresvport"], # 性能优化参数
    owner: "vagrant",
    group: "vagrant"

  # ==================== VirtualBox 提供者配置 ====================
  config.vm.provider "virtualbox" do |vb|
    vb.name = "CentOS7-Dev"
    vb.memory = "8192"          # 建议 4GB 起步,8GB 更好
    vb.cpus = 4                 # 建议 2 核起步
    

    
    # 性能优化
    vb.customize ["modifyvm", :id, "--cpuexecutioncap", "90"]
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
    vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
    vb.customize ["modifyvm", :id, "--ioapic", "on"]
  end
  
  # ==================== 启动后自动配置 (Provisioning) ====================
  config.vm.provision "shell", inline: <<-SHELL
    echo "=== 开始初始化 CentOS 7 环境 ==="
    
    # 1. 更换阿里云镜像源 (国内必做)
    echo ">>> 正在更换 Yum 源..."
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2>/dev/null
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
    # 2. 安装常用工具
    echo ">>> 正在更新系统并安装工具..."
    yum clean all
    yum makecache fast
    yum update -y
    
    yum install -y vim wget curl net-tools telnet tree htop git yum-utils
    
    # 3. 安装 Docker (注意:CentOS 7 默认源里的 Docker 版本较老,这里使用官方脚本或阿里云源)
    echo ">>> 正在安装 Docker..."
    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    yum install -y docker-ce docker-ce-cli containerd.io
    
    systemctl enable docker
    systemctl start docker
    usermod -aG docker vagrant
    
    # 4. 系统优化
    echo ">>> 正在优化系统设置..."
    timedatectl set-timezone Asia/Shanghai
    setenforce 0
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    
    # 关闭防火墙 (开发环境)
    systemctl stop firewalld
    systemctl disable firewalld

    # 设置 root 密码
    echo "root:vagrant" | chpasswd

    # 启用 SSH 密码认证
    sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
    sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/g' /etc/ssh/sshd_config

    # 重启 SSH 服务使配置生效
    systemctl restart sshd
    
    echo "=== 初始化完成! 请重启虚拟机 (vagrant reload) 以确保所有驱动生效 ==="
  SHELL
end
posted @ 2026-05-09 10:56  RK5123153  阅读(5)  评论(0)    收藏  举报