基于 CentOS 的 Vagrant 部署流程

分类:Linux 评论: 0

Vagrant 是一个基于 Ruby 的工具,可以在单个工作流程中创建和管理虚拟开发环境的工具。

Vagrant 非常适合 PHP/Python/Ruby/Java 等语言开发的应用,可以将项目通过 Vagrant 封装为 Linux 开发环境分发给他人,防止因为环境不一致导致的问题。

Vagrant 支持多种底层虚拟化技术,包括 VirtualBox 、 VMware 等。不过 VMware 为收费软件,因此对应的 Vagrant 也为收费软件,因此本文采用 VirtualBox 。

构建环境

安装 VirtualBox

添加仓库

# curl -o /etc/yum.repos.d/virtualbox.repo http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox.repo

安装软件

# yum install VirtualBox-6.0

安装依赖

如果跳过本步,后续步骤会出现以下报错提示,因此推荐先进行安装然后再继续之后步骤。

报错

# /sbin/rcvboxdrv setup
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
This system is currently not set up to build kernel modules.
Please install the gcc make perl packages from your distribution.
Please install the Linux kernel "header" files matching the current kernel
for adding new hardware support to the system.
The distribution packages containing the headers are probably:
    kernel-devel kernel-devel-3.10.0-957.12.1.el7.x86_64

解决

# yum -y install kernel-headers kernel-devel

报错

# /sbin/rcvboxdrv setup
vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.
This system is currently not set up to build kernel modules.
Please install the gcc make perl packages from your distribution.

解决

# yum -y install gcc make perl

构建内核模块

# export KERN_VER=$(uname -r)
# /sbin/rcvboxdrv setup

稍等片刻后,输出以下内容无报错提示即为成功。

vboxdrv.sh: Stopping VirtualBox services.
vboxdrv.sh: Starting VirtualBox services.
vboxdrv.sh: Building VirtualBox kernel modules.

安装 Vagrant

访问官网下载页面根据系统下载预编译包。

# curl -O https://releases.hashicorp.com/vagrant/2.2.4/vagrant_2.2.4_x86_64.rpm

安装 RPM

# yum install vagrant_2.2.4_x86_64.rpm

使用 Vagrant

添加镜像

# vagrant box add hashicorp/precise64

可看到以下提示

==> box: Loading metadata for box 'hashicorp/precise64'
    box: URL: https://vagrantcloud.com/hashicorp/precise64
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) virtualbox
3) vmware_fusion

Enter your choice: 2

此处输入 2 回车即可。

==> box: Adding box 'hashicorp/precise64' (v1.1.0) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/hashicorp/boxes/precise64/versions/1.1.0/providers/virtualbox.box
    box: Download redirected to host: vagrantcloud-files-production.s3.amazonaws.com
==> box: Successfully added box 'hashicorp/precise64' (v1.1.0) for 'virtualbox'!

会自动下载沙盒镜像 Box。

创建环境

创建一个存放虚拟环境的目录

$ mkdir /home/kane/dev && cd /home/kane/dev

初始化沙盒

$ vagrant init hashicorp/precise64

启动沙盒

$ vagrant up

小贴士:执行命令后会看到一大段的提示信息,耐心等待即可。

连接沙盒

$ vagrant ssh

小贴士:连接至虚拟环境后即可开始配置环境,部署项目等操作。需要注意的是 宿主机的初始化目录会被映射为沙盒内的 /vagrant

配置相关

Vagrant 初始化后会在目录中生成一个名为 Vagrantfile 的配置文件。

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

小贴士:更多参数请参照配置文件,配置文件中都有详细的说明(英文)。

预置参数

Vagrant 提供一个集成化预安装功能,可以在初始化沙盒时自动执行用户指定的命令。便于快速生成环境。

打开配置文件 Vagrantfile ,移动至最后可以看到大段被注释的代码。

config.vm.provision "shell", inline: <<-SHELL
   apt-get update
   apt-get install -y apache2
SHELL

根据需求进行修改即可,在初始化沙盒时会根据写好的命令进行安装并配置。

小贴士:如果不是初次运行,同时又修改了这里的命令,想让系统再次运行这里面的命令,可以使用命令进行重载。

$ vagrant reload --provision

还可以把要运行的命令单独写在一个脚本中,存放在相同的目录下,然后加载此脚本即可。比如 bootstrap.sh

#!/usr/bin/env bash

apt-get update
apt-get install -y apache2
if ! [ -L /var/www ]; then
  rm -rf /var/www
  ln -fs /vagrant /var/www
fi

然后在 Vagrantfile 里这样添加:

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise64"
  ...

  config.vm.provision "shell", path: "bootstrap.sh"  # 添加这行
end

效果和直接写在 Vagrantfile 是一样的。

打包分发

配置好沙盒内的项目后关闭终端并关机,对沙盒进行打包。

$ vagrant package

执行后会生成一个名为 package.box 的沙盒镜像文件,将此文件传输给他人,使用此文件进行初始化即可得到一个完全相同的环境。

从镜像恢复

假定沙盒镜像文件存在 /home/kane/package.box ,终端执行以下命令。

添加镜像并命名为 Ubuntu

$ vagrant box add Ubuntu /home/kane/package.box

新建并用镜像 Ubuntu 初始化沙盒

$ mkdir /home/kane/Dev && cd /home/kane/Dev && vagrant init Ubuntu

常用命令

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

小贴士:更多 CLI 命令请参看官网文档

注意事项

参考链接

回复