[Springboot] docker-compose를 이용해 springboot, nginx 연동하기

일단 해볼게·2023년 11월 14일
0

Springboot

목록 보기
10/26

이전에 해야할 작업

profiles = local 에 맞는 application.yml 값을 미리 설정해야한다.


springboot Dockerfile 생성

FROM openjdk:17
ARG JAR_FILE=build/libs/*.jar
ARG SPRING_PROFILE=local
COPY ${JAR_FILE} anifriends.jar
ENV spring_profile=${SPRING_PROFILE}
ENTRYPOINT java -jar anifriends.jar \
            --spring.profiles.active=${spring_profile}

profiles에 따라 설정파일이 바뀌게 설정했다.


nginx Dockerfile 생성

/nginx 경로에 생성한다. 이 경로와 docker-compose의 nginx volume 경로를 맞춰줘야한다.

FROM nginx:latest
# 가상 공간의 nginx 기본 설정파일 삭제 후 작성한 설정파일로 대체
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d

nginx.conf 생성

nginx 설정 파일을 생성한다.

/nginx 경로에 생성한다. 이 경로와 docker-compose의 nginx volume 경로를 맞춰줘야한다.

# 이벤트 블록을 설정합니다.
events {}

# NGINX의 HTTP 블록을 엽니다. HTTP 블록은 웹 서버의 모든 HTTP 기능을 정의합니다.
http {
    # 서버 블록을 정의합니다. 이 서버 블록은 클라이언트의 요청을 받아들이고 처리합니다.
    server {
        # 포트 80에서 들어오는 HTTP 요청을 수신할 것임을 나타냅니다.
        listen 80;

        # 'localhost' 도메인으로 들어오는 요청을 처리할 것임을 나타냅니다.
        server_name localhost;

        # 모든 경로('/')에 대한 요청을 받아들이는 location 블록입니다.
        location / {
            # NGINX가 받은 모든 요청을 'http://backend:8080'으로 프록시하여 처리하도록 지시합니다.
            proxy_pass http://backend:8080;

            # 프록시된 요청에 'Host' 헤더를 추가하여 백엔드 서버에 전달합니다.
            proxy_set_header Host $host;

            # 프록시된 요청에 클라이언트의 실제 IP 주소를 'X-Real-IP' 헤더에 추가하여 백엔드 서버에 전달합니다.
            proxy_set_header X-Real-IP $remote_addr;

            # 프록시된 요청에 클라이언트의 원래 IP 주소를 'X-Forwarded-For' 헤더에 추가하여 백엔드 서버에 전달합니다.
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            # 프록시된 요청에 클라이언트가 사용하는 프로토콜(HTTP 또는 HTTPS)를 'X-Forwarded-Proto' 헤더에 추가하여 백엔드 서버에 전달합니다.
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

docker-compose.yml 파일 생성

version: '3'

services:
  backend:
    container_name: backend
    build: . # springboot Dockerfile 경로
    ports:
      - "8080:8080"
    networks: 
      - anifriends

  nginx:
    image: nginx:latest
    volumes:
      - ./nginx/:/etc/nginx/ # 왼쪽이 로컬 경로, 오른쪽이 도커 컨테이너 내부 경로
    ports:
      - 80:80
    depends_on: # 빌드 시작 순서를 정해주는 옵션
      - backend
    networks:
      - anifriends

networks: # 컨테이너를 연결할 네트워크
  anifriends:

docker-compose 실행

docker-compose.yml 경로에서 명령어를 실행한다.

docker compose up --build

실행 후 localhost:80/api~ 경로에 접속하면 원하는 API를 실행할 수 있다.

profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글