Laravel+Nginx+Dockerでpublicファイルを出すために

本題

Dockerを使っていると、NginxとLaravelのコンテナはもちろん分割するものと思う。 だが、このときLaravelからpublicファイルを出すためには、少しコツがいる。

なぜならば、Nginxから /api にアクセスが来た際は容易にLaravelをFastCGI起動することができるものの、 files にアクセスした際に、Laravelコンテナにproxyしても、 /var/www/html/public/files に行くわけではない。 (特定のディレクトリにproxyすることは可能だったら話はもう少し簡単になるが方法がわからない)

ということで、Laravelの /public ディレクトリのファイルはLaravelではなく、nginxコンテナから返さなければいけなくなる。 そのためには、docker-compose.yml でLaravelコンテナのソースの /public/files をnginxコンテナにマウントしなければならない、ということになる。

マウントさえしてしまえば、 /files へのアクセスの際に、 /var/www/html/public のような場所からpublicファイルをホストすることができる。