前言
macos 作为开发环境已经相当方便, 有很丰富的工具, 如 homebrew 类似于 Ubuntu 的 apt-get 和 CentOS 的 yum, 很方便地安装各种开发工具. 但终究与线上生产环境不同, 即便安装的是相同的软件, 安装目录, 管理方式都有所不同. 当项目很复杂, 或者有多个项目时, 很容易将 Mac 本地环境弄得乱七八糟.
为了能与线上生产环境一致, 尝试过用 docker, 并没有想象中的方便, 可能是我对 dokcer 的了解太少. 且觉得 docker 的门槛较高.
衡量各种方案后, 最终选择用 Vagrant 与 VirtualBox 搭建一个完整的 Linux 系统, 这样能够与线上生产环境一致, 也能很方便地进行移植.
环境准备
下载安装 VirtualBox https://www.virtualbox.org/wiki/Downloads
下载安装 https://www.vagrantup.com/downloads.html
使用迅雷下载 官方镜像 http://www.vagrantbox.es/
我选择的是 centos7.2 的镜像
安装
新建目录 CentOS, 作为 Vagrant 的根目录
导入下载的镜像
- CentOS Vagrant box add CentOS ~/Downloads/Vagrant-CentOS-7.2.box
- # 将 box 命名为 CentOS
初始化
CentOS Vagrant init
会自动生成 Vagrantfile 配置文件
修改配置文件
设置 box 名称
box 名称须与上面命令指定的 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", guest: 80, 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 文件修改后实时能看到变化
解决:
将 nginx.conf 的配置修改:
sendfile off;
apache 也有相同问题, 修改配置:
EnableSendfile off
来源: http://www.jianshu.com/p/3807772c8456