Vagrant 搭建開發環境實踐

布魯布魯布魯發表於2021-10-30

介紹

Development Environments Made Easy
—官網標題

vagrant是一個命令列的虛擬機器管理程式。用於簡化搭建開發環境。

vagrant使用ruby語言基於Chef 開發。需要配合其他虛擬機器程式進行工作,如vmare、virualbox、hyper-v等。並通過 CLIVagrantFile(配置檔案)管理虛擬機器的所有功能。vagrant 使用自己的映象格式進行環境部署,即box。類似於虛機的iso或者docker中的映象。

選擇vagrant+virualbox這個組合,因為它們都是開源的、跨平臺的。vagrant搭建開發環境即簡單又強大。

安裝

官網下載安裝。其中virualbox可選擇安裝
VirtualBox Extension Pack。使用虛擬機器需要BIOS 開啟虛擬化。

VirtualBox 官網

https://www.virtualbox.org/

Vagrant 官網

http://www.vagrantup.com/

BOX查詢

https://app.vagrantup.com/boxes/search

幾個場景

下面介紹幾種vagrant 使用場景。所有步驟在WIN11系統下驗證過。

1、一行命令搭建基本的開發環境

在CMD命令列下啟動一個包含centos系統的虛擬機器。其中"centos/7"是box名,root使用者的預設密碼是vagrant。真簡單。

mkdir demo && cd demo && vagrant init centos/7 && vagrant up

2、單機開發環境

目標是搭建一個少量定製的單機開發環境。需要使用CLI命令和配置檔案來完成。

手動下載BOX

網速慢可以自己下載box檔案,並新增到本地box庫。

下載地址:

https://app.vagrantup.com/centos/boxes/7/versions/2004.01/providers/virtualbox.box

box新增到本地庫的命令

vagrant box add centos/7 CentOS-7-x86_64-Vagrant-2004_01.VirtualBox.box

**初始化 **進入命令列,建立一個目錄,用centos/7 box 初始化。

md demo
cd demo
vagrant init centos/7

基本的配置檔案 初始化後會在當前目錄生成名為 Vagrantfile 的檔案。以Ruby語言為格式。

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7" #box名稱
  config.vm.hostname="base" #虛擬機器作業系統裡的hostname
  config.vm.network "private_network", type: "dhcp" #使用私有網路,自動分配IP
  #config.vm.network "private_network", ip: "172.28.128.3"    #也可以配置靜態IP
  config.vm.provider "virtualbox" do |vb|
    vb.gui = false #啟動時不開啟GUI
    vb.memory = "4096" #記憶體限制4096MB
  end
end

常用命令

vagrant up #啟動虛擬機器
vagrant status #檢視虛擬機器狀態
vagrant ssh #連結虛擬機器
vagrant halt #關閉虛擬機器
vagrant destroy #刪除虛擬機器
vagrant reload #重啟虛擬機器,可以生效修改的配置。

3、叢集開發環境

目標是搭建一個執行在區域網中、包含多臺物理機和虛擬機器的叢集環境。

思路是安裝好公共box後,對其進行定製。打包成自定義box,分發到不同的物理機上部署。

使用vagrant的公共網路模式,為每個虛擬機器在區域網分配固定IP,叢集環境裡的任意物理機和虛擬機器可以直接互通。

初始化一個centos環境

md test
cd test
vagrant init centos/7

定製環境

允許使用者名稱密碼連結SSH

使用vagrant ssh 連結虛擬機器

vagrant ssh

su #切換 root使用者,密碼vagrant
vagrant

vi /etc/ssh/sshd_config #編輯ssh配置檔案

修改配置項、允許密碼登陸,並儲存。

PasswordAuthentication yes

service sshd restart #重啟ssh服務

作業系統設定

#修改時區
timedatectl set-timezone Asia/Shanghai
#關閉防火牆
systemctl stop firewalld
systemctl disable firewalld
#關閉Linux
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
#關閉swap 
swapoff -a #臨時關閉
sed -ri 's/.*swap.*/#&/' /etc/fstab #永久關閉
free -g #驗證,swap必須為0

設定阿里雲Centos映象源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
yum update -y

安裝Docker

#依賴
yum install -y yum-utils device-mapper-persistent-data lvm2
#源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#版本
yum list docker-ce --showduplicates | sort -r
#安裝
yum install docker-ce-18.03.1.ce-1.el7.centos  -y
#啟動
systemctl start docker
systemctl enable docker
#設定阿里雲docker映象源

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://mt1tth70.mirror.aliyuncs.com"]
}
EOF

systemctl daemon-reload
systemctl restart docker

自定義BOX

打包當前環境,預設名稱package.box。加入本地庫,取名base。

box本地倉庫 預設路徑 C:\Users\Administrator.vagrant.d\box

vagrant package
vagrant box add base package.box

配置檔案

Vagrant.configure("2") do |config|

  #虛擬機器1號 
  config.vm.define "node201" do |node1|
    node1.vm.box = "base" #使用自定義的box
    node1.vm.hostname = "node201"
    node1.vm.network "public_network", ip: "192.168.31.201"
  end

  #虛擬機器2號
  config.vm.define "node202" do |node2|
    node2.vm.box = "base"
    node2.vm.hostname = "node202"
    node2.vm.network "public_network", ip: "192.168.31.202"
  end

  # config.vm.define "node203" do |node3|
  #   node3.vm.box = "base"
  #   node3.vm.hostname = "node203"
  #   node3.vm.network "public_network", ip: "192.168.31.203"
  # end

  config.vm.provider "virtualbox" do |vb|
    vb.gui = false
    vb.memory = "4096"
    vb.cpus = 4
  end

end

部署叢集環境

將打包好的自定義box和配置檔案,複製到需要部署的各物理機,並且安裝vagrant環境。
使用 vagrant box add 將box新增到物理機的本地庫中。
使用 vagrant init base 初始化。
調整 Vagrantfile 並通過 vagrant up進行部署。

結語

擴充套件閱讀vagrant的CLI、VagrantFile、外掛、網路配置等可以在官網文件找到。

Documentation | Vagrant by HashiCorp (vagrantup.com)

相關文章