美文网首页
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