본문 바로가기
Storify

STORIFY (0212) - Docker CI/CD

by Peter.JH 2024. 2. 12.
728x90

도커 로컬 테스트는 완료했다. 

 

1. github 토큰 발급

2. workflow 작성

3. aws 연결, docker 설치
https://docs.aws.amazon.com/ko_kr/AmazonECS/latest/developerguide/create-container-image.html

 

Amazon ECS에서 사용할 컨테이너 이미지 생성 - Amazon Elastic Container Service

경우에 따라서는 ec2-user가 Docker 데몬에 액세스할 수 있는 권한을 제공하기 위해 인스턴스를 재부팅해야 할 수도 있습니다. 다음 오류가 표시될 경우 인스턴스를 재부팅합니다. Cannot connect to the D

docs.aws.amazon.com

 

4. aws github runner 설치

 

5. env 

GitHub Actions Secrets:

- GitHub 프로젝트 메인 페이지에서 'Settings'를 클릭합니다.

- 왼쪽 사이드바에서 'Secrets'를 클릭합니다.

- 'New repository secret' 버튼을 클릭하여 비밀 값을 추가합니다.

- GitHub Actions 워크플로우 파일에서 `secrets` 객체를 통해 비밀 값을 사용할 수 있습니다.

 

환경 변수:

- 서버나 컨테이너의 환경 설정에서 환경 변수를 설정합니다. 이는 OS나 서버 설정에 따라 다릅니다.

- 애플리케이션 코드에서 `process.env` 객체를 통해 환경 변수를 사용할 수 있습니다.

 

Secrets Management Service:

- AWS Secrets Manager, Google Cloud Secret Manager, HashiCorp Vault 등의 서비스를 사용합니다.

- 서비스에서 제공하는 인터페이스를 통해 비밀 값을 생성하고, 필요한 권한을 설정합니다.

- 애플리케이션 코드에서 서비스의 SDK나 API를 사용하여 비밀 값을 조회할 수 있습니다.

 

GitHub Actions Secrets 사용
1. 

- name: Docker run
  run: |
    docker stop ${{ env.NAME }} && docker rm ${{ env.NAME }} && docker rmi ${{ env.DOCKER_IMAGE }}:latest
    docker run -d -p 80:3000 --name storify-be --restart always \
    -e DB_URL=${{ secrets.DB_URL }} \
    -e JWT_ACCESS_SECRET=${{ secrets.JWT_ACCESS_SECRET }} \
    -e JWT_REFRESH_SECRET=${{ secrets.JWT_REFRESH_SECRET }} \
    -e JWT_RESET_SECRET=${{ secrets.JWT_RESET_SECRET }} \
    -e OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }} \
    -e HUGGINFACE_API_KEY=${{ secrets.HUGGINFACE_API_KEY }} \
    -e AWS_ACCESS_KEY=${{ secrets.AWS_ACCESS_KEY }} \
    -e AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_ACCESS_KEY }} \
    -e AWS_S3_BUCKET_NAME=${{ secrets.AWS_S3_BUCKET_NAME }} \
    -e AWS_REGION=${{ secrets.AWS_REGION }} \
    -e MAIL_USER=${{ secrets.MAIL_USER }} \
    -e MAIL_PASS=${{ secrets.MAIL_PASS }} \
    -e TELEGRAM_BOT_TOKEN=${{ secrets.TELEGRAM_BOT_TOKEN }} \
    -e TELEGRAM_CHAT_ID=${{ secrets.TELEGRAM_CHAT_ID }} \
    -e TELEGRAM_CHANNEL_ID=${{ secrets.TELEGRAM_CHANNEL_ID }} \
    -e KAKAO_REST_API_KEY=${{ secrets.KAKAO_REST_API_KEY }} \
    -e KAKAO_REDIRECT_URI=${{ secrets.KAKAO_REDIRECT_URI }} \
    -e GOOGLE_CLIENT_ID=${{ secrets.GOOGLE_CLIENT_ID }} \
    -e GOOGLE_CLIENT_SECRET=${{ secrets.GOOGLE_CLIENT_SECRET }} \
    -e GOOGLE_REDIRECT_URI=${{ secrets.GOOGLE_REDIRECT_URI }} \
    -e ADMIN=${{ secrets.ADMIN }} \
    -e PASSWORD=${{ secrets.PASSWORD }} \
    ${{ env.DOCKER_IMAGE }}:latest

 

장점: 개별관리하기 좋음

단점: 코드가 길어짐

 

json

장점: 한번에 넣어 코드가 깔끔하진다.

단점: 환경변수 중 일부 수정 불가

728x90