使用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”来进行配置。