Vagrant 搭建 Linux

概述

在windows做开发的时候,发布上线的时候,总是由于运行环境的差异,而在线上发现一些不必要的问题,因此需要将本地的开发环境与线上运行环境一致,就可以避免这些问题。
在此技术上,考虑在window机器上搭建Linux环境,最常见的就是使用虚拟机。我使用的是vagrant来管理我的虚拟机,下面记录我搭建vagrant + vbox + centos的搭建过程。
该过程同样适用于其他的linux版本。

安装软件

  • **** 下载安装最新版本的vagrant ****
    下载页面中,有各种版本下的软件下载,特别需要注意的是,下载的时候会没有下载进度,估计是被墙了,最好能翻墙下载该软件。

  • **** 下载安装最新版本的VirtualBox ****
    这个下载起来就比较快了,直接安装相应版本的vbox即可。
    其实用vmware也可以来替代vbox的,但是个人感觉,vmware教vbox耗性能。自己试过,在同一个电脑上,安装vbox、vmware,vbox要比vmware快好多。

  • **** 安装好vagrant之后,软件会将vagrant命令,自动注册到系统变量,所以可以在命令行下直接执行vagrant --version命令测试是否安装成功。****
    截至目前位置,我们只是安装了容器软件,真正的linux系统并没有下载。通过vagrant来管理vbox的镜像包的话,有vagrant专用的box,自己下载的iso镜像文件,并不能用的。

  • **** 下载需要的版本的镜像包box ****
    其实也可以不用手动下载镜像包,因为在vagrant首先创建一个文件夹 box add的时候,也可以指定box包,直接在远程下载的。但是这个在国内的下载速度,也是非常慢的,所以,最好提前下载好,在vagrant add box的时候,直接指定包的位置即可。

安装Linux系统

  • **** 设定vbox默认虚拟电脑位置 ****
    如果不设置虚拟电脑目录的话,系统安装linux的时候,会将linux文件,安装到vbox默认的windows系统盘。没必要无故占用系统盘空间。因此这里提前约束好。

  • **** 创建vagrant的配置文件路径,该路径存放配置文件:Vagrantfile ****
    该路径,是vbox内控制linux配置的文件:设置网络、设置共享文件夹、设置linux内存等。并且默认,该目录会被自动挂在到虚拟机内的linux中

  • **** 添加、初始化、运行 ****
    进入上一步骤创建的路径目录。
    在目录内使用:vagrant box add linux_name box_path命令,添加box包到vagrant。linux_name是虚拟机内部linux系统名,是唯一标识vagrant中一个虚拟机的名字。box_path设置为刚才下载的box文件的全路径。
    在目录内使用:vagrant init命令,生成Vagrantfile配置文件。
    执行:vagrant up命令,初次安装。安装成功后,该命令启动系统。
    截止到目前为止,虚拟机中的系统已经安装完成。

常用的配置

  • **** 网络设置 ****
    关于网络设置,有3中设置:

    1. forwarded_port-端口映射:该模式是通过端口映射,来判别是访问主机,还是虚拟机。例如可以设置所有通过8989端口的访问,都映射到虚拟机内部的80端口:config.vm.forwarded_port 80, 8989。该方式优点是简单,容易设置。容易实现外网访问虚拟机。但是对于有多个端口需要映射配置的时候,就很吃力了。不可能每次增加一个端口,就增加一个映射关系的。

    2. private_network-私有网路:我用的最多的也是这种网络,他只允许主机和虚拟机互通。同网络的其他主机,不能访问该虚拟机。config.vm.network "private_network", ip: "192.168.33.188",该配置开启的时候,在vagrant reload配置文件的时候,会在本机创建一个host-only的网络。其实这种方式就是虚拟机的host-only模式。

    3. public_network-公用网络:和虚拟机一样,也是在内网的一个真实存在的机器,和其他主机可以相互访问。需要占用一个独立的IP:config.vm.network "public_network", ip: "192.168.1.120"

  • **** SSH连接-登录-账号-启用root ****
    默认的SSH登录的账号和密码是:vagrant vagrant。我们可以通过xshell客户端,通过vagrant账号进入系统然后:sudo paswd root命令,设置一个root账号的密码。
    然后退出xshell,直接用root账号连接即可。

  • **** 共享文件夹的设置 ****
    系统默认会将刚才创建的配置文件的目录挂载到虚拟机内部的:/vagrant目录。常用的配置选项有:

    1. create(boolean)--可选:默认为false,若配置为true,挂载到虚拟机上的目录若不存在则自动创建。

    2. disabled(boolean)--可选:默认为false,若为true,则禁用该项挂载

    3. owner(string):'www'--可选:虚拟机系统下文件所有者(确保系统下有该用户,否则会报错),默认为vagrant

    4. group(string):'www'--可选:虚拟机系统下文件所有组( (确保系统下有该用户组,否则会报错),默认为vagrant

    5. mount_options(array):["dmode=775","fmode=664"]--可选:dmode配置目录权限,fmode配置文件权限 //默认权限777

    6. type(string):--可选:指定文件共享方式,例如:'nfs',vagrant默认根据系统环境选择最佳的文件共享方式

    例如:需要如下配置:取消自动挂载的vagrant目录,将自动挂载的文件用户、用户组指定为:root,挂载的目录的权限设置为:775,可以做如下配置:

config.vm.synced_folder "e:/www", "/mnt/www", owner: "root", group: "root", mount_options: ["dmode=775","fmode=664"]
config.vm.synced_folder ".", "/vagrant", disabled:true
  • **** 设置虚拟机内存 ****
    将下面注释的这行打开,并且做如下设置:
    config.vm.provider "virtualbox" do |vb|
    	#vb.gui = true #这个选项可以不开启,控制vagrant启动的时候,是否启动vbox客户端。
    	vb.memory = "4096"	#占用内存大小。
    vb.memory = "4096"
    

常用命令

  • vagrant box add 新增box包
  • vagrant box list 列出当前vagrant中的包
  • vagrant box remove 删除vagrant中的包
  • vagrant init 初始化配置文件
  • vagrant up 启动系统
  • vagrant reload 重启系统,会重新载入Vagrantfile配置文件,一般有配置文件更改的时候,执行该命令。
  • vagrant halt 关闭系统