環境変数を使用する方法
Nginxの公式イメージではNginxの設定ファイルで環境変数を使用できます。
使用する方法は以下のとおりです。
設定ファイルのテンプレートを作成
ホスト側にNginxの設定ファイルのテンプレートを作成します。
環境変数を使用したい箇所に${ENVIROMENT}
のように記述します。
upstream app {
server unix:///${PROJECT_NAME}/tmp/sockets/puma.sock;
}
server {
listen 80;
server_name localhost;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
proxy_set_header X-Real-IP ;
proxy_set_header X-Forwarded-For ;
proxy_set_header Host ;
proxy_pass http://app;
}
}
テンプレートをバインドマウント
作成したテンプレートをコンテナ内の/etc/nginx/templates
にバインドマウントします。
services:
web:
build:
context: ./.docker/web
args:
- NGINX_IMAGE_TAG=1.23.1
volumes:
- puma-socket:/myapp/tmp/sockets
# テンプレートをバインドマウント
- ./nginx/templates:/etc/nginx/templates
ports:
- ${WEB_PORT}:80
depends_on:
- api
volumes:
puma-socket:
コンテナ内の環境変数を設定
コンテナ内で環境変数が使用できるように設定します。
services:
web:
build:
context: ./nginx
args:
- NGINX_IMAGE_TAG=1.23.1
volumes:
- puma-socket:/myapp/tmp/sockets
# テンプレートをバインドマウント
- ./nginx/templates:/etc/nginx/templates
# environment 追記
environment:
- PROJECT_NAME=myapp
ports:
- 80:80
volumes:
puma-socket:
イメージを作成する
docker compose build
を実行してイメージを作成します。
docker compose build
確認
以下のコマンドを実行して正常に完了しているか確認する。
$ docker compose run web cat /etc/nginx/conf.d/sample.conf
upstream app {
server unix:///myapp/tmp/sockets/puma.sock;
}
server {
listen 80;
server_name localhost;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
proxy_set_header X-Real-IP ;
proxy_set_header X-Forwarded-For ;
proxy_set_header Host ;
proxy_pass http://app;
}
}
${PROJECT_NAME}
がmyapp
になっています。
/etc/nginx/templates/sample.conf.template
が読み込まれ、envsubst
の実行結果が/etc/nginx/conf.d/sample.conf
に出力されるため環境変数を使用することができます。
動作の変更
環境変数を使用して上記の動作を変更できます。
詳細は以下のページをご参照ください。
注意
上記の機能を使用するためにはコンテナ起動時のコマンドがnginx
かnginx-debug
である必要があります。
DockerfileのCMDを次のようにしていると/docker-entrypoint.sh
の中の条件分岐でfalse
となり上記の機能が使用できません。
CMD ["/usr/sbin/nginx", "-g", "daemon off;"]
上記の場合には次のようにする必要があります。
CMD ["nginx", "-g", "daemon off;"]