なんかかきたい

プログラミングなどの個人的なメモやサークル「ゆきいろパラソル」の情報を載せてます

nginxの設定をrspecでテストする

前略。やや複雑な nginx.conf があります。

nginx の設定はたまに変更する必要がありますが、それなりに重要な位置に配置されたnginxだと設定を書き換える際に、既存の構成を壊さないか、あるいは意図した通りに動作するのか事前に調べておきたいということがあります。

本物のnginxを立ててログを調べてもよいですが、手元で再現できて、テストができると便利じゃないかということで、dockerでnginxのやや複雑な設定をテストする環境を作りました。

github.com

テストしたいサーバもテストフレームワークもなんでもいいのですが、 今回は nginxrspec、あと 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 にならないように注意しておきたいですね。