개발 공부/Docker

docker-compose.yml 환경변수 설정

게으른 제이 2023. 3. 15. 03:00

환경변수 설정법

.env 파일에 환경변수를 작성하면 별다른 설정 없이도 간단히 docker-compose.yml 에서 접근 할 수 있다.

 

docker-compose.yml

shop-api-db:
    image: postgres
    restart: always
    container_name: shop-api-db
    environment:
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DB=${POSTGRES_DB}
    ports:
      - ${POSTGRES_PORT}:${POSTGRES_PORT}
    networks:
      - shop-api-networks

 

NGINX 환경변수 바인딩

아래 예시처럼 environment 옵션에 환경변수의 이름과 값을 직접 바인딩

 

docker-compose.yml

shop-nginx:
    image: nginx:stable-alpine
    container_name: shop-nginx
    volumes:
      - ./nginx/templates:/etc/nginx/templates
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./cert/cert.pem:/etc/nginx/cert/cert.pem
      - ./cert/key.pem:/etc/nginx/cert/key.pem
    environment:
      - NGINX_PORT=${NGINX_PORT}
      - SERVER_PORT=${SERVER_PORT}
      - API_NAME=${API_NAME}
    ports:
      - ${NGINX_PORT}:${NGINX_PORT}
    depends_on:
      - shop-api
    networks:
      - shop-api-networks

 

그럼 nginx 디렉토리에서 환경변수를 전달받아 아래 예시처럼 사용 가능하다.

 

default.conf.template

server {
    listen ${NGINX_PORT} ssl;
    listen [::]:${NGINX_PORT} ssl;
    ssl_certificate     cert/cert.pem;
    ssl_certificate_key cert/key.pem;

    server_name ${API_NAME};

    charset utf-8;
    client_max_body_size 50M;

    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_set_header X-Forwarded-Proto $scheme;

        # proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://shop-api:${SERVER_PORT};
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_next_upstream error timeout http_502 http_503 http_504;
    }
}