使用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的话,就可以了。

bannerAds