如何为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