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