AnsibleでLinux × nginx × MySQL × PHP × WordPress環境を構築してみた
ブログは以前はてなブログで書いていたのですが、前回の更新からだいぶ日が空いてしまったので、年が変わる前に心機一転新しいブログをWordPressで作ってみました。 WordPressテーマはとりあえずSimplicityをそのまま使ってるので殺風景ですが、気が向いたらかっこ良くしたり細かい設定をいじったりしていきたいと思います笑
久しぶりなのでなかなか筆が進みませんが、徐々に慣れていければなと。
以前のブログはこちら (といってもそんなに記事ないですが…)
fjmk blog
都内の大学生エンジニアのブログ。プログラミングのことや日々感じていることを書いていきます。
今回ブログを作るにあたって、Ansibleを初めて使って環境構築をしたので、まずはその方法を書いてみます。
VPS(仮想専用サーバー)|カゴヤ・クラウド/VPS|レンタルサーバーのカゴヤ・ジャパン
「カゴヤ・クラウド/VPS」は、日額31円〜、月額864円〜のお手軽な価格で高性能・セキュリティも万全です。「Open VZ」を最の利点大限に活用した軽快な仮想専用サーバーです。
これまでさくらVPSを3年くらい契約してたのですが、
- 料金に対してのスペックがそんなに変わらない
- スケールアップが簡単にできる
- 利用料が日割り計算(重要!)
という理由でカゴヤに乗り換えました。
一応アプリケーションパックというものが用意されていて、WordPress環境はクリックだけで作れるようになっているのですが、1つのサーバーに他のWebアプリケーションも載せたかったので、ちゃんと環境を把握できるようAnsibleを使ってみることにしました。
今回作ったファイルはGitHubに置きました。 https://github.com/sfujimaki/ansible-playbooks
sfujimaki/ansible-playbooks
Contribute to ansible-playbooks development by creating an account on GitHub.
Ansibleとは?
ここまで読んでいる方は恐らくご存知かとは思いますが、最近(でもないか)流行りの構成管理ツールです。 この記事では説明を割愛しますが、この辺とかを見ておくと概要が分かるんじゃないでしょうか。
Ansible 入門 - Qiita
Ansible 入門 社内勉強会で Ansible の初歩的な発表をしたのでその資料を公開します。 間違い等あるとおもいますが、指摘して頂ければ幸いです。 Ansible とは? 構成管理ツールです。Chef とか Puppet とかああいうののお仲間です。 Puppet は知りませんが、Chef は少し使って嫌気が差して止めました。 理由は 特殊なことをしようとすると Ruby の知識が必要になる 構成管理「される側」にも Chef が必要(エージェント...
エージェントレスでシンプルな構成管理ツール「Ansible」入門
近年、ChefやPuppetなどの構成管理ツールが人気だが、新たに注目されつつある構成管理ツールとして「Ansible」がある。Ansibleは設定ファイルがシンプルで、管理対象サーバーに特別なソフトウェアをインストールすることなく利用できるなど、最小限の手間で各種設定を自動化できるのが特徴だ。今回はこのAnsibleについてその基本的な使い方を紹介する。
LEMP環境構築方法
Linux × Apache × MySQL × PHPを使う時はLAMP環境だけどNginxの場合なんて略すんだろうと思ってたら、どうやらLEMPというようです。 LEMP - Google 検索
このVPSにRails等のアプリケーションを載せたかったというのもあり(別にApacheでもできますが笑)、Webサーバソフトは何となくNginxを使おうと思いました。 ただ、途中で気づいたのですがWordPressにはApacheを使うのが一般的のようで、WordPress×Apacheの記事数に比べるとWordPress×Nginxの記事はかなり少なかったので特にこだわりがなければApacheがいいかも…
nginx×wordpressの構築方法はブログ等に幾つか上がっていますが、Ansibleの公式リポジトリにもサンプルが上がっているので、こちらをベースに作りました。
ansible/ansible-examples
ansible-examples - A few starter examples of ansible playbooks, to show features and how they work together. See http://galaxy.ansible.com for example roles from the Ansible community for deploying many popular applications.
また、公式のベストプラクティスはこんな感じみたいです(今回は少し崩しています)
Best Practices - Ansible Documentation
Here are some tips for making the most of Ansible and Ansible playbooks. You can find some example playbooks illustrating these best practices in our ansible-examples repository. (NOTE: These may not use all of the features in the latest release, but are still an excellent reference!).
他にも幾つか參考にしたページがあるので、そちらは記事の最後に追記します。
本来であればベストプラクティスのように要素ごとにRoleを分けるべきですが、今回は見通しを良くするためにRoleは分けずに作りました。 また、多くのサンプルではルートディレクトリにWordPressをインストールしていますが、今回はWordPressを専用ディレクトリ(今回の場合は/wpディレクトリ)に配置したかったので、その前提で作っています。
WordPress を専用ディレクトリに配置する - WordPress Codex 日本語版
Nginxの設定等は、サンプルや他の解説記事と異なってると思うのでご注意ください。
一通り触った今となってはRoleを分けたほうが分かりやすいですが、最初は全容が把握しづらかったので1ファイルにまとめたほうが分かりやすかったです。 また、備忘録も兼ねてコード内にコメントも書いておきました。
ディレクトリ(playbook)は以下の2つに分けました。
- setup ・・・ ユーザー作成,ssh設定,ポート設定等、サーバー立ち上げ時に必要な設定
- wordpress-nginx ・・・PHP, Nginx, MySQL, WordPressのインストール&各種設定
内容については以下で説明していきます。
setup
こちらのplaybookでは、
- ユーザー作成
- ssh設定
- ポート設定
といった、サーバーを立てたら最初にするべきことを実施します。
ポート等の設定とWordPressインストール等を一気にやろうとすると、ポート設定タスク実行後に接続が切れてしまうので、playbookを分けました。
ファイル構造はこのようになっています。
$ tree ./setup ./setup ├── group_vars │ └── all ├── hosts ├── roles │ └── setup │ ├── files │ │ ├── authorized_keys_for_admin │ │ └── authorized_keys_for_fujimaki │ ├── handlers │ │ └── main.yml │ ├── tasks │ │ └── main.yml │ └── templates │ └── iptables └── site.yml
環境に依存するファイルはgithubでは.exampleをつけていますが、使用時は外してよしなに設定してください。
ベストプラクティスに沿うとすればrolesが
みたいになるところを、setup roleにまとめているという感じです。
taskはこちら。 https://github.com/sfujimaki/ansible-playbooks/blob/master/setup/roles/setup/tasks/main.yml
hostsは
と設定して以下のようにコマンドを実行します。
$ ansible-playbook -i setup/hosts setup/site.yml -u root --private-key=~/.ssh/kagoya_vps_key_01.key
(~/.ssh/kagoya_vps_key_01.keyはサーバーに登録した秘密鍵のパス)
検証したのはカゴヤVPSだけですが、以下のように実行すれば ユーザーが追加され、sshもできるようになり、10022ポートだけが開かれた環境ができるはずです。(どのポートを開くかはgroup_vars/all で定義)
wordpress-nginx
続いては、WordPressが動く環境を作るplaybookです。
こちらのファイル構成はこんな感じです。
$ tree ./wordpress-nginx ./wordpress-nginx ├── group_vars │ └── all ├── hosts ├── roles │ └── wordpress-nginx │ ├── handlers │ │ └── main.yml │ ├── tasks │ │ └── main.yml │ └── templates │ ├── my.cnf │ ├── nginx-wordpress.conf │ ├── php-fpm-wordpress.conf │ └── wp-config.php └── site.yml
サンプルと比べるとだいぶシンプルになったんじゃないでしょうか。(その後の管理を考えるとrole分けるのが理想ですが)
こちらでもtaskを貼っておきます。 https://github.com/sfujimaki/ansible-playbooks/blob/master/wordpress-nginx/roles/wordpress-nginx/tasks/main.yml
Ansibleのリポジトリにあるコードだと、SELinux が有効でないとエラーになってしまうので、こちらにあるコードを足しています。 Ansibleで WordPress日本語版(3.9.1) を楽々インストール - akiyoko blog
hostsは以下のようにsetupで設定したものに開放ポートを追記した上で、
以下のコマンドを実行します。
$ ansible-playbook -i wordpress-nginx/hosts wordpress-nginx/site.yml
これでWordPressが動く状態になるはずです。
WordPress設定
最後に、ディレクトリを変更します。 http://example.com/wp にアクセスして管理画面にログインし、設定 → 一般 で 「サイトアドレス」から “/wp” を消し、「変更を保存」を押すと完成です!
まとめ
途中から面倒臭くなって説明不足な感が否めませんがお許しください笑
簡単にできると思ってたら、ちょっと設定を変えたりしたせいで地味に面倒でした… ベストプラクティスに沿ってしっかり構築するのも良いですが、ファイルが多くなって最初はとっつきにくいので1ファイルにまとめて見るのも良いんじゃないでしょうか。
ここまで書いといてという感じではありますが、1環境に対して1アプリケーションもしくは1アプリケーションを複数サーバーに置くという運用なら便利ではあるものの、個人の半分実験用途のサーバーならわざわざ面倒な構成管理をしなくてもいいのかなーと思いました笑
手順書のコード化という意味では有用だと思うので、手動で環境構築した上で、Ansibleにコードとして残すという使い方が良いかもしれません。
參考にしたページ
- WordPress を専用ディレクトリに配置する - WordPress Codex 日本語版
- 実践!Ansibleベストプラクティス(前編)
- 実践!Ansibleベストプラクティス(後編)
- Ansibleで自社Wordpressを移行を自動化
- Ansible で CentOS 6.5 に WordPress + Nginx + PHP-FPM 環境をさくっと構築(Vagrantバージョン & さくらのVPSバージョン)
- Ansible でさくらのVPS の環境構築を自動化 ~ハマりポイントとともに~
- Ansibleで WordPress日本語版(3.9.1) を楽々インストール
- AnsibleをBest Practicesのディレクトリ構成にする
- Ansibleを使い出す前に押さえておきたかったディレクトリ構成のベストプラクティス
- https://github.com/akiyoko/ansible-examples/tree/master/wordpress-nginx
- ansibleでサーバー構成管理 | FiNC Developers Blog
- Ansible初心者がLAMP環境の構築を自動化する方法
- 構成管理ツールAnsibleを使ってみよう
- KAGOYA VPSでLAMP構築。Apacheサーバーインストール・ファイヤーウォールの設定まで。