PHP
Ansible

Ansible でインストール (php 5.6)

More than 3 years have passed since last update.

php 5.6 を Ansible の Playbook を用いてインストールしてみたので、その備忘録を。

インストールは yum からのインストール + 設定ファイルの編集だけなので、Playbook も簡単に記述することが出来ます。

Apache の投稿をしたので今回はそちらも合わせて参照してください。

Ansible でインストール (Apache 2.2)

Ansible でインストール (Apache 2.4)

今回は Apache 2.2 / php 5.6 の組み合わせでインストールします。


環境


  • CentOS 6.7

  • ansible 2.0

※開発環境利用の為、iptables / SELinux については事前に無効化しております。

※yum で "Developer tools" グループを インストールし、必要なコマンドは適宜導入しています。


Playbook の記述

Playbook は Role 構造で記述します。

Role 作成方法については こちら を参照してください。

構成は以下の通りです。

.

├── group_vars
│ └── webservers # 各タスクで使用する変数定義
├── hosts
├── roles
│ └── web
│ ├── handlers
│ │ └── main.yml # httpd handler の定義
│ └── tasks
│ ├── main.yml # 各インストール yaml の呼び出し
│ ├── install_apr.yml # apr-devel インストール
│ ├── install_apr_util.yml # apr-util-devel インストール
│ ├── install_distcache.yml # distcache インストール
│ ├── install_httpd_2_2.yml # httpd インストール
│ └── install_php_5_6.yml # php インストール
└── webservers.yml

以下のファイルについては Apache の投稿を参照してください。


  • group_vars/webservers

  • handlers/main.yml

  • tasks/install_apr.yml

  • tasks/install_apr_util.yml

  • tasks/install_apr_distcache.yml

  • tasks/install_httpd_2_2.yml

hosts

インストール対象ホストの設定です。

今回は localhost (実行サーバ自身) です。


hosts

[webservers]

localhost

webservers.yml

メイン Playbook です。

対象の web Role との関連付けを行っています。


webservers.yml

---

- name: install and configure the web
hosts: webservers
remote_user: root

roles:
- web


group_vars/webservers

各タスクで使用する変数を定義しています。

定義内容はコメントを参照してください。

Apache の設定内容に以下を追記する形となります。


group_vars/webservers

# webservers Variables

・・・
中略
・・・

php_5_6:
# php 提供元レポジトリURL
repo_url: http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# 利用レポジトリ
enablerepo: remi-php56
# インストール対象パッケージ
install_packages:
- php
- php-cli
- php-common
- php-dbg
- php-devel
- php-gd
- php-mbstring
- php-mcrypt
- php-mysqlnd
- php-opcache
- php-xml
# httpd 用 php 設定ファイル(原本)
httpd_config_org_path: /etc/httpd/conf.d/php.conf
# httpd 用 php 設定ファイル
httpd_config_path: /etc/httpd/conf/extra/httpd-php.conf
# httpd 用 php追加読み込み文言
httpd_config_include_php: 'Include conf/extra/httpd-php.conf'
# php 設定ファイル
config_path: /etc/php.ini
# php 設定ファイル変更箇所
config_changes:
- regexp: '^;(date.timezone) =.*'
line: '\1 = Asia/Tokyo'
- regexp: '^;(mbstring.language) =.*'
line: '\1 = Japanese'
- regexp: '^;(mbstring.internal_encoding) =.*'
line: '\1 = UTF-8'
- regexp: '^;(mbstring.http_input) =.*'
line: '\1 = pass'
- regexp: '^;(mbstring.http_output) =.*'
line: '\1 = pass'
- regexp: '^;(mbstring.encoding_translation) =.*'
line: '\1 = off'


tasks/main.yml

main.yml では各タスクの読み込みを行っています。

タスクの詳細は各ファイルで記述しています。


tasks/main.yml

---

- include: install_apr.yml
- include: install_apr_util.yml
- include: install_distcache.yml
- include: install_httpd_2_2.yml
- include: install_php_5_6.yml

install_php_5_6.yml

php のインストール Playbook です。

インストール対象のパッケージは上記の変数定義ファイルで定義済みなのでこちらは簡潔に記述することが出来ます。

また、php.ini 内の変更箇所も変数定義ファイルに配列として定義しています。


install_php_5_6.yml

---

# build and install php_5.6

- name: remi レポジトリのインストール
yum:
name: "{{ php_5_6.repo_url }}"
state: present

- name: php のインストール
yum:
name: "{{ php_5_6.install_packages }}"
enablerepo: "{{ php_5_6.enablerepo }}"
state: present

- name: httpd 用 php 設定ファイルの配置
shell: "mv {{ php_5_6.httpd_config_org_path }} {{ php_5_6.httpd_config_path }}"
args:
creates: "{{ php_5_6.httpd_config_path }}"

- name: php 設定ファイル編集
lineinfile:
dest: "{{ php_5_6.config_path }}"
backrefs: yes
regexp: '{{ item.regexp}}'
line: '{{ item.line }}'
with_items: "{{ php_5_6.config_changes }}"

- name: httpd 用 php 追加読み込み設定追記
lineinfile:
dest: "{{ apache_2_2.conf_file}}"
line: "{{ php_5_6.httpd_config_include_php }}"
notify: restart httpd

- name: php用 sample ファイル配置
shell: "echo '<?php phpinfo() ?>' > /var/www/html/info.php"
args:
creates: "/var/www/html/info.php"


sample ファイルに php の状態を出力するスクリプトを記述しております。

インストールの確認がとれましたら削除してください。

以上、タスクの記述となります。


Playbook の実行

作成した Playbook を実行しましょう。

$ ansible-playbook -i hosts webservers.yml

・・・
PLAY RECAP *********************************************************************
localhost : ok=39 changed=33 unreachable=0 failed=0
# 確認の為、再実行
$ ansible-playbook -i hosts webservers.yml
・・・
PLAY RECAP *********************************************************************
localhost : ok=38 changed=0 unreachable=0 failed=0

正常に実行されたでしょうか。

実行後、http://サーバのIPアドレス または、ホスト名/info.php にアクセスすると、phpinfo の結果が出力されます。

phpinfo.jpg

Apache + PHP は Web アプリケーションとしてよくある組み合わせかと思うので、利用頻度は高いと思います。

また、Apache + PHP が要件となるミドルウェアも多いかと思います。