美文网首页
Vagrant+virtualbox搭建虚拟开发

Vagrant+virtualbox搭建虚拟开发

作者: 萧格 | 来源:发表于2017-11-24 17:24 被阅读0次

    1、软件下载

    2、安装

    下载好如上软件后,分别安装vagrant和virtualbox。

    • 在主机上新建一个目录:E:\workflow-project
      打开cmd命令提示符,进入新目录,以我上面的目录为例,输入
    cd E:/workflow-project
    
    • 添加box,把下载的镜像文件virtualbox.box复制到本目录E:\workflow-project下,执行
    vagrant box add centos7 virtualbox.box
    
    • 检查是否导入成功(出现图1说明已导入成功)
    vagrant box list
    
    图1
    • 输入初始化命令(ps:在目录E:\workflow-project下会生成Vagrantfile的配置文件)
    vagrant init centos7
    

    3、配置

    用编辑器打开Vagrantfile文件,进行简单配置。

    • 虚拟主机名称
    config.vm.hostname = "my_hostname"
    
    • 端口映射(指定ssh转发端口方法:禁用默认的ssh转发,再添加自定义转发)
    config.vm.network "forwarded_port", guest: 22, host: 2222, id: "ssh", disabled: "true"
    config.vm.network "forwarded_port", guest: 22, host: 2200
    

    如上操作:表示映射本机的2200端口到虚拟机的22端口

    • 如果需要自己自由的访问虚拟机,但是别人不需要访问虚拟机,可以使用private_network,并为虚拟机设置IP
    config.vm.network "private_network", ip: "192.168.33.10"
    
    • 目录映射(映射不成功,参考附件1)
    config.vm.synced_folder "E:/wxf/html","/data/www",:mount_options => ["dmode=777","fmode=666"]
    
    • 一些优化配置
    config.vm.provider "virtualbox" do |v|
      v.name = "xf-dev"  #虚拟机名称
      v.memory = "1024"  #内存大小
      v.cups = 2         #cup个数
    end
    

    4、启动

    进入目录E:\workflow-project执行命令:

    vagrant up
    

    虚拟机启动之后则可以通过 vagrant ssh 联入虚拟机进行进一步的环境配置,在Windows系统下,并不能直接通过 vagrant ssh 连到虚拟机,需要使用 Putty,Xshell 等第三方工具进行连接。连接地址127.0.0.1,端口2200。登录的帐号 vagrant 的密码为 vagrant

    • 首次登入可能会出现如下图2界面


      图2

      此时密码Password选项不可点击,则可以用 Public Key 方式登入系统,具体操作参照图3(点击浏览 - 文件 - 选择私钥)即可登录


      图3
    • 如需使用password方式登录则可以进入系统后执行命令
    sudo vim /etc/ssh/sshd_config
    

    修改PasswordAuthentication no为yes,重启vagrant reload。如图4

    图4

    PS:vagrant up 后出现如下错误信息;

    development: Warning: Authentication failure. Retrying...
    

    在配置文件中(vagrantFile)添加

    config.ssh.username = "vagrant"
    config.ssh.password = "vagrant"
    

    5、导出

    • 执行命令(xf-dev:虚拟机名称,my_box.box:导出的box文件名称)
    vagrant package --base xf-dev --output my_box.box
    

    完成后会在当前目录就会生成my_box.box,之后新建虚拟机则可使用这个box。如果事先在你的虚拟机里建立好了各种开发环境,那么你直接把这个box给你的团队其他成员用命令 vagrant box add my_box.box 进行安装,这样就可以省去一台台电脑部署的时间,还可以保持开发环境一致。很方便有木有。

    6、其他命令

    下面列举出一些常用的cmd操作命令

    vagrant up   #(启动虚拟机)
    vagrant halt   #(关闭虚拟机——对应就是关机)
    vagrant suspend    #(暂停虚拟机——只是暂停,虚拟机内存等信息将以状态文件的方式保存在本地,可以执行恢复操作后继续使用)
    vagrant resume    #(恢复虚拟机 —— 与前面的暂停相对应)
    vagrant box remove centos7    #(移除box,其中centos7是box名)
    vagrant destroy    #(删除虚拟机,删除后在当前虚拟机所做进行的除了Vagrantfile中的配置都不会保留)
    

    7、附件

    • 附件一
      在给虚拟机设置共享目录时,遇到如图5的错误
    图5

    解决方案:

    1. 在本地主机执行:vagrant plugin install vagrant-vbguest , 再运行 vagrant reload重启即可
    2. 在虚拟机中执行:sudo yum install gcc kernel kernel-devel -y

    8、开发环境搭建过程的坑及解决方案

    • 设置apache开机启动
    sudo systemctl enable httpd
    
    • 配置好开发环境缓存问题
      问题描述:配置好共享目录和开发环境后,可以正常访问网站,但是编辑主机静态文件(js/jpg/png等)时刷新页面不同步改变。
      当你尝试修改一个js,刷新页面js文件不会改变,是的,就算重启VM上任何服务,甚至重启VM,依旧没有用,当然,比起其他资源文件,浏览器的反应会强烈一些,因为浏览器会提示未知错误,而你通过浏览器查看你修改的JS文件,会看到文件尾巴有下面奇怪的随机字符:
      �����������������
    原因是:Apache或Nginx缓存造成。
    • Apache 处理方式
    sudo vim /etc/httpd/conf/httpd.conf
    EnableSendfile off
    
    • Nginx 处理方式
    sudo vim /etc/nginx/nginx.conf
    sendfile off
    
    • 配置apache虚拟主机后,只能进入欢迎页面(默认欢迎页面),不能进入虚拟主机目录页面
      解决方案:关闭SELinux,然后重新启动apache服务器
      • 查看SELinux状态:
      /usr/sbin/sestatus -v      ##如果SELinux status参数为enabled即为开启状态
      SELinux status:                 enabled
      getenforce                 ##也可以用这个命令检查
      
      • 关闭SELinux:
        • 临时关闭(不用重启机器):
        setenforce 0                  ##设置SELinux 成为permissive模式
                                      ##setenforce 1 设置SELinux 成为enforcing模式
        
        • 永久关闭(修改配置文件需要重启机器):
        sudo vim /etc/selinux/config
        SELINUX=disabled
        #重启机器即可
        
    • 配置私有网络报错
      修改vagrant的配置文件config.vm.network "private_network", ip: "192.168.33.10"vagrant up启动虚拟机报如下错误:
    [E:\test]$ vagrant reload
    ==> default: Clearing any previously set network interfaces...
    There was an error while executing `VBoxManage`, a CLI used by Vagrant
    for controlling VirtualBox. The command and stderr is shown below.
    
    Command: ["hostonlyif", "create"]
    
    Stderr: 0%...
    Progress state: E_FAIL
    VBoxManage.exe: error: Failed to create the host-only adapter
    VBoxManage.exe: error: Could not find Host Interface Networking driver! Please reinstall
    VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component HostNetworkInterfaceWrap, interface IHostNetworkInterface
    VBoxManage.exe: error: Context: "enum RTEXITCODE __cdecl handleCreate(struct HandlerArg *)" at line 94 of file VBoxManageHostonly.cpp
    

    百度谷歌了一通,在virtualbox 管理 - > 全局设定 -> 网络 - > tab 仅主机网络 - > 添加。但是报如下错误:

    Could not find Host Interface Networking driver!Please reinstall
    

    这是因为没有虚拟网卡的驱动。
    可以在安装virtualbox目录../Oracle VM VirtualBox中的 drivers\ network\ netadp6目录下看到VBoxNetAdp6.inf文件,右击安装即可。

    9、虚拟主机配置

    • apache下配置虚拟主机
    <VirtualHost *:80>
            DocumentRoot /data/www/kaifa
            ServerName kaifa.test.com
            ServerAlias kaifa.test.com
            ErrorLog /data/www/logs/kaifa-error_log
            CustomLog /data/www/logs/kaifa-access_log common
            <Directory /data/www/>
                    Options FollowSymLinks
                    AllowOverride All
                    Require all granted
            </Directory>
    </VirtualHost>
    

    相关文章

      网友评论

          本文标题:Vagrant+virtualbox搭建虚拟开发

          本文链接:https://www.haomeiwen.com/subject/pvdfbxtx.html