2

リバース プロキシとして NGINX を使用しています。

3 つの環境(開発、QA、本番) があります。

開発用の IP アドレスは 1.2.3.4、qa は 4.3.2.1、本番用は 3.4.1.2 とします。

以下のように nginx.conf ファイルを構成しましたが、開発環境の場合は完全に正常に動作します。

これらの docker-image をビルドする際に、以下のようにイメージをビルドする必要がある構成について明示的に言及しました。

cd conf/clustered-develop/;sudo docker build -t jcibts-swmdtr-dev.jci.com/nginx:1 --build-arg PORT=8765 --build-arg ENVIRONMENT=clustered-develop .

要件は、docker-image が 1 のみをビルドする必要があり、Docker Trusted リポジトリにプッシュされることです。

イメージを再度ビルドすることなく、他の環境の Docker 信頼済みリポジトリに昇格されます。

私の質問は、これらの単一のconfをすべての環境で機能させるために何ができるかです。

localhost に置き換えられた ip または 127.0.0.1 に置き換えられた ip のように (両方を試しましたが、機能しませんでした)

worker_processes 4;

events { worker_connections 1024; }
http {

    sendfile on;

    upstream consumer-portal {

        server 1.2.3.4:9006;

    }

    upstream licenseportal {

        server 1.2.3.4:9006;

    }

server {
        listen 8765;

        location /consumer-portal/ {
            proxy_pass         http://consumer-portal/;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
        }

        location /licenseportal/ {
            proxy_pass         http://licenseportal/;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
        }
 }


}
4

1 に答える 1

7

この優れた答えに従って:

  1. dev、qa、prod の間で変更されると予想されるすべての値の変数名を含むテンプレート構成 (例: ) を使用して、イメージを一度ビルドできます。/etc/nginx/conf.d/nginx.template例えば:

    upstream licenseportal {
      server ${NGINX_HOST}:${NGINX_PORT};
    }
    
  2. 次に、すべての環境に対して同じイメージを実行します。イメージを実行するときに使用して、テンプレート内の変数を環境に固有の値に置き換えてenvsubst新しいイメージを作成します。nginx.conf

    # For Develop
    docker run -d \
      -e NGINX_HOST='1.2.3.4' \
      -e NGINX_PORT='9006' \
      -p 9006:9006 \
      jcibts-swmdtr-dev.jci.com/nginx:1 \
      /bin/bash -c "envsubst < /etc/nginx/conf.d/nginx.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
    
    # For Production
    docker run -d \
      -e NGINX_HOST='4.3.2.1' \
      -e NGINX_PORT='9006' \
      -p 9006:9006 \
      jcibts-swmdtr-dev.jci.com/nginx:1 \
      /bin/bash -c "envsubst < /etc/nginx/conf.d/nginx.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
    

: これを機能envsubstさせるには、イメージの一部としてインストールする必要があります。すなわちRUN apt-get -y update && apt-get -y install gettext

于 2018-08-20T12:59:18.960 に答える