Vagrant + VirtualBox + Ansinble で MT を使えるようにする を書きましたが、ちょっと内容を変えて手順が減るようにしてみました。
- CGI を実行可能にする
- Apache ドキュメントルートを共有フォルダに
上記の手順が不要になります。少し楽!
- Vagrant と VirtualBox をインストールする
- Vagrant に box を追加する
- Vagrant 用にフォルダ作成して init
- Vagrantfile を編集する
- Vagrant を起動する
- Ansible をインストール
- SSH 接続の設定をする
- Ansible の設定ファイルを編集
- Ansible の playbook を作る
- MT の設置
目次
Vagrant と VirtualBox をインストールする
インストーラーなどで適宜入れておく。
Vagrant に box を追加する
box は以下のサイトから検索して入れたい物を探す。
Discover Vagrant Boxes | Atlas by HashiCorp
ここでは centos 入れたいなってことで「chef/centos-6.5」を入れます。
$ vagrant box add chef/centos-6.5
しばらく時間かかる。
入れ終わったら、
$ vagrant box list
で box の一覧を表示してみる。
Vagrant 用にフォルダ作成して init
Vagrant 用にフォルダを作成。好みの場所で OK。作ったらコマンドでそのフォルダ内に移動。例えば c:\vagrant だったら cd vagrant で移動しておく。
vagrant init する
$ vagrant init chef/centos-6.5
「chef/centos-6.5」のところは vagrant box list で表示された一覧から、使いたいものを。
init すると Vagrantfile がフォルダ内に作成される。
ついでに最低限覚えておきたい Vagrant コマンド
# vagrant 起動 $ vagrant up # vagrant プロビジョニング $ vagrant provision # vagrant リロード(Vargrantfile再読込したり) $ vagrant reload # vagrant シャットダウン $ vagrant halt # vagrant 要らないから捨てる $ vagrant destroy
参考)
Vagrantfile を編集する
Ansible を使うので 2 つたちあげる。
- host … Ansible 入れる用
- web … MT や db など入れる用
config.vm.box = "chef/centos-6.5"
をコメントアウトして、その下あたりに以下の内容を追加する。
config.vm.define "host" do |node| node.vm.box = "chef/centos-6.5" node.vm.hostname = "host" node.vm.network :private_network, ip: "192.168.43.51" end config.vm.define "web" do |node| node.vm.box = "chef/centos-6.5" node.vm.hostname = "web" node.vm.network :private_network, ip: "192.168.43.52" node.vm.synced_folder "./htdocs", "/var/www/html" end
host 側に Ansible を入れて、web 側に MT や db を入れる感じで。
ここで Apache ドキュメントルートを共有フォルダ内の htdocs にするよう設定しておくことに。
Vagrant を起動する
$ vagrant up
起動できたら、Vagrant のステータスを確認する。
$ vagrant status
Ansible をインストール
Vagrant の host サーバーに ssh で入る。
$ vagrant ssh host
mintty を使ってる人は「Windows で mintty を使って vagrant ssh したい時」も参考に。
CentOS の外部リポジトリ epel を導入
Ansible を入れるには CentOS の外部リポジトリ epel が必要ということで、まずはこれを入れる。
上記サイトで「epel-re」をページ内検索して、epel-release-○-○.noarch.rpm を見つけ、URL をコピーする。(今回は epel-release-6-8.noarch.rpm を入れる)
$ wget 先ほどコピーしたURL
例えば、$ wget https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm みたいな感じ。
wget 終わったら、
$ sudo rpm -Uvh epel-release-6-8.noarch.rpm
をする。
Ansible を入れる
$ sudo yum -y install ansible
入ったか確かめておく。
$ ansible --version
SSH 接続の設定をする
$ vi .ssh/config
で config を開いて、
Host web HostName 192.168.43.52
と書いて保存して閉じる。(vi の保存は :w で、閉じるには :q)
ファイルのパーミッションを変える。
$ chmod 600 .ssh/config
これでアクセス可能になったはず。
鍵を作る
$ ssh-keygen -t rsa
パスとかは全部そのまま何も入力せずエンターで。
$ ssh-copy-id web
接続するか聞かれるので「yes」。パスワードを聞かれるので Vagrant のユーザーパスワード「vagrant」を入力。
設定が終わったら ssh で web に入れるか確認する。入れたら出て host に戻っておく。
$ ssh web $ exit
Ansible の設定ファイルを編集
hosts ファイルを編集
$ vi hosts
次のように書いて、
[web] 192.168.43.52
保存して閉じる。
ansible.cfg ファイルを編集
$ vi ansible.cfg
次のように書いて、
[defaults] hostfile = ./hosts
保存して閉じる。繋がるか確認してみる。
$ ansible all -m ping
Ansible の playbook を作る
playbook っていうのは、Chef でいうとレシピにあたるもの。YAML 形式で書きます。
$ vi playbook.yml
次のように書いて保存。Apache、Perl、PHP、その他モジュールなど入れる設定。
--- - hosts: all sudo: yes tasks: - name: add a new user user: name=hibiki - name: install libselinux-python yum: name=libselinux-python state=latest - hosts: web sudo: yes vars: #mysql dbuser: mtdbuser dbpass: mtdbpasswd dbname: mtdb tasks: - name: set timezone replace: > dest=/etc/sysconfig/clock regexp='^ZONE="UTC"' replace='ZONE="Asia/Tokyo"' # apache - name: install apache and gcc yum: name={{item}} state=latest with_items: - gcc - httpd - name: set Options ExecCGI lineinfile: > dest=/etc/httpd/conf/httpd.conf regexp='Options Indexes FollowSymLinks' line='Options Indexes FollowSymLinks ExecCGI' - name: set AddHandler cgi-script lineinfile: > dest=/etc/httpd/conf/httpd.conf regexp='^#AddHandler cgi-script .cgi' line='AddHandler cgi-script .cgi' - name: start apache and enabled service: name=httpd state=started enabled=yes # perl - name: install perl modules yum: name={{item}} state=latest with_items: - perl - perl-CPAN - perl-core - perl-devel - perl-CGI - perl-Archive-Tar - perl-libwww-perl - perl-YAML - ImageMagick - openssl-devel - zlib-devel - readline-devel - perl-ExtUtils-MakeMaker - postgresql-devel - gd-devel - libxml2-devel - expat-devel - ImageMagick-perl - name: cpanm - set locale command: localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 - name: install cpanm shell: curl -L http://cpanmin.us | perl - App::cpanminus - name: add cpanm symbolic link to /usr/bin/ file: src=/usr/local/bin/cpanm dest=/usr/bin/cpanm state=link - name: install cpan-modules with cpanm cpanm: name={{item}} notest=True with_items: - Plack - CGI::PSGI - IPC::Run - Cache::File - Archive::Zip - XML::SAX - Authen::SASL - Mozilla::CA - Image::Size - CGI::Parse::PSGI - Imager - Crypt::DSA - Cache::Memcached - Digest::SHA1 - XML::SAX::Expat - YAML::Syck - DBD::Pg - Net::SSLeay - XMLRPC::Transport::HTTP::Plack - SOAP::Lite - Crypt::SSLeay - Net::SMTP::SSL - Net::SMTP::TLS - IO::Socket::SSL - GD - XML::Atom - XML::LibXML::SAX - XML::SAX::ExpatXS - DBD::SQLite2 # php - name: install php yum: name={{item}} state=latest with_items: - php - php-devel - php-mbstring - php-mysql notify: - restart apache # mysql - name: install mysql yum: name={{item}} state=latest with_items: - python-setuptools - python-devel - mysql-devel - mysql-server - MySQL-python - name: mysql chkconfig command: chkconfig mysqld on - name: mysql restart command: /etc/init.d/mysqld restart - name: mysql user create mysql_user: name={{dbuser}} password={{dbpass}} priv=*.*:ALL,GRANT state=present - name: mysql db create mysql_db: name={{dbname}} state=present handlers: - name: restart apache service: name=httpd state=restarted
lineinfile で httpd.conf を書き換えるように設定できるの便利ー。
playbook を実行する。
$ ansible-playbook playbook.yml
http://192.168.43.52/ がサーバーとして立ち上がってるはずなので、開いて見る。Apache 2 Test Page あたりが表示されるはず。
playbook のコマンドは以下の通り。実行前に –check とかしても良い。
# playbook を実行する。 $ ansible-playbook playbook.yml # playbook にエラーがないか $ ansible-playbook playbook.yml --syntax-check # playbook の中にどんなタスクがあるか確認できる $ ansible-playbook playbook.yml --list-task # playbook を dryrun(=実際には実行しないけど、実行したらどういう風になるか確認)する $ ansible-playbook playbook.yml --check
MT の設置
ローカルの htdocs がサーバーのドキュメントルートと同期されてるので、ローカルの htdocs 内に MT を置いて、必要に応じてパーミッション変える。
初回以降は host サーバーは不要なので、vagrant 起動時には
$ vagrant up web
として web サーバーのみ立ち上げる。(両方立ち上げても問題はないですが)