오티스의개발일기

무중단 배포 (6) [ docker 를 이용한 nginx 설정 편 ] spring boot + mysql + docker + github actions 본문

개발/spring boot

무중단 배포 (6) [ docker 를 이용한 nginx 설정 편 ] spring boot + mysql + docker + github actions

안되면 될때까지.. 2025. 1. 20. 10:03
728x90

이번시간은 vim을 사용하여 nginx의 설정파일과

무중단 배포를 위한 yml 파일을 생성해보겠습니다.

 

목차

1. 프로젝트 생성 

2. SQL 설정

3. git 생성

4. aws EC2 생성

5. aws ssh 설정 및 필수 라이브러리 설치

6. docker 를 이용한 nginx 설정 😀

7. docker 를 이용한 mysql 설정

8. spring boot HealthcheckController 작업 및 yml + Dockerfile 작업

9. Github Actions 설정

10. 최종 배포

 

전체 코드는  여기에 올라와있습니다.

https://github.com/1domybest/Spring_none_stop_deploy

 

GitHub - 1domybest/Spring_none_stop_deploy

Contribute to 1domybest/Spring_none_stop_deploy development by creating an account on GitHub.

github.com

 

 

6. 무중단 배포를 위한 nginx 설정

이번시간은 vim을 사용하여 nginx의 설정파일과

무중단 배포를 위한 yml 파일을 생성해보겠습니다.

ec2 SSH 에 접속한후에

docker의 명령어인

docker ps

를 사용하여 nginx가 실행중인지 확인합니다.

 

 

 

 

이제 아래 커맨드를 사용하여 nginx내부로 들어가 설정을 진행하겠습니다

docker exec -it nginxserver /bin/bash

이 명령어는 docker안에있는 nginx에 진입할수있도록 해주는 명령어입니다.

이제

cd etc/nginx/conf.d

위 명령어를 사용해서 설정파일 폴더로 진입합니다.

ls

위 명령어를 사용해서 보면

root@4bf312c43c06:/etc/nginx/conf.d# ls
default.conf

defualt.conf가 있는데

이제 이걸 편집해서 작업해야합니다.

편집작업을 하려면 vim이라는 툴을 설치해야합니다

apt-get update

apt-get upgrade

apt-get install vim

위 커맨드를 순서대로 사용하여 vim을 다운받습니다

이제

vim default.conf

위 코드를 사용하여 텍스트 에디러를 실행시킵니다.

그리고 안에있는 내용들을 아래 코드로 만들어주세요

참고로 a 를 누르시면 insert모드가되고

저장후 나가기는 esc → :wq! → 엔터

를 하면 수정된 파일이 저장됩니다.

# added ===============
upstream blue {
        server 프라이빗IPv4주소:8080;
}

upstream green {
        server 프라이빗IPv4주소:8081;
}
#=======================

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    access_log  /var/log/nginx/host.access.log  main;
    error_log   /var/log/nginx/error.log debug;

    # added =========
    include /etc/nginx/conf.d/service-env.inc;
    #===============

    location / {
        # added ======
        proxy_pass http://$service_url;
        proxy_set_header X-Real-ID $remote_addr;
        proxy_set_header X-Forwarded_for $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        # ===========
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    location /healthcheck/green {
        proxy_pass <http://프라이빗IPv4주소:8081/env>;
        proxy_set_header X-Real-ID $remote_addr;
        proxy_set_header X-Forwarded_for $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;

    }

    location /healthcheck/blue  {
        proxy_pass <http://프라이빗IPv4주소:8080/env>;
        proxy_set_header X-Real-ID $remote_addr;
        proxy_set_header X-Forwarded_for $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
    }
    
    location /env {
        proxy_pass http://$service_url/env;
        proxy_set_header X-Real-ID $remote_addr;
        proxy_set_header X-Forwarded_for $proxy_add_x_forwarded_for;
        proxy_set_header Hos $http_host;
    }
  
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

위에있는 프라이빗IPv4주소 는

인스턴스의 오른쪽 상단에있는 프라이빗IPv4주소 를 가져와서 적으시면됩니다.

 

 

 

 

이제 저장하고 나가주시면 됩니다.

 

 

 

 

 

이제 무중단 배포를 위한 변수파일을 한개 만들어줄겁니다

위치는 이전과 동일한 상태이고

nginx 내부의 etc/nginx/conf.d 위치입니다.

vim service-env.inc

위커맨드를 사용해서 에디터를 열어주세요

set $service_url blue;

그안에 위 코드를 작성한후 저장후 나와주세요

이제 설정이 완료되었으니

nginx를 다시 reload 시켜야합니다.

nginx -s reload

위 코드를 사용하여 nginx를 재시동 시켜줍니다.

그리고

exit 

를 사용하여 밖으로 나와숩니다.

cd /home/ubuntu

나온후에 위 코드를 사용하여 우분투 폴더로 이동합니다.

이제 여기에서 2개의 파일을 만들어줄건데

docker-compose-blue.yml 와 docker-compose-green.yml

를 만들어줄겁니다

같은 방식으로 vim을 통해 파일을 작성해줍니다.

docker-compose-blue.yml

version: '3.8'

services:
  blue:
    image: otisaws/spring_none_stop_deploy_docker:latest
    container_name: blue
    ports:
      - "8080:8080"
    environment:
      PROFILES: blue
      ENV: blue

docker-compose-green.yml

version: '3.8'

services:
  green:
    image: otisaws/spring_none_stop_deploy_docker:latest
    container_name: green
    ports:
      - "8081:8081"
    environment:
      PROFILES: green
      ENV: green

 

 

여기까지 작성되었고 다음시간은

docker 를 이용한 mysql 설정 하는 작업을 진행해보겠습니다.

 

다음글

 docker 를 이용한 mysql 설정

 

spring boot + mysql + docker + github actions 무중단 배포 (7) [ docker 를 이용한 mysql 설정 편 ]

이번시간에는 EC2안에 Mysql을 설치하고 테스트를 진행해보겠습니다. 목차1. 프로젝트 생성 2. SQL 설정3. git 생성4. aws EC2 생성5. aws ssh 설정 및 필수 라이브러리 설치6. docker 를 이용한 nginx 설정7. do

otis.tistory.com

 

 

728x90
Comments