LoginSignup
1
3

More than 5 years have passed since last update.

aws上に作成したansibleサーバーでテストサイトを構築する(5) Webサーバーの構成

Last updated at Posted at 2017-11-03

はじめに

前回は、作成したEC2インスタンスに共通の処理を適用するところまでを実装しました。
今回は、Webサーバーとしての構成を行っていきます。

Webアプリサーバー向けのPlay作成

前回作成したwordpress.ymlに、Webアプリサーバー向けのPlayを追加します。
このPlaybookではデータベースにRDSを使用する予定で、Webアプリサーバーしか構成しないので、Playを分けなくてもよいのですがDBをRDSでなくEC2で建てる場合などにはDB用のPlayを作ることになるので分けています。
まずはnginxロールを作ります。

wordpress.yml(追記)
 hosts: webapps
  become: true
  roles:
    - { role: nginx, tags: [nginx] }

nginxのインストール

今回は、Webサーバーとしてはnginxを使用し、Wordpressを/var/lib/wordpressにインストールして、http://<IPアドレス>/wordpressでアクセスするように設定します。
nginxのトップページ、http://<IPアドレス>/はyumによる既定の設定のままとしておきます。

なので、nginxのインストールタスクはパッケージをインストールして起動するだけの簡単なものとなります。

command
> mkdir -p roles/nginx/tasks
roles/nginx/tasks/main.yml
---
- 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のインストールを行います。

wordpress.yml(変更部分)
 hosts: webapps
   become: true
   roles:
     - { role: nginx, tags: [nginx] }
+    - { role: php-fpm, tags: [php-fpm] }
command
> mkdir -p roles/php-fpm/tasks

amzn-updatesリポジトリにphp71が入っていたので、yumでこちらをインストールします。1

また、Playbookの初回実行時には関係ありませんが、修正して複数回実行することを想定してnotifyを定義しています。

roles/php-fpm/tasks/main.yml
---
- name: php installed
  yum:
    pkg: '{{ item }}'
    state: installed
  with_items:
    - php71
    - php71-fpm
    - php71-mbstring
    - php71-mysqlnd
  notify:
    - restart php-fpm
roles/php-fpm/handlers/main.yml
---
- name: restart php-fpm
  service:
    name: php-fpm
    state: restarted

PHPのタイムゾーンを東京に変更します。

roles/php-fpm/tasks/main.yml(追記)
- 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用に実行ユーザー等を変更します。

なお、lineinfilebackrefsオプションで動作が変わります。
backrefs: yesが指定されない場合、regexpの条件にマッチしなければファイル末尾にlineが追記される動きとなります。

roles/php-fpm/tasks/main.yml(追記)
- 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
group_vars/all.yml(追記)
php_fpm:
  user: nginx
  group: nginx

最後にphp-fpmのサービス起動設定を行います。

roles/php-fpm/tasks/main.yml(追記)
- name: php-fpm is running
  service:
    name: php-fpm
    state: started
    enabled: true

wordpressソースファイルの展開

PHPの実行基盤ができたので、wordpressをインストールしていきます。
まずはロールの追加から。

wordpress.yml(変更部分)
 hosts: webapps
   become: true
   roles:
     - { role: nginx, tags: [nginx] }
     - { role: php-fpm, tags: [php-fpm] }
+    - { role: wordpress, tags: [wordpress] }
command
$ mkdir -p roles/wordpress/tasks

Wordpressはプレイブック実行時の最新を使うことにします。
展開先は/var/lib/以下としていますが直接指定はせずに変数で指定しています。
また、php-fpmの実行ユーザーをディレクトリの所有者として設定しています。

なお、展開後のディレクトリパスは頻繁に参照するのでwordpress_homeとしてアクセスできるよう変数に定義しておきます。

group_vars/all.yml(追記)
wordpress:
  root: /var/lib
  alias: wordpress
  user: '{{ php_fpm.user }}'
  group: '{{ php_fpm.group }}'
roles/wordpress/tasks/main.yml
---
- 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アプリを展開する方法についてはこちらのサイトがわかりやすくてとても参考になりました。

roles/wordpress/tasks/main.yml(追加)
- 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
roles/wordpress/templates/wordpress.j2.conf
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で使用するデータベースを準備していきます。




  1. php71にしたのは新しい方がいいだろうと思っただけで、特に意味はありません。 

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3