2015年06月15日

コンピュータ関連のことを、出来る時に、出来ることだけ。
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
せっかくRaspberry Piを常時稼働させているので、サーバとして動かしたい!ので、このブログを移行すべくWordPressをインストールしてみます。前回の最後にServerSpecをやってみると書きましたが、ハマったので断念(泣)。

インストール自体はそんなに難しくなかったですが、引き続きAnsibleを使って導入できるようPlayBookを作ったので、ちょっと手間取りました。PlayBookは以下の通り。公式サイトの「WordPress 日本語版のインストール」をそのままPlayBookにしたつもりです。

■ファイル構成
wordpress
├vars
│└vars.yml
├my.cnf.j2
├wordpress-4.2.2-ja.zip
├wordpress_setup.yml
└wp-config.php

※「wordpress-4.2.2-ja.zip」はWordPressの公式サイトからダウンロードしたものです。zipファイルのまま置きます。

■各ファイルの内容
・wordpress_setup.yml
WordPressをインストールするPlayBookです。

1:---
2:- hosts: <対象ホスト名>
3: sudo: yes
4: vars_files:
5: - vars/vars.yml
6: tasks:
7:
8: - name: Install the relevant package yum
9: yum: pkg={{ item }} state=present
10: with_items:
11: - httpd
12: - php
13: - mariadb
14: - mariadb-server
15: - php-mysql
16: - MySQL-python
17:
18: - name: Enable the relevant services
19: service: name={{ item }} state=started enabled=yes
20: with_items:
21: - httpd
22: - mariadb
23:
24: - name: Root user password setting
25: mysql_user: name=root password={{ db_root_password }} state=present
26:
27: - name: Place a my.cnf
28: template: src=my.cnf.j2 dest=/root/.my.cnf mode=0600
29:
30: - name: Remove a test database
31: mysql_db: name=test state=absent
32:
33: - name: Remove anonymous user
34: mysql_user: name='' state=absent
35:
36: - name: Remove remote users
37: mysql_user: name='' host=pidora.local state=absent
38: mysql_user: name=root host=pidora.local state=absent
39:
40: - name: Create a new database
41: mysql_db: name=wordpress state=present
42:
43: - name: Create User for Wordpress
44: mysql_user: name=wordpress password={{ db_wpuser_password }} priv=wordpress.*:ALL,GRANT state=present
45:
46: - name: Expand the wordpressarchive file
47: unarchive: copy=yes src=wordpress-4.2.2-ja.zip dest=/var/www/html/
48:
49: - name: Copy the configuration file
50: copy: src=wp-config.php dest=/var/www/html/wordpress/



[4-5行目]
パスワードをPlayBook内に書き込むのはどうかと思ったので、「vars_files」を使って外部ファイルから読み取るようにしています。vars.ymlの内容は後述します。

[8-16行]
Apache、MySQL、PHPと関連パッケージをインストールします。Pidora(Fedora)ではMySQLではなくて、MySQLの互換DBのMariaDBが標準になっていたので、MariaDBをインストールしています。使用する分には違いは無いようですね。
php-MySQLはphpからMySQL(MariaDB)を使用するために入れます。MySQL-pythonはAnsibleがMySQLを使用するために必要なものなので、Ansibleを使わずにインストールする場合は不要です。

with-items句を使って、ループ処理をさせてみました。

[18-22行]
httpd(Apache)とmariadbサービスを起動し、自動起動するよう設定しています。

[24-38行]
通常MySQL(MariaDB)をインストールした後は対話式のコマンド「mysql_secure_installation」を実行してセキュアな設定にします。Ansibleで対話式のコマンドやスクリプトを実行させることもできるようですが、ここではmysql_secure_installationと同じことをPlayBookで直に実行しています。

24-25行では、rootユーザのパスワードを設定しています。インストール直後はrootユーザのパスワードが設定されておらず、パスワードなしでログインできてしまうためです。

27-28行では、my.cnfファイルを配置しています。AnsibleのMySQLモジュールは、デフォルトで~/.my.cnfから認証情報を読み取るため、これ以降はmy.cnfに記載されているユーザ名とパスワードでmysql_userやmysql_dbが実行されます。全てsudoで実行しているため、rootユーザのホームディレクトリに配置しました。

mysql_userやmysql_dbなどのMySQL関連のAnsibleモジュールでは、login_userやlogin_passwordオプションを使用することで、モジュール実行時の認証情報を渡すこともできますが、実行毎に指定する必要があることと、PlayBook内にパスワードを記載することになります。また、25行のようにrootユーザのパスワードを変更すると、1回目は「①パスワードなしでrootユーザでログイン(PlayBook上は省略)して、②rootユーザのパスワードを設定する」ことができますが、再度Playbookを実行した時は、既にrootユーザーのパスワードが設定されているため、①のログイン自体ができません。それでは「冪等性」が維持できないため、このようにしています。というか、なぜわざわざmy.cnfを使っているのか分からず、1週間ほどハマってしまいました...

mysql_userやmysql_dbの使い方は↓に書いてあります。
http://docs.ansible.com/mysql_db_module.html
http://docs.ansible.com/mysql_user_module.html

[40-44行]
WordPress用のデータベースとユーザーを作成しています。ユーザーには全ての権限を付与しました。

[46-47行]
WordPressの圧縮ファイルを、対象サーバ上で展開します。

[49-50行]
WordPressの設定ファイルwp-config.phpを配置します。

・vars.yml
パスワードを変数として別出しにしたファイルです。

1:---
2:db_root_password: <パスワード>
3:db_wpuser_password: <パスワード>



・my.cnf.j2
AnsibleのMySQLモジュールが読み取る~/.my.cnfのテンプレートです。変数部分は配置時に置き換えられます。

1:[client]
2:user = root
3:password = {{ db_root_password }}



・wp-config.php
「wordpress-4.2.2-ja.zip」内に含まれている「wp-config-sample.php」を公式サイト「wp-config.php の編集」に沿って編集したものです。

1: 2:
3:define('DB_NAME', 'wordpress');
4:define('DB_USER', 'wordpress');
5:define('DB_PASSWORD', '<パスワード>');
6:define('DB_HOST', 'localhost');
7:define('DB_CHARSET', 'utf8mb4');
8:
9:define('DB_COLLATE', '');
10:
11:define('AUTH_KEY', '<認証用ユニークキー>');
12:define('SECURE_AUTH_KEY', '<認証用ユニークキー>');
13:define('LOGGED_IN_KEY', '<認証用ユニークキー>');
14:define('NONCE_KEY', '<認証用ユニークキー>');
15:define('AUTH_SALT', '<認証用ユニークキー>');
16:define('SECURE_AUTH_SALT', '<認証用ユニークキー>');
17:define('LOGGED_IN_SALT', '<認証用ユニークキー>');
18:define('NONCE_SALT', '<認証用ユニークキー>');
19:
20:$table_prefix = 'wp_';
21:
22:define('WP_DEBUG', false);
23:
24:if ( !defined('ABSPATH') )
25: define('ABSPATH', dirname(__FILE__) . '/');
26:
27:require_once(ABSPATH . 'wp-settings.php');



インストール後「http://<URL>/wordpress/」でWordPressにアクセスできます。最初にサイト名やパスワードを設定すれば、もう使用できる状態になりました。

使用感としては、残念ながらレスポンスが遅すぎでした。パフォーマンスを何とか上げれるよう、チューニングしてみます。
スポンサーサイト

 | Copyright © ふたごパパのサーバ構築日記 All rights reserved. | 

 / Template by 無料ブログ テンプレート カスタマイズ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。