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

