Vagrant x AnsibleでCentOS 8のRuby on Rails構築ソースがなかったため、趣味で作成して、GitHubに vagrant-ansible-ror を公開しました。
ポイント
- Vagrantで自動的にCentos 8でRuby on Railsを構築して、構築後にMinitestまで走らせています。
- AnsibleはFail Firstになっているため、Ansible上にはテスト実装しませんでした(コケたらわかるため)。
- 冪等性の観点だとGemなどはバージョン固定が望ましいと思うのですが、Bundlerで依存関係を管理していることや、あくまで一時的な開発目的のため、バージョンはあえて固定しませんでした(常に最新インストール)。
環境
- ホスト(Mac側)
- ansible-playbook 2.9.3
- Vagrant 2.2.6
- macOS Catalina version 10.15.3
- ゲスト(サーバー側)
- Frontend: Not specified (Ruby on Rails default)
- Application: Ruby on Rails 5
- Middleware: PostgreSQL, Puma
- OS: CentOS 8
- 備考
Ruby version 2.6.5
ハマりポイント
-
情報が古い
GitHubや記述系ブログに公開されているVagrant, Ansibleのソースが古いことが多い。たとえば、rootになる設定としてsudo: yes
とあるが、最新版はbecome: yes
にしないと動かない。ただし、技術系ブログに、「その情報古いですよ」という記事を書いてくれている人がたくさんいるため、解決できた。 -
ベストプラクティスがどれかわからない
Ansible Best Practices に一例が公開されているが、もっとたくさんの参考情報がほしかった。GitHubで探したが、どれがよいのかわからなかった。 -
ドキュメントがまとまっていない(気がする)
Kindle本やQiitaを記事を参考にしながら、 Ansible Documentation でキーワード検索して仕様把握する、といったことをやった。しかし、古い情報が混在しているため、StackOverflowとGitHubでソース検索(become:yesとかで検索)しながら検証といった進め方で、かなりハマった。ドキュメントの完成形は Vue.js だと思う。考え方、サンプルコード、サンプル動画、ソース解説、体系的に1から順に整理されていて上から読んでいけば一通りわかる。 -
最新版だとコケる
【CentOS 8.0 (version 1905.1) だとファイル共有するためのvbguestが使えない(rsyncは使えるが、virtualboxが使えない)】
→ GitHubでIssueが切られているが、 CentOS 8 - installing Guest additions fails #367 現在は対応待ち。
【Ruby 2.7.0 だとRuby on Rails用に必要なGem郡が対応されていない】
→ RailsアプリをRuby 2.7.0で動かして分かったこと に書かれているが、Warningの連続でMinitestすらまともに動かなかったため、バージョンを2.6.5に下げて暫定対応した。 -
Ansible Playbookのデバッグが難しい
Ansible Playbookの実行中に、コマンドプロンプトからの質問(削除しますか?(y/n)みたいな)があると、なにも表示されずにフリーズしてしまう。そのため、Playbookでデバッグモード(-vvv)とステップ実行(--step)しながら、フリーズした箇所で、$ vagrant ssh
して実際にコマンドを打ってみて、どんな状況になっているのか確認したりと、かなり面倒だった。もしかしたら、もっとうまいやり方があるのかもしれないが、方法わからず。
自分用のハンドブックになるが、 Ansible Playbook Command にデバッグでよく使用したコマンドを記述した。 -
構成管理は意外と時間がかかるし工数がかかる
冪等性を担保する必要があるため、何度も何度も実行しては設定を修正して、というのを繰り返す必要がある。「ターミナルで打ったコマンドをただ設定するだけだから、そんなに時間かからないだろ」と思っていたが、1回目がうまくいっても2回目にコケる、状況によって環境が変わってしまうなど、冪等性の担保が難しかった。$ rails new
するだけのRuby on Railsをただ構築するだけの設定なのに、数週間の工数がかかった(インフラ強いひとであればもっと早いと思うが)。
その代わり、一度構成管理が完璧に仕上がれば、作業手順書も人手も必要なくなるため、長期手に運用する場合は、工数が大幅に減らせると感じている。