4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Docker】Nginxの設定ファイルで環境変数を使用する方法

Last updated at Posted at 2022-09-04

環境変数を使用する方法

Nginxの公式イメージではNginxの設定ファイルで環境変数を使用できます。
使用する方法は以下のとおりです。

設定ファイルのテンプレートを作成

ホスト側にNginxの設定ファイルのテンプレートを作成します。
環境変数を使用したい箇所に${ENVIROMENT}のように記述します。

./nginx/templates/sample.conf.template
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にバインドマウントします。

compose.yml
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:

コンテナ内の環境変数を設定

コンテナ内で環境変数が使用できるように設定します。

compose.yml
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に出力されるため環境変数を使用することができます。

動作の変更

環境変数を使用して上記の動作を変更できます。
詳細は以下のページをご参照ください。

注意

上記の機能を使用するためにはコンテナ起動時のコマンドがnginxnginx-debugである必要があります。

DockerfileのCMDを次のようにしていると/docker-entrypoint.shの中の条件分岐でfalseとなり上記の機能が使用できません。

Dockerfile

CMD ["/usr/sbin/nginx", "-g", "daemon off;"]

上記の場合には次のようにする必要があります。

Dockerfile

CMD ["nginx", "-g", "daemon off;"]

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?