Github Actions, Docker 사용시 Vite 환경변수 주입받기

migration 이후 고장난 카카오 로그인 살리자

환경변수 주입 방법에 대해 설명하기 이전에, 먼저 현재 프로젝트 구조랑 배포 Flow에 대해서 간단하게 설명드리겠습니다.

// yarn berry workspace 모노레포 환경

📦root
 📂 .github
 📂 workflows
 release-client-app.yml
 📂 package
 📂 client // Vite + React
 📂 server // Node.js + Express.js
 ...

 Dockerfile.client
 ... 기타 프로젝트 config

위와 같은 구조로 구성되어 있는 main 브랜치에 Pull Request Merge가 되면, 변경사항이 있는 프로젝트(client 프로젝트가 변경되면 client 프로젝트 배포 시작)가 크게 보면 아래의 순서로 배포가 됩니다.

release-client-app.yml workflow trigger
-> docker build
-> vite build
-> docker run
-> docker push to Docker Hub
-> ssh into EC2
-> docker pull
-> docker run

모노레포 환경을 구축하고 나서 더욱 복잡해진 배포 flow에 적용한 환경변수 주입 방식을 정리해보겠습니다.

Github Secrets 이용 방식

Github Actions에서 제공하는 Secrets를 이용해서 환경변수를 주입받는 방법입니다.

// Github Actions 등록
VITE_KAKAO_API_KEY=YOUR_KAKAO_API_KEY
... 기타 생략 ...

우선 Vite에 주입해줄 환경변수를 Github Secrets에 등록합니다. VITE 환경변수 형식은 VITE_로 시작해서 동일한게 등록하겠습니다.

// 많은 부분이 생략 됐습니다.
name: Release Client App Docker

// 변경 감지
on:
  pull_request:
    paths:
      - 'packages/client/**'
    types:
      - closed

jobs:
  build_and_deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      // Docker Hub 로그인
      - name: Login to Docker Hub
        uses: docker/login-action@v2

      // Docker 이미지 빌드 및 push
      - name: Build and push Docker image
        uses: docker/build-push-action@v2
        with:
          context: .
          file: ./Dockerfile.client
          build-args: |
            VITE_KAKAO_API_KEY=${{ secrets.VITE_KAKAO_API_KEY }}

      - name: SSH into EC2 and run Docker container

      ... 생략 ...

저의 경우 Docker 이미지 빌드 및 Push시 docker/build-push-action@v2를 사용했는데, 이 Action은 빌드변수인 build-args를 통해서 docker build시 실행되는 Dockerfile.client에 환경변수를 주입할 수 있습니다.

환경변수를 주입받은 Dockerfile에서는 아래와 같이 사용할 수 있습니다.

FROM node:lts-alpine AS builder

# Set working directory
WORKDIR /app

... 생략 ...

// 환경변수 주입
ARG VITE_KAKAO_API_KEY
ARG VITE_KAKAO_REDIRECT_URI
ARG VITE_ADDRESS_API_KEY

// 환경변수 사용
ENV VITE_KAKAO_API_KEY=$VITE_KAKAO_API_KEY
ENV VITE_KAKAO_REDIRECT_URI=$VITE_KAKAO_REDIRECT_URI
ENV VITE_ADDRESS_API_KEY=$VITE_ADDRESS_API_KEY

RUN yarn install --immutable \
    && yarn client:build

... 생략 ...

이렇게 동적으로 주입받은 환경변수는, VITE 프로젝트 내에서 import.meta.env.VITE_로 사용할 수 있게 됩니다.

한 가지 주의할 점은, 위에서 설명드린 과정을 적용할 때 각 프로젝트 환경에 맞게 환경변수 주입을 언제 해줄지 고민해봐야 합니다. 변수가 동적으로 주입되기 때문에, 잘못된 시점에 환경변수 로직이 실행되면 의도와 다르게 주입이 되지 않을 수 있습니다.

마치며

ec2 docker image에 주입한 환경변수가 잘 주입되었는지 확인해보고 싶었습니다. 그래서 여러가지 ec2 cli 명령어로 확인해봤지만, 확인이 되지 않아 혹시 확인 방법을 아시는 분이 계시다면 댓글로 알려주시면 감사하겠습니다.(추후에 방법을 알아내면 다시 업데이트 하겠습니다.)

// ec2 cli
docker inspect [image id]

// 출력되는 image 정보 Config.Env에 환경변수가 출력될 알았는데, 출력되지 않았습니다.

참고


0개의 댓글

로그인하고 댓글을 작성하세요.

로딩 중...