|
|
|
|
移动端

如何安装并设置Vagrant?

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

作者:Christopher Shaw来源:Linux中国|2018-02-01 18:05

有奖调研 | 1TB硬盘等你拿 AI+区块链的发展趋势及应用调研


如何安装并设置Vagrant?

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

虚拟机,并不复杂

多年来,开发人员一直使用虚拟机作为其工作流程的一部分,允许他们交换和更改运行软件的环境,这通常是为了防止项目之间的冲突,例如需要 php 5.3 的项目 A 和需要 php 5.4 的项目 B。

并且使用虚拟机意味着你只需要你正在使用的计算机就行,而不需要专用硬件来镜像你的生产环境。

当多个开发人员在一个项目上工作时,它也很方便,他们都可以运行一个包含所有需求的环境,但是维护多台机器并确保所有的需求都具有相同的版本是非常困难的,这时 Vagrant 就能派上用场了。

使用虚拟机的好处

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

什么是 Vagrant

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

它围绕一个名为 VagrantFile 的配置文件而工作,这个配置文件告诉 Vagrant 你想要安装的操作系统,以及一些其他选项,如 IP 和目录同步。 你还可以在虚拟机上添加一个命令的配置脚本。

通过共享这个 VagrantFile,项目的所有开发人员全可以使用完全相同的虚拟机。

安装要求

安装 VirtualBox

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

  1. sudo apt-get install virtualbox

安装 Vagrant

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

安装增强功能

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

  1. vagrant plugin install vagrant-vbguest

配置 Vagrant

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

  1. mkdir ~/Vagrant/test-vm
  2. cd ~/Vagrant/test-vm

创建 VagrantFile:

  1. vagrant init

开启虚拟机:

  1. vagrant up

登录机器:

  1. vagrant-ssh

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

定制

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

VagrantFile:

  1. # -*- mode: ruby -*-
  2. # vi: set ft=ruby :
  3. # All Vagrant configuration is done below. The "2" in Vagrant.configure
  4. # configures the configuration version (we support older styles for
  5. # backwards compatibility). Please don't change it unless you know what
  6. # you're doing.
  7. Vagrant.configure("2") do |config|
  8. # The most common configuration options are documented and commented below.
  9. # For a complete reference, please see the online documentation at
  10. # https://docs.vagrantup.com.
  11.  
  12. # Every Vagrant development environment requires a box. You can search for
  13. # boxes at https://vagrantcloud.com/search.
  14. config.vm.box = "base"
  15.  
  16. # Disable automatic box update checking. If you disable this, then
  17. # boxes will only be checked for updates when the user runs
  18. # `vagrant box outdated`. This is not recommended.
  19. # config.vm.box_check_update = false
  20.  
  21. # Create a forwarded port mapping which allows access to a specific port
  22. # within the machine from a port on the host machine. In the example below,
  23. # accessing "localhost:8080" will access port 80 on the guest machine.
  24. # NOTE: This will enable public access to the opened port
  25. # config.vm.network "forwarded_port", guest: 80, host: 8080
  26.  
  27. # Create a forwarded port mapping which allows access to a specific port
  28. # within the machine from a port on the host machine and only allow access
  29. # via 127.0.0.1 to disable public access
  30. # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
  31.  
  32. # Create a private network, which allows host-only access to the machine
  33. # using a specific IP.
  34. # config.vm.network "private_network", ip: "192.168.33.10"
  35.  
  36. # Create a public network, which generally matched to bridged network.
  37. # Bridged networks make the machine appear as another physical device on
  38. # your network.
  39. # config.vm.network "public_network"
  40.  
  41. # Share an additional folder to the guest VM. The first argument is
  42. # the path on the host to the actual folder. The second argument is
  43. # the path on the guest to mount the folder. And the optional third
  44. # argument is a set of non-required options.
  45. # config.vm.synced_folder "../data", "/vagrant_data"
  46.  
  47. # Provider-specific configuration so you can fine-tune various
  48. # backing providers for Vagrant. These expose provider-specific options.
  49. # Example for VirtualBox:
  50. #
  51. # config.vm.provider "virtualbox" do |vb|
  52. # # Display the VirtualBox GUI when booting the machine
  53. # vb.gui = true
  54. #
  55. # # Customize the amount of memory on the VM:
  56. # vb.memory = "1024"
  57. # end
  58. #
  59. # View the documentation for the provider you are using for more
  60. # information on available options.
  61.  
  62. # Enable provisioning with a shell script. Additional provisioners such as
  63. # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
  64. # documentation for more information about their specific syntax and use.
  65. # config.vm.provision "shell", inline: <<-SHELL
  66. # apt-get update
  67. # apt-get install -y apache2
  68. # SHELL
  69. end

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

VagrantFile:

  1. # -*- mode: ruby -*-
  2. # vi: set ft=ruby :
  3.  
  4. Vagrant.configure("2") do |config|
  5. # Set the Linux Version to Debian Jessie
  6. config.vm.box = "debian/jessie64"
  7. # Set the IP of the Box
  8. config.vm.network "private_network", ip: "192.168.33.10"
  9. # Sync Our Projects Directory with the WWW directory
  10. config.vm.synced_folder "~/Projects", "/var/www/"
  11. # Run the following to Provision
  12. config.vm.provision "shell", path: "install.sh"
  13. end

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

install.sh:

  1. #! /usr/bin/env bash
  2. # Variables
  3. DBHOST=localhost
  4. DBNAME=dbname
  5. DBUSER=dbuser
  6. DBPASSWD=test123
  7.  
  8. echo "[ Provisioning machine ]"
  9. echo "1) Update APT..."
  10. apt-get -qq update
  11.  
  12. echo "1) Install Utilities..."
  13. apt-get install -y tidy pdftk curl xpdf imagemagick openssl vim git
  14.  
  15. echo "2) Installing Apache..."
  16. apt-get install -y apache2
  17.  
  18. echo "3) Installing PHP and packages..."
  19. 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
  20. #php5-suhosin-extension, php5-mysqlnd
  21.  
  22. echo "4) Installing MySQL..."
  23. debconf-set-selections <<< "mysql-server mysql-server/root_password password secret"
  24. debconf-set-selections <<< "mysql-server mysql-server/root_password_again password secret"
  25. apt-get install -y mysql-server
  26. mysql -uroot -p$DBPASSWD -e "CREATE DATABASE $DBNAME"
  27. mysql -uroot -p$DBPASSWD -e "grant all privileges on $DBNAME.* to '$DBUSER'@'localhost' identified by '$DBPASSWD'"
  28.  
  29. echo "5) Generating self signed certificate..."
  30. mkdir -p /etc/ssl/localcerts
  31. 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
  32. chmod 600 /etc/ssl/localcerts/apache*
  33.  
  34. echo "6) Setup Apache..."
  35. a2enmod rewrite
  36. > /etc/apache2/sites-enabled/000-default.conf
  37. echo "
  38. <VirtualHost *:80>
  39. ServerAdmin webmaster@localhost
  40. DocumentRoot /var/www/
  41. ErrorLog ${APACHE_LOG_DIR}/error.log
  42. CustomLog ${APACHE_LOG_DIR}/access.log combined
  43. </VirtualHost>
  44.  
  45. " >> /etc/apache2/sites-enabled/000-default.conf
  46. service apache2 restart
  47.  
  48. echo "7) Composer Install..."
  49. curl --silent https://getcomposer.org/installer | php
  50. mv composer.phar /usr/local/bin/composer
  51.  
  52. echo "8) Install NodeJS..."
  53. curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
  54. apt-get -qq update
  55. apt-get -y install nodejs
  56.  
  57. echo "9) Install NPM Packages..."
  58. npm install -g gulp gulp-cli
  59.  
  60. echo "Provisioning Completed"

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

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

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

【编辑推荐】

  1. 最全整理 | 121个Ubuntu终端常用快捷键
  2. 在Ubuntu上安装并使用YouTube-DL
  3. 谷歌桌面系统将从 Ubuntu 迁移到基于 Debian 的 gLinux
  4. 如何创建定制的Ubuntu Live CD镜像
  5. Debian取代Ubuntu成为Google内部Linux发行版的新选择
【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

人月神话:32周年中文纪念版

在软件领域,很少能有像《人月神话》一样具有深远影响力并且畅销不衰的著作。Brooks博士为人们管理复杂项目提供了最具洞察力的见解。既有很...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊