前回の続きです。
git-hubに公開しているものの解説を続けます。
https://github.com/poppyhi/wordpress_ansible
いまさらですが、サーバの環境について、
OSはCentOS7、NginxとMariaDB(※)を使ってWordpressを動かしています。
今回は実際にどう記述していくかの部分です。
Ansibleが簡単なことをやるだけであれば、
簡単に使えるようになることがわかるかと思います。
よく使うものだけ記載します。
- group_vars/all の説明
www_root_path: /var/www
wordpress_root_path: /var/www/wordpress
変数名: 変数値 と言った感じに書きます。(正確にはハッシュとキーですが、使い方的には変数と考えて使えばいいともいます)
変数に:(コロン)がくっついていること、変数値と:の間にスペースがあることが大事です。
詳しくはYAMLの記述ルールを見てみるといいと思います。
プログラマーのための YAML 入門 (初級編)
- roles/blog_role/tasks/main.yml の説明
---
# include tasks
- include: configure_db.yml
- include: configure_wordpress.yml
'- include:' 〜.yml で他のファイル(同じディレクトリ内のファイル)を読みだしているだけです。
簡単な処理だけであればmain.ymlの1ファイルだけに書いてしまうのも手だと思いますが、
ある程度の処理量となると、分けたほうがメンテナンスが楽だと思います。
- roles/blog_role/tasks/configure_db.yml の説明
- name: install MariaDB
yum: name={{ item }} state=present
with_items:
- mariadb
- mariadb-server
- mariadb-libs
- MySQL-python
tags: database
ここでDBに必要なものをインストールしています。
Ansibleは処理内容はモジュールといった名前で呼んでいますが、
今回つかっているのはyumモジュールです。
モジュールはいっぱい有ります。
Ansibleの公式のドキュメントを読めば書き方の例等も載ってるので、
基本的にそれを読めば問題ないと思います。
http://docs.ansible.com/ansible/list_of_all_modules.html
'yum:' nameでインストールするものを指定。
stateはpresentは"インストールされていること"を意味します。
ほかにlatestとかが有りますが、これを書くと"最新の状態であること"となります。
つまり実行すると、インストールがすでにされているかだけではなく、
最新バージョンかチェックされ、最新じゃなかったらアップデートされます。
{{ item }}にwith_items: で書いてあるものが順に入って実行されていきます。
インストールするものをリスト化して処理しています。
'tags:' 処理毎につけてあるタグです。
playbookを実行する際、あとから特定のタグだけ実行、ということもできます。
なのでつけておいたほうが後で便利です。
- name: mariadb running
service: name=mariadb state=started enabled=yes
tags: database
serviceの起動とかを行っています。
'service:' nameで処理対象のサービスを指定。
stateでサービスの状態を指定。startedはサービス開始を意味する。
enabled で自動起動させるかを指定。
- name: setting mariadb config
template: src=my.cnf.j2 dest=/root/.my.cnf owner=root group=root mode=0644
notify: restart mariadb
tags: database
設定ファイルの配置とかを行っています。
'template:' srcで'roles/blog_role/templates/'配下に置いてある設定ファイルを呼び出しています。
destで配置先を指定。
owner、groupで配置するファイルの所有者、所有グループを指定、modeで権限を指定。
'notify:' 処理で変更があった場合に実行される部分。
'roles/blog_role/handlers/main.yml'内の'- name: restart mariadb'を実行しているということです。
設定ファイル新規に置いたら(もしくは差し替えたら)再起動してね、という指示です。
- roles/blog_role/tasks/configure_wordpress.yml の説明
- name: make directory for logs
file: path="{{ log_path }}" state=directory owner=nginx group=nginx mode=0775
tags: wordpress
ディレクトリ作成を行っています。
'file:' pathで作成先を指定。{{ log_path }}は'group_vars/all'で記載されている変数値が入ります。
stateで作成対象物がディレクトリであることを指定。
owner,group,modeはディレクトリの権限の設定です。
- name: Download WordPress
get_url: url="{{ wordpress_download }}" dest=/tmp/wordpress.tar.gz
tags: wordpress
ファイルのダウンロードを行っています。
'get_url:' urlでdownload先を指定。
destでダウンロードしたファイルの配置先を指定。ついでにダウンロードしたファイルのファイル名も指定。
- name: set selinux mariadb wordpress
command: /sbin/setsebool -P httpd_can_network_connect_db 1
tags: selinux
Ansibleのモジュールで処理させずに、サーバ上のコマンドを直接実行させることもできます。
今回はselinuxの設定をしています。
'command:' 実行するコマンドを指定します。そのまま実行されます。
上記のことを抑えれば簡単なものであれば大体の処理が書けると思います。
firewalldの設定だとかmariadbの処理だとか各ツールに対応したモジュールも用意されています。
このモジュールあるかな、と思ったらAnsibleの公式のドキュメントに見に行って、使い方を調べる、
そうやって書き進めていきます。
Ansibleについてはいろいろあるので、また機会を見つけて記事にまとめてみようと思います。
※ MariaDBについて
ムダ知識ですが、MariaDBはMySQLをforkして誕生したものです。
MySQLはある企業が生み出したもので、それがSun Microsystemsに買収され、
さらにSun MicrosystemsがOracleに買収されました。
Oracleに買収され、それをあまり良くないと思ったMySQLの生みの親が、
完全に互換のある形でforkして作ったのがMariaDBです。
といっても完全に互換があるのはVer5.5までだった記憶で、
その後は独自機能とかが増えていっていると聞いたような。
新しいFedoraだと標準で入ってるのがMariaDBに置き換わっていたりします。