使用Vagrant配置并创建属于自己的CentOS box

在使用Vagrant创建虚拟机时,我们要使用CentOS的box来创建虚拟机,而官方提供的box是原版的box,创建完成后还需要自己手动配置环境。我们可以创建一个已经装载好自己需要的常用软件依赖的box,然后将这个box重复使用。

先讲一下相关知识:

  • CentOS7自带的Python版本为2.7。
    python2.7,也就是2版,依然是一种长期支持的稳定版,是传统python;同时系统的yum也只能在python2环境下使用。
    而python3.x版本是一个研究型的开发版,为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下兼容。

  • Linux很多应用都安装在/usr/local下面(usr指的是Unix System Resource,不是指user),而/usr/bin下面的都是系统预装的可执行程序(python2就在这里面),会随着系统升级而改变;如果两个目录下有相同的可执行程序,谁优先执行受到PATH环境变量的影响,比如我的一台服务器的PATH变量为
    echo $PATH
    /usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/dean/bin
    这里/usr/local/bin优先于/usr/bin。

安装centos7原版虚拟机方法请参考实验一第四条:安装Vagrant,并使用Vagrant安装CentOS

安装完成后使用XShell以root用户身份登录
然后update一下:yum -y update
完成后重启一下:reboot,重启完成后重新连进去

一、在CentOS虚拟机中安装Python3

由于可以使用PyCharm位每个项目都创建一个唯一的CentOS虚拟机,所以我们在这里直接装原版Python3:
安装方法可参考之前的实验(直接装在/usr/bin目录下,并将python软链直接指向python3,然后修复yum命令)
或者参考该博文(装在/usr/local/bin目录下,把用户自定义的配置放入/etc/profile.d/目录中):
CentOS7安装Python3环境(无需修复yum命令) – 小武的兴趣部落 – CSDN博客

注意:
“3.7.0”要换成“3.6.6”

安装常用软件:

yum -y install git zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel epel-release openssl-devel kernel-devel gcc

安装pip:

yum -y install python-pip

更新pip:

pip install --upgrade pip

安装flask和Jinja2:

pip install flask jinja2

至此,我们就已经制作了一个带有Python3环境的CentOS虚拟机了。

二、打包BOX

先关闭刚刚创建的虚拟机
然后以管理员身份打开cmd,进入刚刚创建的虚拟机的Vagrantfile所在的文件夹
执行以下语句:

vagrant package

完成后便会在该目录下生成一个“package.box”,这个box即为打包好当前环境的box

现在将该box加载到vagrant的box list中:

vagrant box add --name 'my-virtualbox' package.box

看是否添加成功:

vagrant box list

新建一个文件夹,用来存放init该box后产生的Vagrantfile文件:

cd ..
mkdir myCentOS
cd myCentOS
123

Init该box:

vagrant init my-virtualbox

完成后便可在myCentOS文件夹中就可以看到自己创建的box的Vagrantfile文件。

Vagrant使用方法

1.虚拟机操作

1.1 查看vagrant中有多少个虚拟机

E:>vagrant box list
centos7 (virtualbox, 0)

这个命令的返回结果表示我的vagrant 中有一个虚拟机,虚拟机的名字是centos7

1.2 新增一个vagrant虚拟机

E:>md centos7test

E:>cd centos7test

E:centos7test>vagrant box add centos7test E:vagrantvagrant-centos-7.2.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'centos7test' (v0) for provider:
    box: Unpacking necessary files from: file:///E:/vagrant/vagrant-centos-7.2.box
    box: Progress: 100% (Rate: 117M/s, Estimated time remaining: --:--:--)
==> box: Successfully added box 'centos7test' (v0) for 'virtualbox'!

E:centos7test>vagrant box list
centos7     (virtualbox, 0)
centos7test (virtualbox, 0)

参数解析:

  • add 表示新增虚拟机
  • centos7test 这个是虚拟增虚拟机的名字
  • E:vagrantvagrant-centos-7.2.box 这个是镜像文件所在位置

1.3 创建一个vagrant配置文件

E:centos7test>vagrant init centos7test
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

1.4 打开虚拟机

先cd 到虚拟机所在目录。然后使用vagrant up命令启动虚拟机

E:centos7test>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'centos7test'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: centos7test_default_1538399987116_82773
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection reset. Retrying...
    default: Warning: Connection aborted. Retrying...
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default:
    default: Guest Additions Version: 4.3.30
    default: VirtualBox Version: 5.2
==> default: Mounting shared folders...
    default: /vagrant => E:/centos7test

1.5 关闭虚拟机

使用vagrant halt 命令关闭虚拟机

E:centos7test>vagrant halt
==> default: Attempting graceful shutdown of VM...

1.6 重载虚拟机配置文件

使用vagrant reload 命令重载虚拟机配置文件

E:centos7test>vagrant reload

2.虚拟机配置

虚拟机配置都放在虚拟机所在目录下,文件名是Vagrantfile,没有扩展名。

2.1 修改端口映射

先打开Vagrantfile, 发现都是# ,井号代表注释。在 Vagrant.configure(“2”) do |config| 下面新增一行()

config.vm.network "forwarded_port", guest: 80, host: 8080

这句话代表 把虚拟机的80端口映射成宿主机的8080端口

2.2 修改虚拟机内存

配置文件里有写好的配置方法,直接修改这个就行了,但是要注意把注释打开。

  config.vm.provider "virtualbox" do |vb|  
    # Customize the amount of memory on the VM:
    vb.memory = "1024"
  end

2.3 修改网卡设置

先打开Vagrantfile。在 Vagrant.configure(“2”) do |config| 下面新增一行()

  config.vm.network "private_network", ip: "192.168.56.10"

使用Vagrant和Virtual Box搭建虚拟开发环境

一、Vagrant介绍

未分类

Vagrant是一款用来构建虚拟开发环境的外挂工具,可以简化虚拟机配置和管理。它底层支持VirtualBox、VMware、AWS等,非常适合使用php/python/ruby/java语言开发web应用。
Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它使用Oracle的开源VirtualBox虚拟化系统,使用Chef创建自动化虚拟环境。

下载安装:
点击前往官网下载https://www.vagrantup.com/downloads.html

Vagrant支持全平台的系统。

未分类

安装过程也是简单粗暴,直接下一步就好。注意,安装之后并没有出现程序图标(至少我的Mac没有),需要在命令行里敲vagrant查看有没有安装成功。如果不行,请检查一下$PATH里面是否包含vagrant所在的路径。
安装Vagrant也一并把Virtual box安装下,虽然Vagrant也支持VM虚拟机,不过是收费的。安装Virtual box可以免费使用。

二、Vagrant命令

未分类

三、使用Vagrant安装配置虚拟机

安装有两种方式,可以在线安装也可以离线安装,考虑到国内互联网大环境,不推荐在线安装。这里采用离线安装的方式。

0x1 下载Box镜像

安装虚拟机需要下载ISO镜像,创建虚拟机并配置环境等一系列步骤。而Vagrant开源社区提供了许多已经打包好的操作系统,我们称之为box。你可以从box下载地址(下文列出),找到你想要的box,当然你也可以自己制作一个。

  • 官方仓库:https://atlas.hashicorp.com/boxes/search
  • 官方镜像:https://vagrantcloud.com/boxes/search
  • 第三方仓库:http://www.vagrantbox.es/

0x2 安装Box

将你下载的Box放在你需要的文件夹里,打开终端。输入:

vagrant init centos/7 //创建虚拟机
vagrant up  //运行

未分类

这样就开始创建虚拟机了,但是如果出现下面的报错:

未分类

说明电脑没有开启Intel的虚拟化技术,需要进入BIOS打开。

未分类

安装好了之后会发现Virtual box下面多了一台虚拟机,说明安装完成。

未分类

0x2 SSH连接

经过以上操作后,我们完成了centos7虚拟机的安装,现在需要登录虚拟机,进行操作,有以下三种方式:

  • 在开发环境的目录(有Vagrantfile的地方),登录虚拟机
vagrant ssh
  • 使用第三方工具,如secureCRT)或系统ssh命令进行登录,IP为Vagrantfile中指定的hostonly地址,用户名与密码默认都是vagrant

  • 在宿主机的命令行,ssh到本地端口的方式登录。观察客户机的22端口映射到宿主机的是多少,一般是2200或者2222,用户名与密码默认都是vagrant

$ ssh -p 2222 127.0.0.1

0x3 Box的删除

想要删除box首先退出SSH连接状态

exit //退出ssh连接
vagrant destory //删除虚拟机

vagrant + centos/7 搭建自己的本地开发环境

作为前端的童鞋们,也许很少接触到服务器相关的知识,但是要做一名合格的软件工程师,就不得不用到这些『软技能』啦,在踩了无数次坑后,终于搭建好属于自己的开发环境,成就感妥妥的。

简单介绍

  • 本文基于MacOS High Sierra 10.13.3 系统,系统的差异可能导致搭建过程中出现不同问题,请自行Google哦。
  • vagrant是一款利器,利用 vagrant + vitualBox 可以搭建虚拟开发环境并且把代码同步共享到linux虚拟机,你可以把这个虚拟机配成和生产环境一样的。还可以将自己的系统打包成虚拟机镜像,发给小伙伴们使用。
  • vagrant 常用来做开发环境的部署工具,而 docker 是一种虚拟化技术,生产环境上基本上使用docker,并且更轻量级 ,当然你也可以折腾一下docker。
  • centos 与 ubuntu 都是 linux 发型版本之一,
    但通常来说公司都是使用centos作为自己生产环境的系统。

工具及要安装的软件

  • Mac
  • vitualBox
  • vagrant
  • centos/7
  • 宝塔面板(简单好用的服务器管理面板工具)
  • SwitchHosts(好用的hosts管理工具)

安装

到官网下载并安装vitualBox,我下载的是OS X 版的,版本号是 5.2.12
再安装vagrant,此处选择Mac os 版本,以上就根据安装器的提示进行安装即可。
打开终端进到mac系统的宿主目录,创建一个存放你的配置的文件夹, 名字最好取得简单易懂,此处取为centos_vagrant:

$  ~mkdir centos_vagrant

复制代码去网上查找可用的 box , 可以把box理解为类似于iso的镜像文件,搭载了你需要的系统,这里我们去官网查看:

未分类

找到要下载的镜像,点进去,发现可以用vagrant 命令下载并且初始化box:

未分类

但是由于网速原因,在终端下载安装简直比龟速还龟速,这里提供其他两种方法下载:

  1. 去网上找找别人分享的 box文件,这里分享了一个,下载到一开始创建的文件夹centos_vagrant中,但是分享的可能与官网版本有差异,这一点需要注意。

  2. 依然在终端运行vagrant init centos/7 命令,但是在运行过程中会发现终端将box文件原地址打印了出来,见下图, 一出现该地址,即可按 ctrl + c 退出
    将该地址复制出来去浏览器里访问下载,比在终端通过命令行下载快得多,当然这些都需要科学上网才能完成。

未分类

搭建环境

了解vagrant常用命令

$ vagrant

未分类

安装 box

进入到刚刚创建的centos_vagrant文件夹,如果里面有vagrantfile文件, 先删除它,刚刚下载好的box文件,也放到这个文件夹,重命名一下,这里命名为centos-7.box
打开终端,进入到centos_vagrant文件夹,使用以下命令:

$ vagrant box add centos-7.box
$ vagrant init centos-7
$ vagrant up

这个过程最好保证你的应用 vitualBox 是开着的

设置文件及目录共享

  • 可以将常用的命令加入到alias 里,在全局使用,因为我安装了zsh,所以编辑.zshrc并保存,没有安装的同学找到.bashrc或.bash_profile进行编辑。
#vagrant-centos
alias centos_up='cd ~/centos_vagrant && vagrant up'
alias centos_status='cd ~/centos_vagrant && vagrant status'
alias centos_ssh='cd ~/centos_vagrant && vagrant ssh'
alias centos_halt='cd ~/centos_vagrant && vagrant halt'
alias centos_reload='cd ~/centos_vagrant && vagrant reload --provision'
alias centos_vi='cd ~/centos_vagrant && vi Vagrantfile'
  • 修改vagrantfile
    在本地随意建一个文件夹,假设为centos_vagrant_project,使用 centos_ssh或者vagrant ssh(后面默认使用centos_xxx),登录到虚拟机
    使用 ls -al命令,会发现虚拟环境里只有.ssh、.bashrc等文件

在虚拟机也创建一个,最好是同名的文件夹,方便管理

$ mkdir centos_vagrant_project

重开终端,使用 centos_vi对vagrantfile进行编辑,并且一定要去掉前面的#号注释!!( 不会使用vim 命令的也可使用文本编辑),
修改如下:

未分类

第一个文件夹目录是你本机要映射到虚拟机的目录,第二个是你虚拟机上的目录,第二句config.vm.synced…是将原本的默认路径禁止掉
但是这里有个坑,在我以为配置完成后,centos_reload重启后,在本机的centos_vagrant_project文件夹中做了一些改动,发现在虚拟机里并没有任何变化,经过排查,发现是虚拟机映射的那个目录(后面那个)路径不对,应该是:/home/vagrant/centos_vagrant_project ,即这个路径是绝对路径, pwd命令可以查看文件路径
需要注意的是,前面的本机的目录 ~/centos_vagrant_project里面的波浪线代表的是宿主目录,即 /users/username
这样目录映射共享就做好了,在本机的文件夹下,添加一个文件,会发现在虚拟机里的文件也同步了。

外部访问与端口转发

  • 自己安装Nginx去做域名映射太复杂,这里推荐一个简便的工具——宝塔面板,当然你也可以自己安装Nginx去折腾…
  • 登录到虚拟机,使用 root 账户
$ centos_ssh
$ sudo su - 

使用以下命令安装:

$ yum install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh && sh install.sh

安装完成后,会分配一个账户及密码给你,一定要记好

未分类

如果之前你已经装了Nginx,可以使用命令删除它

$ yum remove nginx
  • 修改vagrantfile做端口转发与外部访问
    centos_vi打开并编辑vagrantfile文件,配置如下

未分类

简单说一下,guest是虚拟机上对应的端口,host是本机对应的端口,由于我本机80端口常用来做项目,避免哪天不小心开着虚拟机,端口被占用,还一直找不到原因,所以选择了不常用的8089
本机的8888端口也对应虚拟机的8888端口,即之前安装宝塔的时候它需要的端口。配置好后重启虚拟机,浏览器里输入127.0.0.1:8888,使用之前分配给你的账户和密码,登录到宝塔面板,登录后最好改个好记的账户名和密码

域名映射

  • 打开宝塔面板,在 “软件管理” 中安装你需要的,比如:Nginx、PHP、Mysql…
  • 在 “网站” 中可以添加站点,但是使用宝塔面板建站的时候默认给你建到了 www/wwwroot目录下,不过问题也不大
  • 推荐使用 SwitchHosts 软件管理你本地的hosts

域名映射示例

  • 在本地创建test_erp文件夹,路径为’~/my-pro/test_erp’
  • 新建站点时,路径为/www/wwwroot/test_erp,域名为test-erp.com
  • 建好站点不用再进到虚拟机建目录,宝塔会帮你创建好
  • 使用SwitchHosts配置hosts站点:127.0.0.1 test-erp.com
  • 增加vagrantfile的配置,做好目录映射,重启虚拟机
  • 浏览器中使用 test-erp.com:8089访问

宝塔域名配置:

未分类

页面如下:

未分类

本机文件路径:

未分类

虚拟机文件路径:

未分类

vagrantfile文件配置:

未分类

打包镜像

$ vagrant package --output centos-7-ydj.box --vagrantfile Vagrantfile

输出结果:

➜  centos_vagrant vagrant package --output centos-7-ydj.box --vagrantfile Vagrantfile
==> default: Attempting graceful shutdown of VM...
==> default: Clearing any previously set forwarded ports...
==> default: Exporting VM...
==> default: Compressing package to: /Users/zhangyilan/centos_vagrant/centos-7-ydj.box
==> default: Packaging additional file: Vagrantfile
➜  centos_vagrant ls
Vagrantfile      centos-7-ydj.box centos-7.box

打包完成!!

tips

  • 每次修改完vagrantfile文件或者对虚拟机做了操作,一定要reload重启!!
  • Nginx配置易出现403 Forbbiden 权限问题,涉及到linux 的 目录/用户/权限 等系列问题
  • 端口、文件名等等,主机和虚拟机最好保持一致,不然会很头疼的
  • 涉及到服务器等相关的,不学点 linux、vim 命令,几乎动不了手…

结语

折腾服务器,搭建环境是一个需要耐心、恒心的过程,会遇到各种各样的问题,这个时候就需要去google,不断排查bug,并且要记录,免得再次掉坑里。
合理使用工具也很重要,毕竟咱不是专业的运维er…
Finally , 小哥哥小姐姐们,如果觉得OK,不要吝啬你的小心心咯 (´▽`ʃ♡ƪ),躁起来吧!

Vagrant 中安装 Mysql 如何从外边链接

在 Vagrant 中安装 Mysql 后从外部链接需要三步

  • 设置私有 ip
  • 去掉绑定 127.0.0.1
  • 对所有 ip 开放

设置私有 ip

修改 Vagrantfile 添加 private_network,这样外部可以通过该 ip 链接

config.vm.network "private_network", ip: "192.168.33.10"

这步需要放在第一步来完成,随后重新加载配置

$ vagrant reload

去掉绑定 127.0.0.1

如果你是使用 rpm 来安装的话,修改 /etc/mysql/mysql.conf.d/mysql.cnf,将绑定 127.0.0.1 这一行注释掉

# bind-address            = 127.0.0.1

对所有 ip 开放

登陆 Mysql 并对所有外网 ip 开放权限

$ mysql -uroot -p
> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_mysql_password' WITH GRANT OPTION;

这样从外部通过如下命令就可以访问了

$ mysql -uroot -p -h 192.168.33.10

注意

如果在生产环境上的话建议只对指定 ip 开放权限

> GRANT ALL PRIVILEGES ON *.* TO 'root'@'213.1.2.1' IDENTIFIED BY 'your_mysql_password' WITH GRANT OPTION;

Vagrant搭建虚拟化开发环境

1、安装 VirtualBox

下载地址:https://www.virtualbox.org/wiki/Downloads

2、安装 Vagrant

下载地址:http://downloads.vagrantup.com

3、添加Box

到 vagrantcloud 上找一个 box.

下载地址:http://www.vagrantbox.es

方式一:使用http远程添加

vagrant box add boxName http://BoxUrl

方式二:使用本地box文件

vagrant box add boxName D:/centos-7.0-x86_64.box

个人推荐先使用迅雷将Box下载到本地,再使用方式二安装,因为墙的原因,线上安装会很慢

4、初始化开发环境

vagrant init boxName

接下来执行开机命令,就会进入安装

vagrant up

等个几分钟左右,就安装成功了。成功之后可以输入一下命令可以连接进虚拟机:

vagrant ssh

链接成功之后,就可以对该系统进行操做了

5、常用命令

vagrant init  # 初始化
vagrant up  # 启动虚拟机
vagrant halt  # 关闭虚拟机
vagrant reload  # 重启虚拟机
vagrant ssh  # SSH 至虚拟机
vagrant status  # 查看虚拟机运行状态
vagrant destroy  # 销毁当前虚拟机

错误处理:

在运行 vagrant up时系统没有响应,卡在那不动,系统是win7。

两种解决方式:

  1. 网上有人说是因为VirtualBox和Vagrant版本不对,下载互相匹配的版本即可,我网上找了一些说是可以的匹配版本试了还是不行,放弃了。

  2. 将windows7自带的是powershell 2.0 可以自己升级 到 powershell 5.1。可行

powershell下载地址:https://github.com/PowerShell/PowerShell/releases
下载对应的版本安装即可

参考资料:

Vagrant官方文档 www.vagrantup.com/docs/

Vagrant搭建虚拟化开发环境 www.jianshu.com/p/3c3f35436c05

使用 Vagrant 打造跨平台开发环境 segmentfault.com/a/1190000000264347

Vagrant简介和安装配置 rmingwang.com/vagrant-commands-and-config.html

在windows 7中vagrant up 无反应,没任何信息输出 blog.csdn.net/cow66/article/details/77993908

Vagrant的安装与使用

未分类

什么是 Vagrant?简而言之,这是一个与虚拟机一起工作的工具,可以让你自动创建和删除虚拟机。
— Christopher Shaw

Vagrant 对于虚拟机来说是一个强大的工具,在这里我们将研究如何在 Ubuntu 上设置和使用 Virtualbox 和 Vagrant 来提供可复制的虚拟机。

虚拟机,并不复杂

多年来,开发人员一直使用虚拟机作为其工作流程的一部分,允许他们交换和更改运行软件的环境,这通常是为了防止项目之间的冲突,例如需要 php 5.3 的项目 A 和需要 php 5.4 的项目 B。
并且使用虚拟机意味着你只需要你正在使用的计算机就行,而不需要专用硬件来镜像你的生产环境。
当多个开发人员在一个项目上工作时,它也很方便,他们都可以运行一个包含所有需求的环境,但是维护多台机器并确保所有的需求都具有相同的版本是非常困难的,这时 Vagrant 就能派上用场了。

使用虚拟机的好处

  • 你的虚拟机与主机环境是分开的
  • 你可以根据你代码的要求裁剪一个定制虚拟机
  • 不会影响其他虚拟机
  • 可以运行在你的主机上无法运行的程序,例如在 Ubuntu 中运行一些只能在 Windows 运行的软件

什么是 Vagrant

简而言之,这是一个与虚拟机一起工作的工具,可以让你自动创建和删除虚拟机。
它围绕一个名为 VagrantFile 的配置文件而工作,这个配置文件告诉 Vagrant 你想要安装的操作系统,以及一些其他选项,如 IP 和目录同步。 你还可以在虚拟机上添加一个命令的配置脚本。
通过共享这个 VagrantFile,项目的所有开发人员全可以使用完全相同的虚拟机。

安装要求

安装 VirtualBox

VirtualBox 是运行虚拟机的程序,它可以从 Ubuntu 仓库中安装。

sudo apt-get install virtualbox

安装 Vagrant

对于 Vagrant 本身,你要前往 https://www.vagrantup.com/downloads.html 查看适用于你的操作系统的安装软件包。

安装增强功能

如果你打算与虚拟机共享任何文件夹,则需要安装以下插件。

vagrant plugin install vagrant-vbguest

配置 Vagrant

首先我们需要为 Vagrant 创建一个文件夹。

mkdir ~/Vagrant/test-vm
cd ~/Vagrant/test-vm

创建 VagrantFile:

vagrant init

开启虚拟机:

vagrant up

登录机器:

vagrant-ssh

此时,你将拥有一个基本的 vagrant 机器,以及一个名为 VagrantFile 的文件。

定制

在上面的步骤中创建的 VagrantFile 看起来类似于以下内容
VagrantFile:

    # -*- mode: ruby -*-
    # vi: set ft=ruby :
    # All Vagrant configuration is done below. The "2" in Vagrant.configure
    # configures the configuration version (we support older styles for
    # backwards compatibility). Please don't change it unless you know what
    # you're doing.
    Vagrant.configure("2") do |config|
        # The most common configuration options are documented and commented below.
        # For a complete reference, please see the online documentation at
        # https://docs.vagrantup.com.

        # Every Vagrant development environment requires a box. You can search for
        # boxes at https://vagrantcloud.com/search.
        config.vm.box = "base"

        # Disable automatic box update checking. If you disable this, then
        # boxes will only be checked for updates when the user runs
        # `vagrant box outdated`. This is not recommended.
        # config.vm.box_check_update = false
        # Create a forwarded port mapping which allows access to a specific port
        # within the machine from a port on the host machine. In the example below,
        # accessing "localhost:8080" will access port 80 on the guest machine.
        # NOTE: This will enable public access to the opened port
        # config.vm.network "forwarded_port", guest: 80, host: 8080

        # Create a forwarded port mapping which allows access to a specific port
        # within the machine from a port on the host machine and only allow access
        # via 127.0.0.1 to disable public access
        # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

        # Create a private network, which allows host-only access to the machine
        # using a specific IP.
        # config.vm.network "private_network", ip: "192.168.33.10"
        # Create a public network, which generally matched to bridged network.
        # Bridged networks make the machine appear as another physical device on
        # your network.
        # config.vm.network "public_network"

        # Share an additional folder to the guest VM. The first argument is
        # the path on the host to the actual folder. The second argument is
        # the path on the guest to mount the folder. And the optional third
        # argument is a set of non-required options.
        # config.vm.synced_folder "../data", "/vagrant_data"

        # Provider-specific configuration so you can fine-tune various
        # backing providers for Vagrant. These expose provider-specific options.
        # Example for VirtualBox:
        #
        # 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 = "1024"
        # end
        #
        # View the documentation for the provider you are using for more
        # information on available options.

        # Enable provisioning with a shell script. Additional provisioners such as
        # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
        # documentation for more information about their specific syntax and use.
        # config.vm.provision "shell", inline: <<-SHELL
        #   apt-get update
        #   apt-get install -y apache2
        # SHELL
    end

现在这个 VagrantFile 将创建基本的虚拟机。但 Vagrant 背后的理念是让虚拟机为我们的特定任务而配置,所以我们删除注释和调整配置。
VagrantFile:

    # -*- mode: ruby -*-
    # vi: set ft=ruby :

    Vagrant.configure("2") do |config|
      # Set the Linux Version to Debian Jessie
      config.vm.box = "debian/jessie64"
      # Set the IP of the Box
      config.vm.network "private_network", ip: "192.168.33.10"
      # Sync Our Projects Directory with the WWW directory 
      config.vm.synced_folder "~/Projects", "/var/www/"
      # Run the following to Provision
      config.vm.provision "shell", path: "install.sh"
    end

现在我们有一个简单的 VagrantFile,它将 Linux 版本设置为 debian jessie,设置一个 IP 给我们使用,同步我们感兴趣的文件夹,并最后运行 install.sh,这是我们可以运行 shell 命令的地方。
install.sh:

    #! /usr/bin/env bash
    # Variables
    DBHOST=localhost
    DBNAME=dbname
    DBUSER=dbuser
    DBPASSWD=test123

    echo "[ Provisioning machine ]"
    echo "1) Update APT..."
    apt-get -qq update

    echo "1) Install Utilities..."
    apt-get install -y tidy pdftk curl xpdf imagemagick openssl vim git

    echo "2) Installing Apache..."
    apt-get install -y apache2

    echo "3) Installing PHP and packages..."
    apt-get install -y php5 libapache2-mod-php5 libssh2-php php-pear php5-cli php5-common php5-curl php5-dev php5-gd php5-imagick php5-imap php5-intl php5-mcrypt php5-memcached php5-mysql php5-pspell php5-xdebug php5-xmlrpc
    #php5-suhosin-extension, php5-mysqlnd

    echo "4) Installing MySQL..."
    debconf-set-selections <<< "mysql-server mysql-server/root_password password secret"
    debconf-set-selections <<< "mysql-server mysql-server/root_password_again password secret"
    apt-get install -y mysql-server
    mysql -uroot -p$DBPASSWD -e "CREATE DATABASE $DBNAME"
    mysql -uroot -p$DBPASSWD -e "grant all privileges on $DBNAME.* to '$DBUSER'@'localhost' identified by '$DBPASSWD'"

    echo "5) Generating self signed certificate..."
    mkdir -p /etc/ssl/localcerts
    openssl req -new -x509 -days 365 -nodes -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -out /etc/ssl/localcerts/apache.pem -keyout /etc/ssl/localcerts/apache.key
    chmod 600 /etc/ssl/localcerts/apache*

    echo "6) Setup Apache..."
    a2enmod rewrite
    > /etc/apache2/sites-enabled/000-default.conf
    echo "
    <VirtualHost *:80>
            ServerAdmin webmaster@localhost
            DocumentRoot /var/www/
            ErrorLog ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>

    " >> /etc/apache2/sites-enabled/000-default.conf
    service apache2 restart 

    echo "7) Composer Install..."
    curl --silent https://getcomposer.org/installer | php 
    mv composer.phar /usr/local/bin/composer

    echo "8) Install NodeJS..."
    curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - 
    apt-get -qq update
    apt-get -y install nodejs 

    echo "9) Install NPM Packages..."
    npm install -g gulp gulp-cli

    echo "Provisioning Completed"

通过上面的步骤,在你的目录中会有 VagrantFile 和 install.sh,运行 vagrant 会做下面的事情:

  • 采用 Debian Jessie 来创建虚拟机
  • 将机器的 IP 设置为 192.168.33.10
  • 同步 ~/Projects 和 /var/www/ 目录
  • 安装并设置 Apache、Mysql、PHP、Git、Vim
  • 安装并运行 Composer
  • 安装 Nodejs 和 gulp
  • 创建一个 MySQL 数据库
  • 创建自签名证书

通过与其他人共享 VagrantFile 和 install.sh,你可以在两台不同的机器上使用完全相同的环境。

使用 Vagrant 管理虚拟机

未分类
使用 Vagrant 可以很方便的管理虚拟机,只需要一行命令可以操作管理虚拟机,也可以重新打包成新的镜像,分享他人使用。

安装 Vagrant

可以通过 Homebrew 使用命令行安装,可以直接去 Vagrant 官网(https://www.vagrantup.com)下载安装包手动安装。

// 命令行安装 Vagrant
brew install Caskroom/cask/vagrant 

虚拟机需要用到虚拟机软件,比如 Virtualbox,VMware,Parallels Desktop 等等,因为 Virtualbox 开源且免费,所以此处使用 Virtualbox。安装 Virtualbox 同样可以通过命令行或者官网(https://www.virtualbox.org)下载安装包手动安装。

// 命令行安装 Virtualbox
brew install Caskroom/cask/virtualbox

Vagrant Box

Box 是 Vagrant 使用的一种包含虚拟机镜像、虚拟机配置和 Vagrant 配置的封装包文件。在 Vagrant 提供的云服务(https://vagrantcloud.com/)上可以下载到其他人制作好的 Box。

添加 Box

Vagrant 添加 Box 的命令为:

vagrant box add <name>

此处以 CentOS 7 为例,如果指定的 Box 在本地电脑上不存在,Vagrant 会到云上自动下载执行:

vagrant box add centos/7

安装成功后界面如下:

未分类

完成以后,可以查看一下在本地上的 Box 列表:

vagrant box list

也可将 Box 手动下载到本地电脑上,再执行 vagrant box add 命令去手工添加 Box:

vagrant box add <name> <path>

升级 Box

检查是否有可用的升级,执行命令:

vagrant box outdated

返回:

Checking if box 'centos/7' is up to date...

执行升级:

vagrant box update

删除 Box

不再需要的镜像可以从电脑中删除掉,执行:

vagrant box remove <box name>

即使你删除了安装在电脑上的镜像,已经使用这个镜像创建的我虚拟机也仍然是可以正常使用的。不过为了更安全一些,你最好在删除镜像之前 ,先去销毁所有使用了这个镜像创建的虚拟机。

创建虚拟机

添加了 Box 以后,我们就可以用 Vagrant 基于这个 Box 去创建虚拟机了。首先需要创建一个目录,这个目录就是项目所在的目录,它会自动跟虚拟机上的某个目录同步,也就是在你电脑上的这个目录里的文件,同样可以在虚拟机里面的某个目录里找到。

我是在桌面上新建了一个 www 有目录,然后再进入到这个目录:

cd ~/desktop
mkdir www
cd www

然后使用 vagrant init 命令进行初始化,完成以后,在上面建的目录中会创建一个叫 Vagrantfile 的文件。

启动虚拟机

启动虚拟机,执行命令:

vagrant up

完成以后,可以使用 vagrant status 命令来查看虚拟机的状态,如果返回的是 running 说明虚拟机启动成功,现在就可以使用 SSH 连接到虚拟机,去控制它了。

控制虚拟机

使用命令行控制虚拟机,首先需要进入到项目的目录。

连接虚拟机 SSH,执行命令:

vagrant ssh

连接成功后,会返回提示符:

[vagrant@localhost ~]$

退出虚拟机 SSH,执行命令:

exit

暂停虚拟机,执行命令:

vagrant suspend

重新恢复启动,执行命令:

vagrant resume

虚拟机重启,执行命令:

vagrant reload

关闭虚拟机,执行命令:

vagrant halt

删除虚拟机

不打算再用的虚拟机,可以把它删除,直接删除项目的目录是不行的,需要使用命令去删除虚拟机。进行到项目所在目录,然后执行:

vagrant destroy

#EOF

Vagrant 开发环境配置

需要安装的软件

  • Vagrant

  • provider

    • VirtualBox(Free, recommend)

    • VMware

    • AWS

常用命令

安装

安装、启动、进入虚拟机就参见这个链接吧。注意:

be careful about rm -rf /, since Vagrant shares a directory at /vagrant with the directory on the host containing your Vagrantfile
vagrant init <box-name-on-cloud> # 生成 Vagrantfile 文件
vagrant up [--provider=virtualbox|vmware_fusion|aws] # 下载、配置、启动虚拟机
vagrant ssh # 连接虚拟机
vagrant destroy
vagrant reload [--provision] # 重新载入配置
vagrant share # 通过 ngrok 内网穿透功能实现让全世界人可以访问虚拟机的服务
vagrant status # 查看虚拟机状态

搜索可用虚拟机镜像(box):Discover Vagrant Boxes – Vagrant Cloud

其他镜像:http://www.vagrantbox.es/

销毁

vagrant suspend # 休眠
vagrant halt # 关机
vagrant destroy # 关机并完全销毁所有相关资源

打包

vagrant package # 打包生成 package.box 文件
vagrant box add <vm-name> <box-file-path> # 添加box

自定义配置

配置都保存在 Vagrantfile 这个文件里。

(待续)

碰到的问题

VBoxManage path on OSX

/Applications/VirtualBox.app/Contents/MacOS/VBoxManage

Fix it by soft link

ln -s /Applications/VirtualBox.app/Contents/MacOS/VBoxManage /usr/local/bin/VBoxMange

vagrant up无反应 on Win7

因为windows上vagrant和virtualbox版本不兼容,参见在windows 7中vagrant up 无反应,没任何信息输出 成功解决,但是出现 0x80004005 错误。

E_FAIL (0x80004005) on Win7

返回 代码: E_FAIL (0x80004005)
组件: Machine
界面: IMachine {480cf695-2d8d-4256-9c7c-cce4184fa048}

Try to solve but failed, possible solutions:

  • vagrant up 出现错误:使用vagrant部署开发环境遇到的坑 – CSDN博客
  • Vagrant error on Windows 10 · Issue #195 · scotch-io/scotch-box

结论

本文介绍了vagrant和安装,配置,启动和打包。还有,垃圾windows!

vagrant+virtualbox遇到的坑

这两天用vagrant+virtualbox搭建环境,按照以前的方法,先把它们都下载下来都是最新版本。接着傻瓜式的安装,添加box、初始化,接着vagrant up启动。然而并没有启动起来,光标一直在那里闪烁。瞬间意识到踩坑了。经过百度,Google,都说是版本问题,果断换版本。
这时候的用的版本VirtualBox-5.1.18-114002-Win.exe、vagrant_1.9.3.msi。完事之后vagrant up,结果命令错误,一个很奇怪的问题,提示没有配置系统变量,但是我已经配置了,还是提示一样的错误。
具体提示

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
"rsync" could not be found on your PATH. Make sure that rsync
is properly installed on your system and available on the PATH.

解决方法:

打开目录,C:UsersAdministrator.vagrant.dboxescentos7.0virtualboxVagrantfile

Vagrant.configure("2") do |config|
  config.vm.base_mac = "525400cae48b"
  config.vm.synced_folder ".", "/vagrant", type: "rsync"
end

改成

Vagrant.configure("2") do |config|
  config.vm.base_mac = "525400cae48b"
  config.vm.synced_folder ".", "/vagrant", type: "virtualbox"
end