Vagrant 搭建 CentOS 环境

前言

macos 作为开发环境已经相当方便,有很丰富的工具,如 homebrew 很方便地安装各种开发工具。但终究与线上生产环境不同,即便安装的是相同的软件,安装目录,管理方式都有所不同。当项目很复杂,或者有多个项目时,很容易将mac本地环境弄得乱七八糟。

为了能与线上生产环境一致,尝试过用 docker, 由于我对dokcer的了解还太少,使用起来诸多不便

衡量各种方案后,最终选择用 vagrant 与 virtualBox 搭建一个完整的 linux 系统,这样能够与线上生产环境一致,也能很方便地进行移植。

环境准备

我选择的是 centos7.2 的镜像

安装

新建目录centos,作为vagrant的根目录

  • 导入下载的镜像
$ vagrant box add centos ~/Downloads/vagrant-centos-7.2.box # 将box命名为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 "mac 主机的绝对路径", "centos 虚拟机的绝对路径", :nfs => true, :mount_options => ['actimeo=2']
  • 设置内存

内存大小根据物理机内存设置,建议不要超过物理机内存的一半

如果要安装mysql5.7,内存不能低于2G

config.vm.provider "virtualbox" do |vb|
  vb.memory = "3072"
end

配置示例

  config.vm.box = "centos"
  config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 3306, host: 33060, host_ip: "127.0.0.1"
  config.vm.network "forwarded_port", guest: 5000, host: 5000, host_ip: "127.0.0.1"
  config.vm.network "private_network", type: "dhcp"
  config.vm.synced_folder "/Users/senlongzhong/code", "/www/web/", :nfs => true, :mount_options => ['actimeo=2']
  config.vm.synced_folder "/Users/senlongzhong/Downloads", "/home/vagrant/Downloads", :nfs => true, :mount_options => ['actimeo=2']

  config.vm.provider "virtualbox" do |vb|
    vb.memory = "4096"
  end

启动与连接

启动虚拟机

$ vagrant up

默认情况下,vagrant 会用 ssh 与物理机建立连接,如果提示连接不上,按 ctrl + c 先跳过验证,直接用账号密码(两者默认都是 vagrant )登录

登入虚拟机

$ vagrant ssh

通过 vagrant ssh-config 可查看私钥的路径

ssh-config

可以用vagrant默认生成的key,也可以将自己的私钥替换到 IdentityFile 指定的文件,连接虚拟机后再将公钥放到虚拟机中的 ~/.ssh/authorized_keys

默认的共享挂载目录:/home/vagrant

常用vagrant命令

  • vagrant up 启动

  • vagrant ssh 进入虚拟机

  • vagrant halt 关机

  • vagrant reload 重启

  • 导出与导入

$ vagrant package --base centos_default_1533259579120_24934 --out centos7.2.box # 导出box
$ vagrant box add centos ./centos7.2.box # 导入box

清空重新导入镜像

当需要重新导入镜像时,为避免出现各种奇奇怪怪的问题,清空以下内容:

# 将现有的box删除
$ vagrant box list
centos (virtualbox, 0)
$ vagrant box remove centos
$ vagrant global-status --prune
$ rm -rf .vagrant
$ rm -rf Vagrantfile
$ cd ~/VirtualBox VMs
$ ls
centos_default_1534145188471_82398
$ rm -rf ./*

删除 vagrant

$ sudo rm -rf /opt/vagrant
$ sudo rm -f /usr/local/bin/vagrant
$ sudo pkgutil --forget com.vagrant.vagrant

重启电脑后,再重新导入镜像

填坑记录

以下是遇到的一些坑,因人因系统而异,不一定会遇到

nginx不同步本地修改的静态文件

同一个文件,本地修改后,centos虚拟机能看到同步的修改,但怎么刷新都看不到变化,只有在centos里面再修改文件才有效。而动态文件,如php文件修改后实时能看到变化

解决:

将nginx.conf的配置修改:

sendfile off;

apache也有相同问题,修改配置:

EnableSendfile off
本作品采用《CC 协议》,转载必须注明作者和本文链接
it书童
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!