创建虚拟机并使用Ansible构建Web服务器

整个组织的结构

我是第一次撰写文章。由于我还是一位刚刚成为工程师的新人,所以如果有任何错误的描述或其他方面,还请您能够指出,我将不胜感激。

这次我会将其作为备忘录写下来。

我们以整体为目标追求这样的结构。

スクリーンショット 2019-01-22 15.59.11.png
    • VM1にAnsibleを導入

 

    • 導入したAnsibleでVM2にapacheを導入し、webサーバーを構築する

 

    構築したwebサーバにMacからアクセスする。

创建虚拟机

環境

ホストOS:Mac
VM1:centOS7.2
VM2:centOS7.2

前提

vagrant導入済(ver 5.2)
VirtualBox導入済(ver 2.2.3)

Vagrantfile的内容如下所示。

Vagrant.configure(2) do |config|
  config.vm.define "ansible_server" do |vm01|
        vm01.vm.box = "bento/centos-7.2"
        vm01.vm.hostname = "ansible-server"
        vm01.vm.network :private_network, ip: "192.168.1.10"
        vm01.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2210
        vm01.vm.network :forwarded_port, id: "http", guest: 80, host: 3400
  end
  config.vm.define "ansible_target" do |vm02|
        vm02.vm.box = "bento/centos-7.2"
        vm02.vm.hostname = "ansible-target"
        vm02.vm.network :private_network, ip: "192.168.1.20"
        vm02.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2220
        vm02.vm.network :forwarded_port, id: "http", guest: 80, host: 3500
  end
end

使用 `vagrant up` 命令启动虚拟机 VM1 并进行 SSH 连接。我已经以 root 权限成功登录。初始密码为 “vagrant”。

vagrant up
$ ssh root@localhost -p 2210
root@localhost's password:

[root@ansible-server ~]#

使用Ansible进行安装

我們將立即安裝 Ansible。

[root@ansible-server ~]# yum install ansible

要使用 Ansible 对目标服务器进行配置管理,需要确保目标服务器可以进行 SSH 通信。因此,将公钥发送到目标服务器,以便能够进行 SSH 通信。

[root@ansible-server ~]# ssh-keygen -t rsa

[root@ansible-server ~]# ssh-copy-id root@192.168.1.20

提供服务

我创建了一个名为「web」的文件夹,并在那里进行了操作。
我按照下面的配置进行了配置。 (Wǒ de le .)

[root@ansible-server web]# tree
.
├── apache.yml
├── files
│   └── index.html
└── hosts

在hosts文件中,您需要写下Ansible要进行配置的服务器的IP地址。

[ansible-target]
192.168.1.20

apache.yml是Ansible自动处理的任务,根据以下方式编写。


 - name: install and start apache
    hosts: ansible-target
    become: yes

  tasks:
  - name: httpd package is present
    yum:
      name: httpd
      state: latest

  - name: latest index. html file is present
    copy: src=./files/index.html dest=/var/www/html/

  - name: httpd is started
    service:
      name: httpd
      state: started

  - name: start firewalld
    command: systemctl start firewalld.service

  - name: open 80
    command: firewall-cmd --zone=public --add-service=http --permanent

  - name: restart firewall
    command: firewall-cmd --reload

index.html在这里。


<p>herohero</p>

在实际进行配置之前,我使用了–check选项进行确认。

ansible-playbook --check -i hosts apache.yml

PLAY [install and start apache] **************************************************************************************************************************
・
・
PLAY RECAP ***********************************************************************************************************************************************
192.168.1.20               : ok=4    changed=3    unreachable=0    failed=0

在这个实施中,当然会排除掉。

[root@ansible-server web]# ansible-playbook -i hosts apache.yml
・
・
PLAY RECAP ***********************************************************************************************************************************************
192.168.1.20               : ok=7    changed=6    unreachable=0    failed=0

当使用vagrant创建虚拟机时,我对80号端口进行了3500号端口的转发设置,所以当访问localhost:3500时与稍微不同版本和内容的检查上有一些差异。

スクリーンショット 2019-01-22 17.37.50.png

我已经成功连接了。

这次遇到了困难的地方

为什么仅仅开放端口80时,无法从Mac上访问?
经过一番调查,我发现有一篇文章中写道,通过进行端口转发即可访问。所以我在Vagrantfile的设置中添加了HTTP端口转发设置,然后就能够访问了。
此外,我在创建VM2时没有使用Ansible进行防火墙设置,保持了默认设置,仍然可以通过localhost:3500进行访问。
我会继续学习这方面的网络知识。

我非常感谢您提供的信息参考页 https://qiita.com/t_nakayama0714/items/fe55ee56d6446f67113c ,对于描述部分我在这个页面上得到了很多帮助。

广告
将在 10 秒后关闭
bannerAds