백엔드는 처음입니다만(3): 배포 자동화

Jaemin Kim·5일 전

불행 중 다행

나를 과거로 시간 여행 시켜버린 배포 시스템이었지만, 불행 중 다행인 건 네이버클라우드(NCP)를 사용하고 있었다는 점임.
기억을 더듬어 빠르게 CI/CD 파이프라인 구성을 시작함.

  1. SourceCommit에 기존 레포지토리를 복사

  2. SourceBuild에서 main 브랜치가 푸시될 때, Remote 태그가 붙어 있으면 도커 빌드 시작
    → 배포가 필요 없는 메인 브랜치 작업이나 실수로 인한 배포 대참사를 막기 위함

  3. SourceDeploy에서 빌드된 도커 이미지를 받아 실행되도록 명령어 작성

  4. SourcePipeline에서 1~3 작업을 연결해 파이프라인 구성

작업하면서 불편했던 건 SourceDeploy에서 배포 명령어를 작성할 때, 중간에 수정할 게 생기면 순서를 마음대로 못 바꾸고 처음부터 다시 작성해야 한다는 점.
그리고 “배포할 파일 위치”를 지정하라고 하는데, 도커 빌드 결과물 ZIP 파일을 Object Storage에 저장해야 함.
내가 뭔가 제대로 이해 못한 걸 수도 있지만… 어쨌든 ZIP 파일은 사용 안 하고 도커 이미지를 PULL 받아서 사용했음.
(네이버클라우드 상담사랑 얘기해봤지만, “그냥 지정해야 동작한다”는 말만 들음.)

UI도 좀 난해한 게,
어떤 건 프로젝트 설정 메뉴가 내부에 있고, 어떤 건 라디오 버튼 선택 후 또 따로 설정 페이지 들어가야 하고…
(고쳐줍쇼.)

내친김에 무중단 배포

서비스가 배포되면 기존 컨테이너를 내리거나 정지해야 하고, 그동안 새 이미지 받아서 실행시키면 서비스가 잠깐 멈춤.
이걸 어떻게 해결할지 고민했는데 쿠버네티스는 지금 당장은 너무 오버 스펙(+ 잘 모름)이라 도커 컴포즈로 타협 보기로 함.

도커 서비스 실행 명령어를 모아서 Compose 파일로 만들고 배포 테스트함. Rolling Update는 도커 스웜 환경에서 지원하기 때문에 Stack으로 배포함.
레플리카는 두 개만 만들고 컨테이너가 하나씩 순차적으로 교체되도록 설정.
쌩쌩 잘 돌아가는구만.

아차차

별문제 없이 배포 잘돼서 한숨 돌리고 있는데, 갑자기 대표한테 “서비스 안 된다”는 전화가 옴.
컨테이너 다 올라가 있는데? 핑도 가는데? 하다가 아차차… HTTPS 통신이 안 되고 있었다는 걸 발견함.

도커 컴포즈 적용하면서 Traefik을 도입했는데,
컨테이너 상태 변경될 때 동적으로 라우팅되게 하려고 사용했음.

근데 HTTPS 요청을 서비스가 직접 받은 게 아니라 Traefik의 80포트가 받는 구조라서, Traefik 쪽에 SSL 설정을 해줘야 했던 것.

서비스 단에서 SSL을 관리하고 있다면, Traefik에서는 HTTPS를 해독하지 않고 그대로 넘기는 Passthrough 모드로 설정해야 함.
이 경우 클라이언트와 TLS 핸드셰이크를 하는 주체는 Traefik이 아니라 서비스 컨테이너라서, 서비스 쪽에 SSL 인증서를 직접 연결해줘야 함.
그리고 Traefik의 80포트로 연결되는 서비스에는 SSL 인증서를 직접 연결해줘야 하고, Cert 파일을 pem으로 변환해서 설정해야 함.

하란 대로 설정 다 하고 삽질했는데 안 돼!!!
아… 컨테이너 재시작. 잘됨.

"traefik.tcp.routers.server-https.tls.passthrough=true" # HTTPS 요청을 서비스 단에서 처리하는 경우

"--providers.file.directory=/traefik-certs" # 80포트로 연결되는 서비스의 SSL cert 파일을 Traefik에 연결하는 command

## Traefik 컨테이너 내부의 /traefik-certs에 pem을 넣고 아래와 같이 yml 파일 작성
tls:
  certificates:
    - certFile: /traefik-certs/cert.pem
      keyFile: /traefik-certs/key.pem
  stores:
    default:
      defaultCertificate:
        certFile: /traefik-certs/cert.pem
        keyFile: /traefik-certs/key.pem

쫄아가지고 숙면함.

profile
저는 따개비 인간입니다

0개의 댓글