さくらVPSに CentOS7 をインストールして Ansible で環境構築した

メモ。

github.com

CentOS7 のインストールは、公式の手厚いサポートのおかげで簡単でした。

Ansible

シンプルで分かりやすくて、コードを読み返したときにすぐ使い方を思い出せるところが好き。
ツールを使わずに ssh でログインしてせっせとインストール作業をしても良かったのですが(以前はそうしていた)、今回のようにOS再インストールしようとしたとき、過去の自分がどういう設定をしていたのか苦労して思い出すハメになるので避けました。

ansible-vault

ansible-vault ツールを使って、パスワードまわりを暗号化しました。便利!
GitHub で管理するので、一応念のためポート番号なんかも暗号化するようにしました。

参考:Ansible Vaultを利用して秘密情報を暗号化する | Developers.IO

LastPass

ansible-vault やユーザーのパスワードなどなどまとめて管理してます。
仕事で使ってる以外に LastPass を選んだ理由はないです。
プライベートではあまりまともに使ってなかったのですがやっぱり便利。

Vagrant

テスト実行は、おなじみの Vagrant で CentOS7 を立ち上げて行いました。
vagrant.hosts と honban.hosts を作って宛先毎にユーザーを変えたり、GitHubにアップする手前なんとなく IP 直書きは避けたかったので、適当なドメイン(今回は sakura.vps にした)を /etc/hosts に書いたりして、よしなにしてます。
/etc/hosts に書く戦略はわりとうまくいって良かったです。

ssh

sshd やファイヤウォールの設定変更後にサービスを再起動したところ、vagrant では問題なく動作するものの、本番では ssh 再接続ができずにエラーで終了し、ツライ思いをしました。
いくつか方法を試してみたけど結局、handler を使って sshd と firewalld をまとめて再起動してあげるのが良さそうでした。

紆余曲折ある中で、handler は変更があった場合にタスクが完了した後まとめて実行されることを知ったり、firewall-cmd は firewalld 起動中しか動かなくて、停止中は firewall-offline-cmd を使うことを知ったりしました。

firewalld に関しては同じような思いをした人がそれらしき issue を上げているようす。
firewalld fails, if firewall is not started · Issue #1112 · ansible/ansible-modules-extras · GitHub

おわり

すこし苦労したけど冪等性を得た。

Rails + Redshift + RSpec が動かないのはなんでや

redshift の adapter は aamine/activerecord4-redshift-adapter を使ってる。
GitHub - aamine/activerecord4-redshift-adapter: ActiveRecord 4 DB adapter for Amazon Redshift

なんだか動かない。

$ ./bin/rspec
rake aborted!
Rake tasks not supported by 'redshift' adapter

作者は3年前から動かないことを把握してる。
"rake spec" does not work · Issue #2 · aamine/activerecord4-redshift-adapter · GitHub

Issue のコメントにある通り、たぶんこのあたりが足りてない。

他のアダプターはどうなっているのかというと、例えば sqlserver は自前実装してる。
activerecord-sqlserver-adapter/sqlserver_database_tasks.rb at master · rails-sqlserver/activerecord-sqlserver-adapter · GitHub

redshift_database_tasks.rb を作って PR するのが、ちゃんとした大人っぽい。

./bin/rspec 後、どこで abort しているかというと、rails_helper.rb の ActiveRecord::Migration.maintain_test_schema!

maintain_test_schema が中で bin/rake db:test:prepare してるのでコケる。
rails/migration.rb at 4-2-stable · rails/rails · GitHub

rails_helper.rb の ActiveRecord::Migration.maintain_test_schema! をコメントアウトしてあげれば動く。
(マイグレーションなどは自前でがんばる。)