Ansibleで環境構築(6) - PHPの設定
前回まででcommonロールのタスクを書き終わった気がするので、今回からWordPressやその周辺のあれこれを入れるblogロールというのを作っていきます。
ロールを分ける構成については第3回でしたね。シリーズものなのに行き当たりばったりなのですが、基本的に手探りしながら作った物を整理する意味合いでこのブログを書いているので、そんなものです。
一応、今後の予定としてはblogロールはPHP/MySQL/Nginx/WordPress/Node.jsと続くはずです。その後、クローラーサーバーを追加するためにcommonロールに手を加えた後に、crawlerロールとして幾つか書いていくと思います(いまトライ&エラーで試している)。
というわけで、今回はPHPです。
./roles/blog/tasks/main.yml
---
- include: php.yml
blogロール最初のタスクなのでphp.yml
を読むだけですね。
./roles/blog/tasks/php.yml
---
- name: be sure ppa:ondrej/php5-oldstable repository is installed
apt_repository: repo='ppa:ondrej/php5-oldstable'
tags: php
- name: be sure php is installed
apt: name={{ item }} update_cache=yes state=latest
with_items:
- php5
- php5-cli
- php5-curl
- php5-fpm
- php5-gd
- php5-intl
- php5-mysql
- php-apc
tags: php
- name: be sure php-fpm log directory is created
file: path=/var/log/php5-fpm/ state=directory owner=root group=root mode=0755
tags: php
- name: be sure php-fpm is configured
template: src={{ item.src }} dest={{ item.dest }}
with_items:
- { src: ./etc/php5/fpm/php-fpm.conf.j2, dest: /etc/php5/fpm/php-fpm.conf }
- { src: ./etc/php5/fpm/pool.d/www.conf.j2, dest: /etc/php5/fpm/pool.d/www.conf }
notify:
- restart php-fpm
tags: php
- name: be sure php-fpm is running and enabled
service: name=php5-fpm state=running enabled=yes
tags: php
PHP5.5ではなく、5.4を入れています。
以前5.5にしたらApacheが動かなかった問題があったので、その影響で5.4で動かしています。今はNginxにしたので関係ない気がするんですけどね。
5.5にする場合には以下のリポジトリに変えるだけでいけます。
apt_repository: repo='ppa:ondrej/php5'
PHP自体は入れるだけ、あとはPHP-FPMの設定を書き換えてサービスとして起動しています。
./roles/blog/handlers/main.yml
---
- name: restart php-fpm
service: name=php5-fpm state=restarted
php.yml
のnotify指定で呼ばれ、PHP-FPMを再起動しています。
タスクに書かずにこういう構成にしておくと、変更があった場合かつファイル単位で一度しか呼ばれないらしいです。
./roles/blog/templates/etc/php5/fpm/php-fpm.conf.j2
[global]
pid = /var/run/php5-fpm.pid
error_log = /var/log/php5-fpm/error.log
include=/etc/php5/fpm/pool.d/*.conf
PHP-FPM全体の設定です。
ログの位置だけデフォルトより一階層深くしています。
./roles/blog/templates/etc/php5/fpm/pool.d/www.conf.j2
[www]
user = www-data
group = www-data
listen = /var/run/php5-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
chdir = /
catch_workers_output = yes
php_admin_value[error_log] = /var/log/php5-fpm/www-error.log
php_admin_flag[log_errors] = on
;php_admin_value[memory_limit] = 32M
php_admin_value[upload_max_filesize] = 5M
php_admin_value[post_max_size] = 5M
php_admin_flag[expose_php] = off
WordPressで使うPHP-FPMの設定なのですが、良く理解せず使っている酷い部分なので、中身は参考になさらずに。
近いうちに見直そう。
実行のしかた
以下のように使い分けてます。
commonも含めた全ロールを実行
$ ansible-playbook site.yml
blogロールのみ
$ ansible-playbook blog.yml
phpタスクのみ(タグ指定)
$ ansible-playbook blog.yml -t php