如何为Ansible配置Vagrant服务器

时间:2020-01-09 10:34:23  来源:igfitidea点击:

在本教程中,我们将向我们展示如何使用Ansible剧本来配置Vagrant盒子。配置管理是确保测试和开发服务器与生产服务器匹配的关键。没有它,就不可能预测应用程序在部署后的行为,因为每种环境的设置都可能略有不同。

我们将为本教程创建一个多服务器Vagrantfile。第一台服务器将是我们的NodeJS Web应用程序,第二台将是数据库服务器。

将使用两种不同的剧本-每个服务器角色一个。对于每个服务器配置的不同组件,每个剧本将具有多个Ansible角色。

工作区设置

为Vagrant工作区创建以下目录结构。该目录将托管Vagrantfile,Ansible剧本和角色。

/Vagrant
    Vagrantfile
  / Provisioning
    all.yml
    database.yml
    webapp.yml
    / roles
      / common
        / tasks
          main.yml
      / webapp
        / tasks
          main.yml
      / mysql
        / handlers
          main.yml
        / tasks
          main.yml
        / templates
          mysql.conf.j2

所有剧本

all.yml剧本会将所有服务器角色应用于目标主机。它将部署和配置我们的Web应用程序并安装数据库服务器。当我们要将所有角色整合到单个服务器上时,这很有用。

Webapp剧本

该webapp手册将配置服务器以托管我们的Web应用程序。配置完成后,还将应用程序部署到服务器上。

数据库剧本

数据库手册将安装和配置我们的后端数据库服务器MySQL。

Vagrant的Ansible提供者

准备好Ansible剧本和角色后,我们需要告诉Vagrant在预配阶段使用它们。

单服务器Vagrantfile

在我们的单服务器示例中,我们将使用all.yml剧本将所有服务器角色应用于实例。这是在台式机或者笔记本电脑上创建开发箱的最简单,最轻便的方法。

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"
  config.vm.box_check_update = true

  config.vm.hostname = "myserver01"
  config.vm.network "private_network", ip: "192.168.50.50"

  config.vm.provider "virtualbox" do |v|
    v.name = "myserver01"
    v.memory = 1024
    v.cpus = 1
    v.linked_clone = true
    v.gui = false
  end

  server.vm.provision "ansible" do |ansible|
    ansible.playbook = "provisioning/all.yml"
  end
endMulti Server Vagrantfile

多服务器Vagrantfile

为了更好地模拟暂存或者生产环境,我们可能需要将所有内容分离到不同的主机上。以下流浪者文件将创建三个实例,两个实例用于托管我们的Web应用程序,第三个实例用于托管我们的应用程序的数据库。

这两个webapp服务器将使用我们的webapp.yml剧本。数据库服务器将使用database.yml剧本。

Vagrant.configure("2") do |config|
    config.vm.box = "ubuntu/xenial64"
    config.vm.box_check_update = true

    config.vm.define "webapp1" do |server|
        server.vm.hostname = "webapp1"
        server.vm.network "private_network", ip: "192.168.50.30"
        server.vm.provider "virtualbox" do |v|
            v.name = "webapp1"
            v.memory = 768
            v.cpus = 1
            v.linked_clone = true
            v.gui = false
        end
        server.vm.provision "ansible" do |ansible|
            ansible.playbook = "provisioning/webapp.yml"
        end
    end

    config.vm.define "webapp2" do |server|
        server.vm.hostname = "webapp2"
        server.vm.network "private_network", ip: "192.168.50.31"
        server.vm.provider "virtualbox" do |v|
            v.name = "webapp2"
            v.memory = 768
            v.cpus = 1
            v.linked_clone = true
            v.gui = false
        end
        server.vm.provision "ansible" do |ansible|
            ansible.playbook = "provisioning/webapp.yml"
        end
    end

    config.vm.define "db1" do |server|
        server.vm.hostname = "db1"
        server.vm.network "private_network", ip: "192.168.50.32"
        server.vm.provider "virtualbox" do |v|
            v.name = "db1"
            v.memory = 1024
            v.cpus = 1
            v.linked_clone = true
            v.gui = false
        end
        server.vm.provision "ansible" do |ansible|
            ansible.playbook = "provisioning/mysql-server.yml"
        end
    end
end