ネットワーク構築の勉強として、AWSで/24でVPC作って、その/24を複数のサブネットに分割する、みたいなのをやればいいのかな?
30台前後の疑似ネットワーク環境を構築できるような、今どきの演習環境って無いかな〜
何番煎じかわかりませんが。あっさり出来たのでメモ。
version: '3' services: rg-proxy: image: jwilder/nginx-proxy:latest container_name: rg-proxy privileged: true ports: - "80:80" - "443:443" volumes: - ./certs:/etc/nginx/certs:ro - ./vhost:/etc/nginx/vhost.d - /var/run/docker.sock:/tmp/docker.sock:ro - ./html:/usr/share/nginx/html restart: always environment: TZ: Asia/Tokyo letsencrypt-nginx: image: jrcs/letsencrypt-nginx-proxy-companion container_name: letsencrypt-nginx privileged: true volumes: - ./certs:/etc/nginx/certs:rw - /var/run/docker.sock:/var/run/docker.sock:ro - ./vhost:/etc/nginx/vhost.d - ./html:/usr/share/nginx/html environment: NGINX_PROXY_CONTAINER: rg-proxy restart: always networks: default: external: name: sample_network
ポイントは、Let's Encrypt側の環境変数「NGINX_PROXY_CONTAINER: rg-proxy」です。volumes_from の例が多かったですが、Ver3から非推奨になりました。ログを見たらこの環境変数を設定してコンテナ名称を入れないとダメというエラーが出たので、設定したら動きました。
validatorにDataRequiredを使っているせいです。InputRequiredに変更しましょう。
nginxはリバースプロキシの1つだけにして、後はサービスのコンテナを起動してリバースプロキシ側で色々頑張ろうと思ったのですが、nginx-proxyのDockerイメージも各々のWebアプリのNginx設定に対応しきれていないようなので...
こういう感じで、nginx-proxyには単純にバーチャルホストベースで割り振ってもらうだけにして、「nginx-proxy」⇔「nginx⇔各アプリのサービス」という仕組みにすると簡単にできました。この方式ならば、各々のWebアプリコンテナの稼働が確認できれば、後はnetworkとvirtualhostに追加するだけなので、結構柔軟です。
各コンテナごとに専用のnginxを立てるのは無駄な気もしなくてはないですが、取りあえずはこれで。はい。
VIRTUAL_PROTO=fastcgi
を設定するとfastcgi用の設定ファイルがnginx-proxyコンテナに書かれるんですが、上記のコメントにあるように「include fastcgi.conf」で指定しているfastcgi.confがありません。多分fastcgi_paramsのtypoだと思われます。