使用Ansible在虚拟机中安装nginx

首先

在进行网页开发时常常使用的

    • nginx

 

    • php

 

    • mysql

 

    memcached

我将把以上的内容安装到用Vagrant创建的虚拟机中。
这次我将尝试安装nginx。

环境

    • ホストマシンはMac OS X 10.7.5

 

    仮想マシンはcentos6.5

准备

以下是必需的东西。

    • vagrant (インストール方法はコチラ)

 

    ansible (インストール方法はコチラ)

ansibleのplaybookを作成

以下の順番でplaybookを作っていきます。

    • ディレクトリ作成

 

    • インベントリファイル作成(仮想マシンのホスト情報)

 

    • playbook(local.yml)作成とタスク追加

 

    • nginx周りのタスク追加(インストール&設定など)

 

    confファイル

创建目录

$ cd /tmp/vagrant-centos
$ mkdir provisioning

インベントリファイル作成

当执行ansible时,需要知道要针对哪个主机执行任务。

将来的考虑到分离暂存、生产和环境,该主机相关信息的描述文件被称为清单文件。

$ mkdir inventory
$ touch inventory/local

我会在已创建的文件中添加主机信息。
这次我们选择了以下的设置。

# vi: set ft=yaml:
[local]
localhost ansible_ssh_port=2222 ansible_ssh_user=vagrant ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key

简要介绍每个项目的内容…

    • [local]・・・playbook(local.yml)内で対象ホストを指定する際に使用

 

    • localhost・・・対象ホスト

 

    • ansible_ssh_port・・・localhostにsshで入る時のport

 

    • ansible_ssh_user・・・localhostにsshで入る時のユーザー

 

    ansible_ssh_private_key_file・・・localhostにsshで入る時の秘密鍵

就是这样的感觉。

创建playbook(local.yml)并添加任务。

local.yml是用于管理针对虚拟机执行的任务的文件。
我们将在local.yml中添加安装nginx的任务。
注意:正如文件扩展名(.yml)所示,playbook将以yml格式进行编写。

---
# file: provisioning/local.yml
 - name: Nginx Playbook # タスク名
  hosts: local          # 対象ホスト 
  sudo: yes             # sudoするか
  roles:                # 実際のタスクを記述しているディレクトリ
    - nginx
  tags:                 # タスクをタグ付け
    - nginx

这就是全部了。

关于roles,我稍微解释一下。

roles是用来描述实际nginx安装和各种任务的地方。
当执行playbook,并执行名为”Nginx Playbook”的任务时,
ansible会去provisioning/roles/目录下找nginx,
并执行各种任务。

在nginx周围添加任务(如安装和配置等)。

我们将安装Nginx并添加各种任务。
首先,我们要创建目录和yml文件。

$ mkdir provisioning/roles
$ mkdir provisioning/roles/nginx
$ mkdir provisioning/roles/nginx/tasks
$ touch provisioning/roles/nginx/tasks/main.yml
$ mkdir provisioning/roles/nginx/templates

在roles下创建一个名为nginx的目录的原因是为了在将来添加php、mysql等内容时能够清晰地进行分隔。

在templates目录的使用方法是将为项目定制的conf文件放在这里,
然后用它来生成目标主机。

接下来…
我们将在main.yml文件中添加各种任务。

---
# file: provisioning/roles/nginx/tasks/main.yml
- name: install nginx
  yum: name=nginx state=present

- name: put nginx.conf
  template: src=roles/nginx/templates/nginx.conf.j2 dest=/etc/nginx/nginx.conf

- name: put conf.d/default.conf
  template: src=roles/nginx/templates/default.conf.j2 dest=/etc/nginx/conf.d/default.conf

- name: put conf.d/virtual.conf
  template: src=roles/nginx/templates/virtual.conf.j2 dest=/etc/nginx/conf.d/virtual.conf

- name: set auto start nginx
  command: chkconfig nginx on
- name: restart nginx
  command: service nginx restart

就这样吧。

conf文件

将以下文件放置在直接的目录下。

    • nginx.conf.j2

 

    • default.conf.j2

 

    virtual.conf.j2

由于ansible使用Jinja2作为模板引擎,所以文件被命名为.j2。

这样(.conf)直接使用也没问题,但是在动态插入值时使用变量可能会需要吧?我觉得。(还没做…orz)

准备工作已经完成。

执行战略手册

有两种方法可以执行playbook,一种是使用vagrant,另一种是使用ansible。

由于要从Vagrant运行,所以需要在Vagrantfile中添加配置。

  # nginx用の設定をssh設定の下あたりに追加
  config.vm.network :forwarded_port, guest: 80, host: 8080

  # ↓を一番下に追加します
  config.vm.provision :ansible do |ansible|
    ansible.playbook = "provisioning/local.yml"
    ansible.inventory_path = "provisioning/inventory/local"
  end

请参阅此处获取有关其他设置的信息。

太长了…
好了,我们来启动并运行虚拟机。

$ vagrant up
$ vagrant provision
PLAY [Nginx Playbook] ******************************

GATHERING FACTS ************************************
・・・・

在某些网络环境下,可能需要很长时间。
有时候没有反应会让人恼火。

请在完成后使用”vagrant ssh”命令登录到虚拟机并进行各种确认。
在浏览器中输入”localhost:8080″访问,将显示nginx的页面。
就这些了!!

闲话

对于那些从未运行过”vagrant up”的机器,
当运行”vagrant up”时,会在创建机器后进行配置。
在第二次及以后,请使用”vagrant provision”来进行配置。

广告
将在 10 秒后关闭
bannerAds