Skip to content

[BE] CD self hosted runner 형태로 변경 #465

@asn6878

Description

@asn6878

이슈 요약

  • 서버 리소스 절약
    기존 CD 워크플로우는 SSH 접속을 활용한 형태로, 프로젝트 빌드 및 이미지 생성과정이 프로덕션 환경에서 수행중입니다. 빌드 스테이지를 github actions runner에서 수행하여 서버는 레지스트리에서 이미지만 받아와 실행할 수 있도록 변경합니다.

  • 헬스체크 추가
    또한, 서버가 모종의 이유로 실행단계(DB와 같은 외부 요인으로 인해)에서 실패할 경우 CD 워크플로우에서 알려주지 않습니다.

  • PROD환경 env 관리 방법 개선
    기존 방식은 빌드 시점에 도커 이미지에 환경변수를 복사 합니다. 기존에도 저희는 이미지를 외부에 공개하지는 않았지만, 이미지에 secret을 포함시켜 빌드하는 행위는 하지 않는것이 좋다고 합니다.

    이를 개선하기 위해 PROD의 경우 환경변수를 docker compose의 env_file 옵션으로 전달하여 런타임에 전달하도록 변경합니다. (이 방법은 환경변수 변경시 이미지를 재빌드 할 필요가 없습니다.)

  • 프로덕션 서버 구조 변경

/var/
├── prod_config/                     # 환경변수 파일
│   ├── server/
│   │   └── .env.prod
│   └── feed-crawler/
│       └── .env.prod
├── prod_data/                       # 애플리케이션 데이터
│   ├── server/
│   │   └── logs/
│   │       ├── YYYY-MM-DD.log
│   │       └── error/
│   │           └── YYYY-MM-DD.error.log
│   ├── feed-crawler/
│   │   └── logs/
│   │       ├── YYYY-MM-DD.feed-crawler.log
│   │       └── error/
│   │           └── YYYY-MM-DD.feed-crawler.error.log
│   ├── objects/                     # 업로드된 파일 (통합)
│   │   ├── PROFILE_IMAGE/
│   │   └── ...
│   └── static/                      # 정적 파일
└── dist/                            # FE 빌드 결과물
  • 도커 볼륨 경로 개선
    기존의 경우, 컨테이너 내부에도 /var/web05-Denamu 경로를 사용해 불필요한 뎁스가 발생하고, host OS와 container OS의 경로 구분이 어려웠습니다. 이를 위해 컨테이너 내부 데이터의 경우 WORKDIR 을 /app으로 통일합니다.

하위 태스크

  • 서버 인스턴스 runner 등록하기
  • CD 파이프라인 변경하기
    • actions runner를 활용한 빌드 스테이지 (애플리케이션 빌드 -> ghcr push)
    • hosted runner환경에서의 image pull 및 컨테이너 교체 수행
  • 헬스체크 추가 (서버가 n초 이후 정상적으로 실행중인지)

인수조건

  • CD 파이프라인이 기존과 동일한 형태로 안전하게 동작해야 함.
  • 헬스체크 옵션이 추가되어야 함.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions