社内共有用
開発環境の構築方法
バックエンドの開発環境の構築は、
インストールするソフトウェアのあれこれがあって複雑だ。
wikiに手順をドキュメント化して、
プロダクトが出てくるたびにwikiに書いた
手順をコピペするのがだるいので、以下の感じで環境を整える流れを作りたい。
- ホスト側(Mac OS Xマシン)でhomebrew環境を構築する
- ホスト側でansibleを利用するため、ansibleをインストールしておく
- packerを利用し、Vagrant用のVirtualboxゲストマシンを作成する
- ansible playbookを作成し、マシンの環境を構築する
- Vagrantのansible provisionerを利用し、ansible playbookを使いミドルウェアの設定を行う
Mac OS X以外の人
がんばって。といってもhomebrewのような
パッケージシステムを利用すればなんとかなるのだろう。
事前準備は何が必要か
homebrewのセットアップ。
※ Xcodeをインストールしておく必要がある。
サンプルとなるansible playbookを作成した
サンプルとなるansible playbookを用意した。
.
├── Brewfile
├── README.md
├── Vagrantfile
├── group_vars
│ └── vagrant.box
├── packer
│ ├── builds
│ ├── http
│ │ └── ks.cfg
│ ├── scripts
│ │ ├── base.sh
│ │ ├── cleanup.sh
│ └── template.json
├── roles
│ ├── common
│ │ └── tasks
│ │ ├── base.yml
│ │ └── main.yml
│ ├── mysql
│ │ └── tasks
│ │ ├── install.yml
│ │ ├── main.yml
│ │ ├── repo.yml
│ │ └── setup-the-root.yml
│ ├── nginx
│ │ ├── handlers
│ │ │ └── main.yml
│ │ ├── tasks
│ │ │ ├── copy-file-in-server.yml
│ │ │ ├── create-of-log-dir-for-wordpress.yml
│ │ │ ├── install.yml
│ │ │ ├── main.yml
│ │ │ └── repo.yml
│ │ └── templates
│ │ ├── conf.d
│ │ │ └── wordpress.conf
│ │ ├── nginx.conf
│ │ └── nginx.repo
│ ├── php
│ │ └── tasks
│ │ ├── install.yml
│ │ ├── main.yml
│ │ └── start-of-php-fpm.yml
│ └── wordpress
│ ├── files
│ │ └── wp-config.php
│ └── tasks
│ ├── install.yml
│ ├── main.yml
│ └── mysql.yml
├── site.yml
└── vagrant.box
playbook-wordpress
Brewfile, packerのテンプレート,Vagrantfile, ansibleのplaybook
それぞれを同梱することで、あんま考えずすぐに開発環境を構築できるようにしている。
このplaybookはnginx, mysql, php, wordpressのインストールを行う。
ホストで実行すべきコマンド
すでにhomebrewをインストールしているのであれば、
以下のコマンドを続けて叩けば終わる。
> brew bundle
> vagrant up --provision
> open http://vagrant.192.168.33.123.xip.io/
Brewfileにより、homebrewでセットアップ可能な
ソフトウェアがマシンにインストールされる。便利。
packerやらvagrantやらがインストールされる。
vagrant up --provision
を実行すると、
packerによりVagrant向けのマシンイメージが作成され、
続けてansible-playbookが実行される。
一回packerでマシンイメージを作成しとけば ~/.box 以下に
Vagrant boxイメージが置かれるようにした。
ただ、vagrant destory時に~/.boxの状態が変わるとpackerが再度buildするのがアレ感ある
ansible-playbookによるplaybookのゲストマシンへの適用後、
http://vagrant.192.168.33.123.xip.io/にアクセスすると、
wordpressの初設定画面が表示される。
ゲストマシンで起動するwordpressへの書き込みが行える状態になる。
ホスト側のディレクトリをゲストから使いたい...
Vagrantは、デフォルトで/vagrant
ディレクトリに対し、
Vagrantfileがあるディレクトリをマウントしている。
rails sをしてゲストマシン上でRailsアプリの立ちあげを実行したい場合は
以下のようにすれば良い。
> cd /vagrant
> rails s
コードを書くのは常にホスト側で良い。
今後の方針
- packer, vagrantの組み合わせは利用していきたい
- ミドルウェアのインストールについて、chefを利用してもよいのだけど、簡便なansibleなplaybookを作る方向で頑張りたい
- localhostへのアクセスはxip.io(か、xipd)を利用してアクセスするようにすればDNSサーバが...(/etc/hosts)の問題はなんとかなるのかな、ホスト名違うからSSL証明書問題(まあ厳密にしなければいいのかな)がありそうだけど...
3ヶ月後にはまた変わってそうだけど。
開発環境構築を簡略化する意味
- 伝えるのが3行で済むので、連絡ミスやオペミスは発生しなさそう
- マシンを作成するレシピはgithubに上がっているので取り違えたりすることはないだろう
- マシンを構築する手順がレシピ化(playbook)されているので、レビューが可能なのが良い。
- wikiに開発環境手順を逐一順序立てて書いていく必要がなくなるので負担が減る