2015/09/09
Ansibleを実際に導入してみた (2)
前回に引き続き、Ansibleでサーバー構築を実践的にやってみました。
前回の失敗はファイアーウォールっぽく、すぐに出来たので割愛します。
今回はローカルのVagrantで構築した開発環境に挑んでみます。
インストールするものとしては、
・Apache
・Mysql
・PHP
・git
・LaunchCartそのもの (ファイルとDB含む)
ファイル構成
├── ansible.cfg
├── clean.retry
├── clean.yml
├── group_vars
│ └── all
├── hosts
├── roles
│ ├── apache
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── tasks
│ │ │ └── main.yml
│ │ └── templates
│ │ └── httpd.conf
│ ├── git
│ │ ├── files
│ │ │ └── id_rsa
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── tasks
│ │ │ └── main.yml
│ │ └── templates
│ ├── lc_install
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── tasks
│ │ │ └── main.yml
│ │ └── templates
│ ├── mysql
│ │ ├── files
│ │ │ └── LaunchCartStandard.sql
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── tasks
│ │ │ └── main.yml
│ │ └── templates
│ │ └── my.cnf
│ └── php
│ ├── handlers
│ ├── tasks
│ │ └── main.yml
│ └── templates
│ └── php.ini
├── site.retry
└── site.yml
このような感じです。
順番としては
- git インストール
- LCインストール (fileのみ)
cache, logs ディレクトリの権限設定含む - php パッケージのインストール
php.iniをテンプレートとして対象サーバへ送る - mysqlインストール
インストール後の起動とmy.cnfの対象サーバ送信 - Apacheインストール
インストール後の起動
Apacheなどのミドルウェアを先に持ってくると設定ファイルに
「対象ディレクトリが見つかりません」
とご親切にエラーを返してくれます。。。
以下、行き詰まった時のエラー
1 2 3 4 | TASK: [apache | Apacheを起動] ********************************************** failed: [192.168.33.11] => {"failed": true} msg: Syntax error on line 292 of /etc/httpd/conf/httpd.conf: DocumentRoot '/var/www/html/LaunchCartKai/web' is not a directory, or is not readable |
1 2 3 4 5 | fatal: [192.168.33.11] => SSH Error: debug1: compress incoming: raw data 287, compressed 255, factor 0.89 while connecting to 192.168.33.11:22 It is sometimes useful to re-run the command using -vvvv, which prints SSH debug output to help diagnose the issue. FATAL: all hosts have already failed -- aborting |
ソースの例 (Apache, Framework等だけ抜粋)
1 2 3 4 5 6 7 8 9 10 11 | --- - name: Test hosts: web-server sudo: yes roles: - git - lc_install - php - mysql - apache |
1 2 | [web-server] 192.168.33.11 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | --- - name: Uninstall hosts: web-server sudo: yes tasks: - name: Apacheをアンインストール(初回) yum: name=httpd-devel state=absent ignore_errors: yes - name: mysql-serverをアンインストール(初回) yum: name=mysql-server state=absent ignore_errors: yes - name: git をアンインストール (初回) yum: name=git state=absent ignore_errors: yes - name: モジュールをアンインストール yum: name={{ item }} state=absent with_items: - mysql-server - git |
1 2 3 4 5 6 7 8 9 | --- - name: Apacheをインストール yum: name=httpd-devel state=present - name: Apache設定ファイル更新 template: src=httpd.conf dest=/etc/httpd/conf/httpd.conf - name: Apacheを起動 service: name=httpd state=started enabled=true |
※設定ファイルのhttpd.confはroles/apache/templates以下に用意しておきます。
1 2 3 4 5 6 7 8 9 10 | -- - name: git cloneしてくる git: repo=root@{{lc-server}}:/var/www/git/LaunchCartKai.git dest=/var/www/html/LaunchCartKai version=master accept_hostkey=True sudo: False - name: 権限設定(cache) file: path=/var/www/html/LaunchCartKai/app/cache recurse=yes state=directory mode=0777 - name: 権限設定(logs) file: path=/var/www/html/LaunchCartKai/app/logs recurse=yes state=directory mode=0777 |
補足
まとめ切れなかったため今回は割愛して後々ドキュメントにでもまとめたいと思います。最後に結果のエビデンス!
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 | [root@localhost] ~/ansible_work # ansible-playbook -i hosts site.yml PLAY [Test] ******************************************************************* GATHERING FACTS *************************************************************** ok: [192.168.33.11] TASK: [git | gitをインストール] **************************************** ok: [192.168.33.11] TASK: [lc_install | git cloneしてくる] ************************************ changed: [192.168.33.11] TASK: [lc_install | 権限設定(cache)] ************************************** changed: [192.168.33.11] TASK: [lc_install | 権限設定(logs)] *************************************** changed: [192.168.33.11] TASK: [php | install php packages.] ******************************************* ok: [192.168.33.11] => (item=php,php-devel,php-mbstring,php-mysql,php-mcrypt,php-gd,php-pear,php-pecl-apc,php-xml,php-posix,php-intl) TASK: [php | php.ini set.] **************************************************** ok: [192.168.33.11] TASK: [mysql | mysql-serverをインストール] ***************************** ok: [192.168.33.11] TASK: [mysql | install mysql python module (via yum)] ************************* ok: [192.168.33.11] TASK: [mysql | mysql設定ファイルを設置] ****************************** ok: [192.168.33.11] TASK: [mysql | mysqlを起動] ************************************************ ok: [192.168.33.11] TASK: [mysql | DB作成] ****************************************************** ok: [192.168.33.11] TASK: [mysql | DB dump] ******************************************************* changed: [192.168.33.11] TASK: [apache | Apacheをインストール] ********************************** ok: [192.168.33.11] TASK: [apache | Apache設定ファイル更新] ******************************* ok: [192.168.33.11] TASK: [apache | Apacheを起動] ********************************************** ok: [192.168.33.11] PLAY RECAP ******************************************************************** 192.168.33.11 : ok=16 changed=4 unreachable=0 failed=0 |
Author Profile
スターフィールド編集部
SHARE