windows7内にansibleを使ってWebサーバ、DBサーバを構築する ~provision用shell編~

windows7内にansibleを使ってWebサーバ、DBサーバを構築する ~Vagrantfile編~の続きです。

  1. vagrant_dataに各種設定ファイルを設置しておきます。

    ansible.cfg
    hosts
    httpd.conf
    MariaDB.repo
    my.cnf
    php.ini
    lamp.yml
    php.yml
    mariadb.yml
    repo.yml
    

    apacheやMariaDB、phpの設定ファイルについてはこちらでは説明しません。
    各種ymlファイルはansibleのplaybookになっているので、次回説明します。
    ansible.cfg

    [defaults]
    host_key_checking = False
    inventory = /etc/ansible/hosts
    

    ここではsshに初めてアクセスする際の確認をスキップする設定とインベントリファイルの指定を行っています。
    hosts

    [web-servers]
    192.168.33.12 ansible_ssh_private_key_file=/etc/ansible/private_key_web ansible_ssh_user=vagrant
    [db-servers]
    192.168.33.13 ansible_ssh_private_key_file=/etc/ansible/private_key_db ansible_ssh_user=vagrant
    

  2. ctrl_setup.shにシェルで実行するコマンドをまとめて記述しておきます。

    #!/bin/bash
    #epelリポジトリのimport
    sudo rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7
    #epel,sshpass,pythonのインストール
    sudo yum install -y epel-release sshpass python-devel
    #pipのインストール
    sudo easy_install pip
    #ansible,paramiko,PyYAML,Jinja2,httplib2のインストール
    sudo pip install ansible paramiko PyYAML Jinja2 httplib2
    #ansible設定ファイル設置ディレクトリの作成
    if [ ! -e '/etc/ansible/' ]; then
        sudo mkdir /etc/ansible/
    fi
    #webのssh用private_keyを権限が変更出来るディレクトリにコピー
    sudo cp -f /vagrant/.vagrant/machines/web/virtualbox/private_key /etc/ansible/private_key_web
    #dbのssh用private_keyを権限が変更出来るディレクトリにコピー
    sudo cp -f /vagrant/.vagrant/machines/db/virtualbox/private_key /etc/ansible/private_key_db
    #webのssh用private_key権限を700に変更
    sudo chmod 700 /etc/ansible/private_key_web
    #dbのssh用private_key権限を700に変更
    sudo chmod 700 /etc/ansible/private_key_db
    #ansbileのインベントリファイルをコピー
    sudo cp -f /vagrant_data/hosts /etc/ansible/
    #ansbileインベントリファイルの実行権限を削除
    sudo chmod -x /etc/ansible/hosts
    #ansible設定ファイルをコピー
    sudo cp -f /vagrant_data/ansible.cfg /etc/ansible/
    #ansibleのplaybookの実行
    sudo ansible-playbook /vagrant_data/lamp.yml
    

windows7内にansibleを使ってWebサーバ、DBサーバを構築する ~Vagrantfile編~

  1. 現在のところansibleはwindowsには対応していません。
    なので、今回はvagrantでマルチマシン設定を行います。
    構築するのは下記の構成。
    ansible
    ctrl : ansibleをインストールしここからwebサーバ、DBサーバの構築を指示します。
    web : webサーバです。apache、php、mariaDB(クライアント用途)をインストールします。web→dbサーバに接続する設定をします。
    db : dbサーバです。mariaDB(サーバ)をインストールして外部から接続するように設定します。
    ※git bashをインストールしておくとlinuxのコマンドがある程度打てるようになるのでお勧めです。

  2. vagrant init行います。
    今回のテスト用にホームディレクトリにansibleというディレクトリを作成し、その中でvagrant init行います。
    ※vagrant、git bashのインストールは完了しているのが前提です。

    mkdir /c/ansible
    cd /c/ansible
    vagrant init centos71
    vi Vagrantfile
    

    上記の例ではc:\の直下に作業ディレクトリansibleを作成しました。

  3. Vagrantfileの記述
    ctrlにansibleをインストール行い、webサーバ、dbサーバの構成を管理するようにします。

    Vagrant.configure(2) do |config|
    

    に追記していく。
    下記の設定を行うとwindows7のディレクトリとVM内のディレクトリでファイルの共有が可能になります。
    前者がwindows、後者がlinux側のディレクトリ。

    config.vm.synced_folder "./data", "/vagrant_data"
    

まずはctrl
下記のように記載する。

//ctrl
config.vm.define :ctrl do |ctrl|
    //ボックス名
    ctrl.vm.box = "centos71"
    //sshのforward設定
    ctrl.vm.network :forwarded_port, guest: 22, host: 2001, id: "ssh"
    //IP設定
    ctrl.vm.network :private_network, ip: "192.168.33.11"
    //provision実行するshell指定
    ctrl.vm.provision "shell", privileged: false, path: "ctrl_setup.sh"
end

実行するshellファイルctrl_setup.shは主にansibleのインストールやsshの設定、ansibleのplaybookの実行を行うように記述しています。
内容は後述します。
次にweb。

//web
config.vm.define :web do |web|
    //ボックス名
    web.vm.box = "centos71"
    //sshのforward設定
    web.vm.network :forwarded_port, guest: 22, host: 2002, id: "ssh"
    //httpのforward設定
    web.vm.network :forwarded_port, guest: 80, host: 8000, id: "http"
    //IP設定
    web.vm.network :private_network, ip: "192.168.33.12"
end

最後にdb。

//db
config.vm.define :db do |db|
    //ボックス名
    db.vm.box = "centos71"
    //sshのforward設定
    db.vm.network :forwarded_port, guest: 22, host: 2003, id: "ssh"
    //IP設定
    db.vm.network :private_network, ip: "192.168.33.13"
end

すべてまとめて書くと下記のようになる。
ctrlが最下部なのはwebとdbに対してansibleのplaybookを実行するため。

Vagrant.configure(2) do |config|
    config.vm.box = "base"
    config.vm.synced_folder "./data", "/vagrant_data"
    config.vm.define :web do |web|
        web.vm.box = "centos71"
        web.vm.network :forwarded_port, guest: 22, host: 2002, id: "ssh"
        web.vm.network :forwarded_port, guest: 80, host: 8000, id: "http"
        web.vm.network :private_network, ip: "192.168.33.12"
    end
    config.vm.define :db do |db|
        db.vm.box = "centos71"
        db.vm.network :forwarded_port, guest: 22, host: 2003, id: "ssh"
        db.vm.network :private_network, ip: "192.168.33.13"
    end
    config.vm.define :ctrl do |ctrl|
        ctrl.vm.box = "centos71"
        ctrl.vm.network :forwarded_port, guest: 22, host: 2001, id: "ssh"
        ctrl.vm.network :private_network, ip: "192.168.33.11"
        ctrl.vm.provision "shell", privileged: false, path: "ctrl_setup.sh"
    end
end