跳转至

Vagrant - 虚拟机管理

使用目的

本地安装各种linux 环境,搭建开发环境,模拟服务器等

window下安装

  • 先安装虚拟机软件 https://www.virtualbox.org/
  • 安装程序下载 https://developer.hashicorp.com/vagrant/install

安装后的一些配置

  • virtualbox 全局配置这里 Default Machine Folder 默认是C盘下,如果安装的虚拟机系统多的话,这个目录非常大,可以考虑换D盘
  • vagrant 的 box保存位置也是在C盘 默认是用户目录下 .vagrant.d目录,如果下载的镜像多这个也是很大,可以通过设置环境变量VAGRANT_HOME 改变box保存路径

NFS 文件共享

  • 可以安装插件 https://github.com/winnfsd/vagrant-winnfsd
  • vagrant plugin install vagrant-winnfsd
  • 测试过ubuntu 20.04下可以用, 新版本因为这个插件的BUG 不能用

系统选择

  • 镜像搜索 https://portal.cloud.hashicorp.com/vagrant/discover
  • 搜索时候要看 Providers 是否支持 virtualbox
  • 有的镜像最新版本可能不支持virtualbox, 所以还要看具体版本 https://portal.cloud.hashicorp.com/vagrant/discover/debian/bookworm64/versions
    alt text

  • 本地开发环境搭建一般可以用 ubuntu 目前可以选择 ubuntu/jammy64 对应 Ubuntu 22.04 LTS

  • https://portal.cloud.hashicorp.com/vagrant/discover/ubuntu
  • 服务器配置可以用 debian 比如 debian/bookworm64 (debian 12.2)
  • https://portal.cloud.hashicorp.com/vagrant/discover/debian

安装镜像初始化

选择正确版本进入页面
https://portal.cloud.hashicorp.com/vagrant/discover/debian/bookworm64/versions/12.20250126.1
alt text

打开终端选择一个工作目录执行下面代码。

vagrant init debian/bookworm64 --box-version 12.20250126.1
vagrant up

* 需要vagrantcloud.com 这个地址网络可以访问

目录下会创建一个 Vagrantfile 文件
可以用 vagrant ssh 就能直接进入系统,默认是vagrant 用户

# 登录后要切换root 账号
sudo -i

一些常用配置

可以编辑Vagrantfile, 修改后用 vagrant reload命令可以重新加载

# 修改默认ssh转发端口
config.vm.network "forwarded_port", guest: 22, host: 2222, id: "ssh", disabled: "true"
config.vm.network "forwarded_port", guest: 22, host: 2021

# host-only ip
config.vm.network "private_network", ip: "192.168.56.210"

# 项目共享目录, 下面3行是nfs配置 如果不能用就删除掉
config.winnfsd.logging = "on"
config.winnfsd.uid = 1
config.winnfsd.gid = 1
config.vm.synced_folder "d:/workspace", "/winshare", type: "nfs"

# CPU 内存 配置
config.vm.provider "virtualbox" do |vb|
    vb.cpus = 4
    vb.memory = "2048"
end

镜像导出导入

导出时候用的base 名字
alt text

# 导出box镜像
vagrant package --base ubuntu-focal64_default_1689302966657_76025 --output ./my-ubuntu-focal64.box

# 导入box
vagrant box add my-ubuntu-focal64 my-ubuntu-focal64.box

# 查看 box
vagrant box list

# 删除 box
vagran box remove xxxx

# 初始化
vagrant init my-ubuntu-focal64

初始化之后 在把原先的配置文件拿过来 在重启

vagrant 用户

默认情况下 vagrant ssh 登录的话是用私钥
vagrant ssh-config 命令 可以看到私钥的位置
alt text
ssh客户端上可以直接用这个私钥登录

  • 镜像导出导入后一般都会丢失这个私钥 导致无法启动, 可以加如下配置改变登录方式
    # 修改配置 添加下面3行
    config.ssh.username = "vagrant"
    config.ssh.password = "vagrant"
    config.ssh.insert_key = "false"
    

root 用户

默认情况下root账号是不可以用密码登录ssh的,有时候想要连接sftp 用root权限直接编辑文件,这时候可以用密钥登录的方式,直接使用vagrant账号的密钥

# 先切换到root账号
sudo -i

# 创建 root 的 .ssh 目录(如果不存在)
mkdir -p /root/.ssh

# 复制密钥授权文件
cp /home/vagrant/.ssh/authorized_keys /root/.ssh/

# 确保文件归 root 所有
chown -R root:root /root/.ssh