IT・ビッグデータ徒然ブログ

ビッグデータ界隈で、セールス、コンサル、ちょっとした開発等いろんなことに振り回されている人のブログです。

ブログ移住計画その2~AnsibleでWordPressの構成管理~

インフラ部分は整ったので、
実際にインストールをしていくのですが、

ここではAnsibleを使ってインストールの構成管理をします。
で、いきなりAWS上でやるのはあれなので、一旦手元のPC(Mac)でVagrantを使ってテスト用に3台(プロビジョニング、WordPressMySQL)立てます

いろいろとインストールの記事(こことか)を読んでいくと、

がいるらしい。

で、今回はMySQLとそれ以外でインストール先を分けるのでそこも気にしながら進めていく。

Ansibleの構成

.
├── group_vars/
│   └── mysql.yml
├── inventory/
│   └── hosts
├── playbook.yml
├── roles/
│   ├── httpd/
│   │   ├── handlers/
│   │   │   └── main.yml
│   │   └── tasks/
│   │       └── main.yml
│   ├── mysql/
│   │   ├── handlers/
│   │   │   └── main.yml
│   │   └── tasks/
│   │       └── main.yml
│   ├── php/
│   │   └── tasks/
│   │       └── main.yml
│   └── wordpress/
│       └── tasks/
│           └── main.yml
└── templates/

※いらないとこ多々あり。今後スケール見越して一部ディレクトリ作ってます。

プロビジョニング先のIPの設定

Inventory/hostsファイルを作る

[wp]
192.168.33.90

[mysql]
192.168.33.91

## IPはその時による

MySQLのパスワードを変数化

group_vars/mysql.yml

mysql_root_password: "<rootパスワード>"
mysql_db_password: "<wordpress用ユーザのパスワード>"

httpd(Apache)のインストール他もろもろ

httpd/tasks/main.yml

- name: install apache
   yum:
     name: httpd

- name: start http server
   service:
     name: httpd
     state: started
     enabled: yes

頻繁にhttpdは再起動するので、再起動用のハンドラを作っておきます。 httpd/handlers/main.yml

- name: Restart httpd
    service:
    name: httpd
    state: restarted

PHPのインストール

php/tasks/main.yml

PHPを素直にインストール
php-develとphp-mbstringはいらないかも?
インストールあとにhttpdを再起動

- name: install php
   yum:
     name: "{{ item }}"
     state: latest
   with_items:
     - php
     - php-devel
     - php-mbstring
     - php-mysql
   notify: Restart httpd

WordPressをインストール

WordPressのみyumでインストールできないので、

  1. tar.gzでダウンロード
  2. ファイルを解凍

としています。

あとhtmlディレクトリに配置して、所有権もapacheにしています。

- name: download wordpress
   get_url:
     url="https://wordpress.org/latest.tar.gz"
     dest=/tmp/wordpress.tar.gz


- name: unarchive wordpress
   unarchive: src=/tmp/wordpress.tar.gz dest=/var/www/html/ copy=no

- name: change owner to apache
   file: path=/var/www/html/wordpress/ owner=apache group=apache recurse=yes


- name: restart httpd
   service:
     name: httpd
     state: restarted

MariaDBをインストール

MySQLと書いていましたけど、CentOS7はMariaDBが推奨らしいので、こっちをインストール

手順は以下の通り。

  1. MariaDBをインストール
  2. MariaDBを起動
  3. MariaDBのrootユーザを作成
  4. rootユーザでWordPress用のDB作成
  5. WordPressDB用のユーザ(wp)を作成
    5-1. IPはWordPressサーバに届くようにサブネット範囲設定
- name: install mariadb
   yum: name={{ item }} state=installed
   with_items:
     - MySQL-python
     - mariadb
     - mariadb-server
     - libselinux-python

- name: start mariadb
   service:
     name: mariadb
     state: started
     enabled: yes

- name: create root user
   mysql_user:
     name: root
     host: localhost
     password: "{{ mysql_root_password }}"
     login_user: root
     login_password: "{{ mysql_root_password }}"
     check_implicit_admin: yes

- name: create database for wordpress
   mysql_db:
     login_user: root
     login_password: "{{ mysql_root_password }}"
     name: wordpress
     state: present

- name: create user for wordpress database and attach previlage
   mysql_user:
     login_user: root
     login_password: "{{ mysql_root_password }}"
     name: wordpress
     password: "{{ mysql_db_password }}"
     priv: "wordpress.*:ALL"
     host:  192.168.0.0/255.255.0.0
     state: present

playbookの作成

各タスクを実行するplaybookを作成

- hosts: wp
   become: yes
   become_user: root
   tasks:
   roles:
     - httpd
     - php
     - wordpress

- hosts: mysql
   become: yes
   become_user: root
   tasks:
   roles:
     - mysql

Playbookの実行

ansible-playbook -i inventory/hosts playbook.yml

WordPressを入れたサーバにアクセス。

f:id:namusic701042:20180809175134j:plain

f:id:namusic701042:20180809175140j:plain

うまくいきました。
(初期設定の画像を取り忘れた・・・)

とりあえず、問題なさそう。
ただAWSに乗せるにはもうちょっと設定をカスタマイズしたいので、いろいろ触ってみます。

参考URL:

thinkit.co.jp

cflat-inc.hatenablog.com

walkingmask.hatenablog.com