nginxの設定をrspecでテストする
前略。やや複雑な nginx.conf
があります。
nginx
の設定はたまに変更する必要がありますが、それなりに重要な位置に配置されたnginxだと設定を書き換える際に、既存の構成を壊さないか、あるいは意図した通りに動作するのか事前に調べておきたいということがあります。
本物のnginxを立ててログを調べてもよいですが、手元で再現できて、テストができると便利じゃないかということで、dockerでnginxのやや複雑な設定をテストする環境を作りました。
テストしたいサーバもテストフレームワークもなんでもいいのですが、
今回は nginx
と rspec
、あと proxy_pass
の動作検証のため sinatra
を使います。
docker-compose.yml
version: '3' services: nginx: image: nginx:latest volumes: - ./conf/nginx/etc/nginx:/etc/nginx networks: httpspec: rspec: image: ruby:2.6-slim volumes: - ./conf/rspec:/opt/ruby entrypoint: /opt/ruby/entrypoint.sh networks: httpspec: sinatra: image: ruby:2.6-slim volumes: - ./conf/sinatra:/opt/app entrypoint: /opt/app/entrypoint.sh networks: httpspec: aliases: - upstream00 - upstream01 - upstream02 networks: httpspec:
├── conf │ ├── nginx │ │ └── etc │ │ └── nginx │ │ └── nginx.conf │ ├── rspec │ │ ├── entrypoint.sh │ │ └── spec │ │ ├── http_spec.rb │ │ └── spec_helper.rb │ └── sinatra │ ├── app.rb │ └── entrypoint.sh └── docker-compose.yml
あとは nginx.conf
を書き換えてコンテナを立ち上げ、 http_spec.rb
にテストしたい動作を書いていけば自動でテストができ、
設定変更で壊れた場合にも特定がしやすくなります。
とはいえ、こういうのを用意している時点で負けてる感はあるので、こうならないように複雑な nginx.conf
にならないように注意しておきたいですね。