본문 바로가기

DEV/CICD

무중단 배포(Blue-Green Deployment) - Nginx설치

반응형

1. Nginx 역활

 

- Nginx는 웹서버입니다. 기본 웹서버 기능 이외에 proxy, reverse proxy 기능을 제공합니다.

  proxy 기능을 활용하여 블루, 그린 내부 시스템과 연결 역활을 합니다.

 

- 웹 배포 포트 

  8084

- 블루 서비스 포트

  8091

- 그린 서비스 포트

  8092

  

2. 파일 구조

파일명 설명
Dockerfile_nginx nginx 구동을 위한 Dockerfile
docker-compose.nginx.yml nginx docker-compose 설정 파일
nginx.conf nginx 설정파일(Listen port, 블루/그린 서비스 주소 설정)
run_nginx.sh nginx 구동 스크립트
   
   

 

3. 설정

 

1) nginx.conf

 

-----------------------------------------------------------------------------------------------------------------

user  nginx;
worker_processes  1;

 

error_log  /var/log/nginx/error.log warn;

pid        /var/run/nginx.pid;

 

events {
    worker_connections  1024;
}

 

http {

    upstream springproject{
        least_conn;
        server 127.0.0.1:8091 weight=10 max_fails=3 fail_timeout=10s;
        server 127.0.0.1:8092 weight=10 max_fails=3 fail_timeout=10s;
    }

    server {
        listen       8084 default_server;
        listen       [::]:8084 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
                proxy_pass http://springproject;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
        }
    }
}

-----------------------------------------------------------------------------------------------------------------

 

nginx.conf 파일을 위와 같이 작성하고

파란색으로 작성된 부분은 블루 서비스의 주소를 적어줍니다. 녹색으로 된 부분은 그린 서비스의 주소를 적어 줍니다. 

붉은 색은 Nginx의 Listen Port로 웹서비스를 할 포트를 적어 줍니다.

 

 

2) docker-compose.nginx.yml

 

-----------------------------------------------------------------------------------------------------------------

version: '3'

services:
  nginx:
    build:
        context: .
        dockerfile: Dockerfile_nginx
    image: web_project/nginx:0.1
    ports:
      - 8084:8084
    container_name: nginx_web_project
    network_mode: "host"

-----------------------------------------------------------------------------------------------------------------

 

docker-compose.nginx.yml 파일을 위와 같이 작성하고

파란색으로 작성된 부분은 nginx.conf 파일에서 작성한 서버의 listen port와 일치하게 적습니다.

이미지명과 컨테이너명을 맞게 작성하고 저장합니다.

 

 

3) Dockerfile_nginx

 

-----------------------------------------------------------------------------------------------------------------
FROM nginx
COPY nginx /etc/nginx/nginx
VOLUME /var/log/nginx/log
EXPOSE 8084
CMD ["nginx", "-g", "daemon off;"]

-----------------------------------------------------------------------------------------------------------------

 

Dockerfile_nginx 파일을 위와 같이 작성하고

파란색으로 작성된 부분은 nginx.conf 파일에서 작성한 서버의 listen port와 일치하게 적습니다.

 

 

4) run_nginx.sh

 

-----------------------------------------------------------------------------------------------------------------

docker-compose -p nginx -f docker-compose.nginx.yml down
docker-compose -p nginx -f docker-compose.nginx.yml up -d

-----------------------------------------------------------------------------------------------------------------

 

docker-compose를 이용하여 nginx를 구동합니다.

파란색으로 작성된 부분은 프로젝트명으로 복수개의 프로젝트를 운영할 경우 각각 이름을 다르게 해서 관리해야 됩니다.

 

 

4. 실행 확인

1) 도커 확인

nginx docker 확인

docker ps를 입력합니다.

NAMES에 nginx명이 보이는지 확인합니다.

 

2) 포트 확인

nginx 리스너가 정상적으로 작동하는지 확인합니다.

 

netstat -anp | grep 8084

 

nginx 구동 확인

위와 같이 나오면 정상적으로 실행이 되어 대기중인 상태입니다.

반응형
댓글