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 サーバーのみ立ち上げる。(両方立ち上げても問題はないですが)