エロサイトの作り方

2013年11月から勉強しながらエロサイトを作っています。

Ansibleで環境構築(6) - PHPの設定

前回まででcommonロールのタスクを書き終わった気がするので、今回からWordPressやその周辺のあれこれを入れるblogロールというのを作っていきます。

ロールを分ける構成については第3回でしたね。シリーズものなのに行き当たりばったりなのですが、基本的に手探りしながら作った物を整理する意味合いでこのブログを書いているので、そんなものです。

一応、今後の予定としてはblogロールはPHPMySQL/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