今回で最後、Raspberry PiにWordPressをAnsibleを使ってセットアップします。過去記事は下記、もしくはメニューの「Server」からご覧ください。
その1 Ansibleで管理する準備
その2 raspbianの共通設定を行うplaybook
その3 外付けHDDをマウントするplaybook
wordpressのセットアップは、以下の記事をそのままをplaybookにさせて頂きました。
Raspberry Piにwordpressを設置して高速化、あと電気代
その他、その2、その3で作成したplaybookの読み込みとiptablesの設定を行います。
ファイル構成
ファイル構成は以下の通りです。ハイライト部分が今回関係するファイルです。
|--conf | |--locale | |--localtime | |--ntp.conf | |--resolvconf.conf | |--rules.v4 | |--wp-config.php |--vars | |--vars.yml |--ansible.cfg |--my.cnf.j2 |--external_strage_connect.yml |--raspbian_basic_settings.yml |--wordpress-4.4.2-ja.zip |--wordpress_server.yml
playbookの内容
playbookは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
--- - hosts: xxx.xxx.xxx.xxx sudo: yes vars_files: - vars/vars.yml tasks: - include: external_strage_connect.yml - include: raspbian_basic_settings.yml - name: Install the relevant package apt apt: pkg={{ item }} state=present with_items: - lighttpd - php5-cgi - php5-mysql - mysql-server - python-mysqldb - iptables-persistent - name: Reload systemd shell: systemctl daemon-reload - name: Enable the relevant services service: name={{ item }} state=started enabled=yes with_items: - lighttpd - mysql - name: Root user password setting mysql_user: name=root password={{ db_root_password }} state=present - name: Place a my.cnf template: src=my.cnf.j2 dest=/root/.my.cnf mode=0600 - name: Remove a test database mysql_db: name=test state=absent - name: Remove anonymous user mysql_user: name='' state=absent - name: Remove remote users mysql_user: name='root' host=raspberrypi state=absent - name: Create a new database mysql_db: name=wordpress state=present - name: Create User for Wordpress mysql_user: name=wordpress password={{ db_wpuser_password }} priv=wordpress.*:ALL,GRANT state=present - command: ln -s ../conf-available/10-fastcgi.conf . chdir=/etc/lighttpd/conf-enabled creates=/etc/lighttpd/conf-enabled/10-fastcgi.conf - command: ln -s ../conf-available/15-fastcgi-php.conf . chdir=/etc/lighttpd/conf-enabled creates=/etc/lighttpd/conf-enabled/15-fastcgi-php.conf - name: Expand the wordpressarchive file unarchive: copy=yes src=wordpress-4.4.2-ja.zip dest=/tmp/ creates=/var/www/html/wp-config.php - name: Move the word press file in the document root shell: cp -rfd /tmp/wordpress/* /var/www/html/ creates=/var/www/html/wp-config.php - name: Ownership changes of www directory file: path=/var/www owner=www-data group=www-data state=directory recurse=yes - name: Save the index.lighttpd.html shell: mv /var/www/html/index.lighttpd.html /root/ removes=/var/www/html/index.lighttpd.html - name: Copy the wp-configuration file copy: src=conf/wp-config.php dest=/etc/ - name: reload lighttpd service: name=lighttpd state=restarted - name: Place The iptables Rules File copy: src=conf/rules.v4 dest=/etc/iptables/ - name: Read The iptables Rules shell: iptables-restore < /etc/iptables/rules.v4 |
2行目
対象ホストを指定します。
3行目
playbook全体をsudo権限で実行します。
4~5行目
変数ファイル”vars.yml”を読み込みます。
6行目
この行以降にタスクを記述します。
8行目
その3で作成した”external_strage_connect.yml”を読み込みます。
10行目
記載順が前後しますが、その2で作成した”raspbian_basic_settings.yml”を読み込みます。
12~20行目
aptモジュールを使用し、必要なパッケージをインストールします。iptables-persistentはiptablesの設定を行うためのパッケージ、その他はwordpressを稼働させるためのパッケージです。
22~23行目
念のため、systemdのリロードを行います。ここは一度試行錯誤していた時に追加したもので、おそらく行う必要はありません。じゃあ削除しろよという話ですが、検証していないので、そのままにしてます。
25~29行目
serviceモジュールで、サービスとして稼働するlighttpdとmysqlをenable(サービスが起動していなければ起動し、自動起動の設定も行う)に設定します。
31~32行目
これ以降50行目まで、mysqlの設定です。
mysqlのrootユーザーにパスワードを設定します。通常、rootユーザーのパスワードを変更するにはroot権限が必要ですが、インストール直後(初回playbook実行時)はパスワードが設定されていないため、パスワードなしでrootユーザーになり、変更ができます。
2回目以降のplaybook実行時は、34~35行で配置したmy.cnfファイルから認証情報を読み取り、rootユーザーのパスワード変更処理を行います。
このあたりは旧ブログにも記載しています。
34~35行目
my.cnfファイルを配置します。AnsibleのMySQLモジュールは、デフォルトで~/.my.cnfから認証情報を読み取ります。このファイルを配置した後は、my.cnfに記載されているユーザ名とパスワードでmysql_userやmysql_dbが実行されます。
37~38行目
テストデータベースを削除します。
40~41行目
匿名ユーザーを削除します。
43~44行目
リモート接続用のユーザーを削除します。
46~47行目
データベース”wordpress”を作成します。
49~50行目
wordpress用のユーザー”wordpress”を作成し、パスワードと権限設定(ALL)を行います。
52~53行目
ここからlighttpd用の設定です。commandモジュールでlnコマンドを実行し、稼働するために必要なシンボリックリンクを作成します。
55~56行目
Ansibleサーバ側 にあるwordpressの圧縮ファイルを、リモートホストの/tmp/配下に展開します。
58~59行目
/tmp/ディレクトリ配下に展開したwordpressファイル一式を、ドキュメントルートとする/var/www/html/にコピーします。
61~62行目
/var/www/配下のファイルすべての所有者をwww-dataに変更します。
64~65行目
lighttpdのデフォルトのindexファイルは、不要なので/root/配下に移動します。
67~68行目
wordpressの設定ファイル”wp-config.php”を配置します。
70~71行目
設定ファイルの内容を反映するため、lighttpdを再起動します。
73~74行目
iptablesのルールを記述した”rules.v4″を配置します。これにより、起動時にrules.v4に記載されたルールが適用されます。
76~77行目
shellモジュールでiptables-restoreコマンドを実行し、”rules.v4″に記載されたルールを適用します。
実行して最後までエラーなく完了すればセットアップ完了です。ブラウザでアクセスすると、初期設定を行う画面が表示され、設定後wordpressが使用可能になります。
各設定ファイルの内容
各設定ファイルの内容は以下の通りです。長いものは変更部分のみ記載しています。
vars.yml
1 2 3 |
--- db_root_password: ****** db_wpuser_password: ****** |
変数を記述しています。mysqlのパスワードを保持するために使用しました。”*”部分は、実際にはパスワードを平文で記述しています。
wp-config.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php define('DB_NAME', 'wordpress'); define('DB_USER', 'wordpress'); define('DB_PASSWORD', '********'); define('DB_HOST', 'localhost'); define('DB_CHARSET', 'utf8mb4'); define('DB_COLLATE', ''); define('AUTH_KEY', '***************************'); define('SECURE_AUTH_KEY', '***************************'); define('LOGGED_IN_KEY', '***************************'); define('NONCE_KEY', '***************************'); define('AUTH_SALT', '***************************'); define('SECURE_AUTH_SALT', '***************************'); define('LOGGED_IN_SALT', '***************************'); define('NONCE_SALT', '***************************'); $table_prefix = 'wp_'; define('WP_DEBUG', false); if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/'); require_once(ABSPATH . 'wp-settings.php'); |
予め編集しておいたwordpressの設定ファイルです。wordpressに含まれている同名のファイルを編集しました。DB接続を行うためのDB名、ユーザー名、パスワードや、秘密鍵を記述しています。各値の意味は公式オンラインマニュアルにて”WordPress のインストール”をご覧ください。
AUTH_KEYからNONCE_SALTの値(秘密鍵)は、オンラインジェネレータを使用して生成した値を入力します。
rules.v4
1 2 3 4 5 6 7 8 9 10 11 12 |
*filter -A INPUT -i lo -j ACCEPT -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A OUTPUT -j ACCEPT -A INPUT -p tcp --dport 80 -j ACCEPT -A INPUT -s 192.168.x.x/24 -p tcp --dport 22 -m state --state NEW -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 -A INPUT -j REJECT -A FORWARD -j REJECT COMMIT |
iptablesの設定を記述したファイルです。こちらのサイトを参考にさせて頂きました。
TCP80番ポートと、LAN内部(192.168.x.x/24)からのみTCP22番を許可しています。
この記事のplaybookを使ってセットアップしたraspberry piでこのサイトは動作しています。参考にさせて頂いた各サイトの管理者様、ありがとうございました!
出典
Raspberry Piにwordpressを設置して高速化、あと電気代
Debian上でのiptablesの設定方法
Debian Wiki – iptables
WordPress のインストール