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 にならないように注意しておきたいですね。