使用Ansible来配置一个包含nginx和php的环境
我尝试使用Ansible安装了nginx+php。
环境
・Ansible服务器
・制作Web服务器←这次使用Ansible来制作
我在EC2上创建的。
– 版本是Amazon Linux AMI release 2016.03。
安装 Ansible。
yumでインストールすると実行時にエラーが発生したのでpipでインストールしました
$ sudo pip install ansible
$ ansible --version
ansible 2.1.0.0
配置连结
接続先を定義します。
/etc/ansible/hosts 的含义是 “Ansible 主机清单”。
[webservers]
server01
[]はグループ名ですので、クライアントが複数ある場合はホスト名を追加します。
我将进行SSH的config配置。
根目录下的.ssh/config
Host server01
HostName xxx.xxx.xxx.xxx
Port 22
User ec2-user
IdentityFile ~/.ssh/ansible-key
IdentityFileには接続先の秘密鍵を格納しておきます。
核实连接
我会尝试通过ping来测试一下。
※对于EC2,在安全组中需要允许ICMP。
$ ansible all -m ping
xxx.xxx.xxx.xxx | SUCCESS => {
"changed": false,
"ping": "pong"
}
创作PlayBook
我将创建一个称为playbook的文件来描述服务器的配置。
首先,我会创建一个基本的yaml文件。
$ vi hoge.yml
将ec2-user在所有主机上以sudo模式运行。
- name: install and configure the web
hosts: all
remote_user: ec2-user
become: yes
roles:
- nginx
接下来,我们会创建一个存储配置文件的文件夹。
$ mkdir roles
$ cd roles
创建Role
紧接着是创建角色。
角色是Ansible读取的模块单位。有一种是将nginx和php等模块作为一个WEB组件来管理,还有一种是将nginx和php分别管理服务的方式。但在本次中,我们将根据服务进行分开管理。
$ ansible-galaxy init nginx
$ ansible-galaxy init php
执行ansible-galaxy将创建模板。
nginx/
├ 默认设置
│ └ main.yml
├ 文件
├ 处理器
│ └ main.yml
├ 元数据
│ └ main.yml
├ README.md
├ 任务
│ └ main.yml
├ 测试
│ ├ 目录
│ └ test.yml
└ 变量
└ test.yml
各个目录的意思已经在ClassMethod的网站上总结了。参考:网站
nginx的配置
我会修改nginx的task目录下的main.yml文件。
$ vi nginx/tasks/main.yml
我会从Yum上安装Nginx,并设置为始终启动,然后启动服务。
# tasks file for nginx
- name: Install NGINX.
yum: name=nginx
- command: chkconfig nginx on
- command: service nginx restart
如果在默认仓库中Nginx的版本过旧,则选择↓
- name: Install NGINX.
yum: name={{item}}
with_items:
- http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
# enabled=0
- replace: dest=/etc/yum.repos.d/{{item}} regexp="enabled *= *1" replace="enabled=0"
with_items:
- nginx.repo
- yum: name=nginx
- command: chkconfig nginx on
- command: service nginx restart
试一试
$ ansible-playbook hoge.yml
PLAY [install and configure the web] *******************************************
TASK [setup] *******************************************************************
ok: [xxx]
TASK [nginx : Install NGINX.] **************************************************
ok: [xxx] => (item=[u'http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm'])
TASK [nginx : replace] *********************************************************
ok: [xxx] => (item=nginx.repo)
PLAY RECAP *********************************************************************
xxx : ok=3 changed=0 unreachable=0 failed=0
确认主机端是否已安装。
$nginx -v
nginx version: nginx/1.8.1
php的配置
接下来是关于php的配置
$ vi php/tasks/main.yml
# tasks file for php
- name: Install PHP
yum: name={{ item }} state=present enablerepo=epel
with_items:
- php
- php-pgsql
- php-devel
- php-mbstring
- php-gd
- php-fpm
- php-pecl-apc
#php setting
- lineinfile: dest=/etc/php.ini
regexp=';date.timezone ='
line='date.timezone = Asia/Tokyo'
- lineinfile: dest=/etc/php.ini
regexp='session.gc_maxlifetime ='
line='session.gc_maxlifetime = 1800'
- lineinfile: dest=/etc/php.ini
regexp='memory_limit ='
line='memory_limit = 256M'
#php-fpm setting
- lineinfile: "dest=/etc/php-fpm.d/www.conf
state=present
regexp='^user = apache'
line='user = nginx'"
- lineinfile: "dest=/etc/php-fpm.d/www.conf
state=present
regexp='^group = apache'
line='group = nginx'"
- command: chkconfig php-fpm on
- command: service php-fpm restart
- command: chown nginx /var/lib/php/session
- command: chgrp nginx /var/lib/php/session
#apc setting
- lineinfile: dest=/etc/php.d/apc.ini
regexp='apc.mmap_file_mask='
line='apc.mmap_file_mask=/dev/zero'
- lineinfile: dest=/etc/php.d/apc.ini
regexp='apc.shm_size='
line='apc.shm_size=128M'
我正在前面的段落中使用yum安装php模块。
接下来,我们还可以连续进行php.ini、php-fpm和apc的配置。非常方便!
完成后再执行
$ ansible-playbook hoge.yml
如果在主机上创建并确认能够访问php.info的话,就可以了。