NestJSで作成したサーバーに対してNginxから飛ばそうとした際に、NestJSのポートを可変にできる様にしようとしてNginxのconfに環境変数を渡せずハマったので備忘録として残します。
結論
dockerhubの公式イメージに書いてありました。。
https://hub.docker.com/_/nginx
→Using environment variables in nginx configuration
に書いてあります
confそのものではなく、conf.templateをコンテナにコピーしてやるだけです
※ignxのバージョン1.19から使える機能みたいです
docker-compose.yml
services:
server:
image: node:12-alpine
container_name: server
・・・(省略)・・・
environment:
- PORT=${SERVER_PORT}
proxy:
image: nginx
container_name: proxy
depends_on:
- server
volumes:
- ./nginx/default.conf.template:/etc/nginx/templates/default.conf.template
ports:
- 80:80
environment:
- SERVER_PORT=${SERVER_PORT}
nginx/default.conf.template
server {
listen 80;
server_name localhost;
location / {
proxy_redirect off;
proxy_pass http://server:${SERVER_PORT};
}
}
何にハマったのか?
-
nginx 環境変数
とかで検索すると以下の方法が出てくる- perl_setやset_by_luaを使う方法
- 普通にconfファイルを書き換える方法
ファイルを書き換えるのはめんどくさかったので perl_setでやろうとしたら./configure
がnot foundとなってしまいperl_setが使えなかった。。。