vagrant搭建centos环境
前言
macos作为开发环境已经相当方便,有很丰富的工具,如homebrew
类似于ubuntu的apt-get
和centos的yum
,很方便地安装各种开发工具。但终究与线上生产环境不同,即便安装的是相同的软件,安装目录,管理方式都有所不同。当项目很复杂,或者有多个项目时,很容易将mac本地环境弄得乱七八糟。
为了能与线上生产环境一致,尝试过用docker,并没有想象中的方便,可能是我对dokcer的了解太少。且觉得docker的门槛较高。
衡量各种方案后,最终选择用vagrant与virtualBox搭建一个完整的linux系统,这样能够与线上生产环境一致,也能很方便地进行移植。
环境准备
- 下载安装 virtualBox
- 下载安装 vagrant
- 使用迅雷下载 官方镜像
我选择的是 centos7.2 的镜像
安装
新建目录centos
,作为vagrant的根目录
- 导入下载的镜像
? centos vagrant Box add centos ~/Downloads/vagrant-centos-7.2.Box # 将Box命名为centos
- 初始化
? centos vagrant init
修改配置文件
设置Box名称
config.vm.Box = "centos"
端口转发
config.vm.network "forwarded_port",guest: 80,host: 8080,host_ip: "127.0.0.1"
macos不允许将本机的80端口转发,解决方案参照: mac设置端口转发
开启nfs
默认的virtualBox共享文件速度太慢,需要启用nfs默认
Vagrantfile 设置:
config.vm.network "private_network",type: "dhcp" config.vm.synced_folder "/Users/airmb/Downloads/work","/home/wwwroot/work",:nfs => true,:mount_options => ['actimeo=2']
设置内存
内存大小根据物理机内存设置,我的mac物理机是8G内存,分配了3G给虚拟机
如果要安装MysqL5.7,内存不能低于2G
config.vm.provider "virtualBox" do |vb| vb.memory = "3072" end
启动与连接
连接vagrant虚拟机有两种方式:
- 账号密码,两者均为 vagrant
- ssh key,可通过
ssh-config
查看私钥的路径
查看ssh-config
可以用vagrant默认生成的key,也可以将自己的私钥替换到 IdentityFile 指定的文件,连接虚拟机后再将公钥放到虚拟机中的
~/.ssh/authorized_keys
启动虚拟机
? centos vagrant up
连接进入虚拟机
? centos vagrant ssh
默认的共享挂载目录:/home/vagrant
常用vagrant命令
- vagrant up 启动
- vagrant ssh 进入虚拟机
- vagrant halt 关机
- vagrant reload 重启
- 导出与导入
? centos vagrant package --base centos_default_1533259579120_24934 --out centos7.2.Box # 导出Box ? centos vagrant Box add centos ./centos7.2.Box # 导入Box
清空重新导入镜像
当需要重新导入镜像时,为避免出现各种奇奇怪怪的问题,清空以下内容:
# 将现有的Box删除 ? centos vagrant Box list centos (virtualBox,0) ? centos vagrant Box remove centos ? centos vagrant global-status --prune ? centos rm -rf .vagrant ? centos rm -rf Vagrantfile ? centos cd ~/VirtualBox\ VMs ? VirtualBox VMs ls centos_default_1534145188471_82398 ? VirtualBox VMs rm -rf ./*
配置文件 Vagrantfile
端口转发
config.vm.network "forwarded_port",host: 8080
内存分配
config.vm.provider "virtualBox" do |vb| # # Display the VirtualBox GUI when booting the machine # vb.gui = true # # # Customize the amount of memory on the VM: vb.memory = "3072" end
目录挂载
config.vm.synced_folder "~/code","/home/wwwroot/code",:owner=> 'vagrant',:group=>'www',:mount_options => ['dmode=775','fmode=775']
填坑记录
Nginx不同步本地修改的静态文件
同一个文件,本地修改后,centos虚拟机能看到同步的修改,但怎么刷新都看不到变化,只有在centos里面再修改文件才有效。而动态文件,如PHP文件修改后实时能看到变化
解决:
sendfile off;
apache也有相同问题,修改配置:
EnableSendfile off