はじめに
前回は、作成したEC2インスタンスに共通の処理を適用するところまでを実装しました。
今回は、Webサーバーとしての構成を行っていきます。
- aws上に作成したansibleサーバーでテストサイトを構築する
Webアプリサーバー向けのPlay作成
前回作成したwordpress.yml
に、Webアプリサーバー向けのPlayを追加します。
このPlaybookではデータベースにRDSを使用する予定で、Webアプリサーバーしか構成しないので、Playを分けなくてもよいのですがDBをRDSでなくEC2で建てる場合などにはDB用のPlayを作ることになるので分けています。
まずはnginxロールを作ります。
hosts: webapps
become: true
roles:
- { role: nginx, tags: [nginx] }
nginxのインストール
今回は、Webサーバーとしてはnginxを使用し、Wordpressを/var/lib/wordpress
にインストールして、http://<IPアドレス>/wordpress
でアクセスするように設定します。
nginxのトップページ、http://<IPアドレス>/
はyumによる既定の設定のままとしておきます。
なので、nginxのインストールタスクはパッケージをインストールして起動するだけの簡単なものとなります。
> mkdir -p roles/nginx/tasks
---
- name: installed nginx
yum:
pkg: nginx
state: installed
- name: nginx is running
service:
name: nginx
state: started
enabled: true
なお、ここまでのPlaybookを実行すると、ブラウザでweb01のグローバルアドレスに接続することでNginxのデフォルトページを参照することができるようになります。
php-fpmのインストール
wordpressはPHPで稼働するため、php-fpmのインストールを行います。
hosts: webapps
become: true
roles:
- { role: nginx, tags: [nginx] }
+ - { role: php-fpm, tags: [php-fpm] }
> mkdir -p roles/php-fpm/tasks
amzn-updatesリポジトリにphp71が入っていたので、yumでこちらをインストールします。1
また、Playbookの初回実行時には関係ありませんが、修正して複数回実行することを想定してnotify
を定義しています。
---
- name: php installed
yum:
pkg: '{{ item }}'
state: installed
with_items:
- php71
- php71-fpm
- php71-mbstring
- php71-mysqlnd
notify:
- restart php-fpm
---
- name: restart php-fpm
service:
name: php-fpm
state: restarted
PHPのタイムゾーンを東京に変更します。
- name: timezone of php is Asia/Tokyo
lineinfile:
path: /etc/php.ini
regexp: '^;date.timezone ='
line: 'date.timezone = "Asia/Tokyo"'
backrefs: yes
notify:
- restart php-fpm
php-fpmをrpmでインストールすると既定ではApacheで実行されるようになっているので、Nginx用に実行ユーザー等を変更します。
なお、lineinfile
はbackrefs
オプションで動作が変わります。
backrefs: yes
が指定されない場合、regexp
の条件にマッチしなければファイル末尾にline
が追記される動きとなります。
- name: execution user definition
lineinfile:
path: /etc/php-fpm.d/www.conf
regexp: '^user = apache'
line: 'user = {{ php_fpm.user }}'
backrefs: yes
notify:
- restart php-fpm
- name: execution group definition
lineinfile:
path: /etc/php-fpm.d/www.conf
regexp: '^group = apache'
line: 'group = {{ php_fpm.group }}'
backrefs: yes
notify:
- restart php-fpm
- name: Set owner of session directories
file:
path: /var/lib/php
recurse: yes
owner: "{{ php_fpm.user }}"
group: "{{ php_fpm.group }}"
notify:
- restart php-fpm
php_fpm:
user: nginx
group: nginx
最後にphp-fpmのサービス起動設定を行います。
- name: php-fpm is running
service:
name: php-fpm
state: started
enabled: true
wordpressソースファイルの展開
PHPの実行基盤ができたので、wordpressをインストールしていきます。
まずはロールの追加から。
hosts: webapps
become: true
roles:
- { role: nginx, tags: [nginx] }
- { role: php-fpm, tags: [php-fpm] }
+ - { role: wordpress, tags: [wordpress] }
$ mkdir -p roles/wordpress/tasks
Wordpressはプレイブック実行時の最新を使うことにします。
展開先は/var/lib/
以下としていますが直接指定はせずに変数で指定しています。
また、php-fpmの実行ユーザーをディレクトリの所有者として設定しています。
なお、展開後のディレクトリパスは頻繁に参照するのでwordpress_home
としてアクセスできるよう変数に定義しておきます。
wordpress:
root: /var/lib
alias: wordpress
user: '{{ php_fpm.user }}'
group: '{{ php_fpm.group }}'
---
- name: unarchived Wordpress
unarchive:
src: 'https://ja.wordpress.org/latest-ja.tar.gz'
dest: '{{ wordpress.root }}'
remote_src: true
owner: '{{ wordpress.user }}'
group: '{{ wordpress.group }}'
- name: set wordpress_home
set_fact:
wordpress_home: '{{ wordpress.root }}/{{ wordpress.alias }}'
WordPressを展開したら、そこにphp-fpmを使用してアクセスするよう、Nginxに設定をします。
なお、Nginxでサブディレクトリ毎にWebアプリを展開する方法についてはこちらのサイトがわかりやすくてとても参考になりました。
- name: Nginx settings for wordpress
template:
src: wordpress.j2.conf
dest: /etc/nginx/default.d/wordpress.conf
owner: root
group: root
mode: 0644
notify:
- restart nginx
location /{{ wordpress.alias }} {
alias {{ wordpress.root }}/{{ wordpress.alias }};
index index.php;
location ~ /{{ wordpress.alias }}/.*\.php$ {
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME {{ wordpress.root }}/$uri;
include fastcgi_params;
}
}
ここまでのPlaybookをAnsibleで実行すると、http://<IP>/wordpress/
でWordpressのセットアップウィザードにアクセスできます。
が、まだデータベースを作っていないのでセットアップはできません。
次回
次回から、RDSのセットアップをしてwordpressで使用するデータベースを準備していきます。
-
php71にしたのは新しい方がいいだろうと思っただけで、特に意味はありません。 ↩