Merge pull request #11 from JongMany/feat/edit-memory #31
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Dockerizing to Amazon ECR # 워크플로우의 이름을 'Dockerizing to Amazon ECR'로 설정합니다. | |
on: | |
push: # 특정 브랜치에 코드가 푸시될 때 워크플로우가 트리거됩니다. | |
branches: ['main'] # 'main' 브랜치에 푸시될 때만 워크플로우 실행 | |
pull_request: # 풀 리퀘스트가 열리거나 업데이트될 때 트리거됩니다. | |
branches: ['main'] # 'main' 브랜치에 대한 풀 리퀘스트일 때만 실행 | |
env: # 공통 환경 변수를 설정합니다. | |
AWS_REGION: ap-northeast-2 # AWS 리전을 서울 리전으로 설정 | |
ECR_REPOSITORY: sj-graduate # ECR 저장소 이름을 'sj-graduate'로 설정 | |
ECR_REGISTRY: 214925768882.dkr.ecr.ap-northeast-2.amazonaws.com # ECR 레지스트리 URL을 설정 | |
jobs: # 실행할 작업을 정의합니다. | |
ci: # 'deploy'라는 작업을 정의합니다. | |
name: Deploy # 작업의 이름을 'Deploy'로 설정 | |
runs-on: ubuntu-latest # 최신 Ubuntu 버전에서 실행되도록 설정 | |
# environment: production # 이 작업이 'production' 환경에서 실행됨을 정의 | |
steps: # 이 작업에서 실행될 단계들을 정의합니다. | |
- name: Checkout # 소스 코드를 체크아웃하는 단계 | |
uses: actions/checkout@v3 # GitHub 제공 체크아웃 액션 사용 | |
- name: Config AWS credentials # AWS 자격 증명을 구성하는 단계 | |
uses: aws-actions/configure-aws-credentials@v2 # AWS 자격 증명 구성 액션 사용 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_IAM_ACCESS }} # GitHub Secrets에 저장된 AWS 액세스 키 ID 사용 | |
aws-secret-access-key: ${{ secrets.AWS_IAM_SECRET }} # GitHub Secrets에 저장된 AWS 시크릿 액세스 키 사용 | |
aws-region: ${{ env.AWS_REGION }} # 위에서 정의한 AWS 리전 사용 | |
- name: Login To Amazon ECR # Amazon ECR에 로그인하는 단계 | |
id: login-ecr # 이 단계의 ID를 'login-ecr'로 설정 (후속 단계에서 참조 가능) | |
uses: aws-actions/amazon-ecr-login@v1 # Amazon ECR 로그인 액션 사용 | |
- name: Build, tag, and push image to Amazon ECR | |
id: build-image | |
env: | |
ECR_REGISTRY: ${{ env.ECR_REGISTRY }} | |
IMAGE_TAG: ${{ github.sha }} | |
run: | | |
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG -f ./Dockerfile.prod ./ | |
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG | |
echo "IMAGE_TAG=$IMAGE_TAG" >> $GITHUB_ENV | |
- name: Save image tag to file | |
run: echo "${IMAGE_TAG}" > image-tag.txt | |
- name: Verify image tag file | |
run: cat image-tag.txt | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: image-tag | |
path: image-tag.txt | |
cd: | |
name: BE-Deploy Docker Image to Server | |
runs-on: [self-hosted, sj-graduate] | |
needs: ci | |
steps: | |
- name: Download artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: image-tag | |
- name: Read image tag | |
id: read-image-tag | |
run: | | |
IMAGE_TAG=$(cat image-tag.txt) | |
echo "IMAGE_TAG=$IMAGE_TAG" >> $GITHUB_ENV | |
- name: Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v2 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_IAM_ACCESS }} | |
aws-secret-access-key: ${{ secrets.AWS_IAM_SECRET }} | |
aws-region: ${{ env.AWS_REGION }} | |
- name: Login to Amazon ECR | |
id: login-ecr | |
uses: aws-actions/amazon-ecr-login@v1 | |
- name: Create .env file from secrets | |
run: | | |
echo JWT_SECRET_KEY=${{ secrets.JWT_SECRET_KEY }} >> .env | |
echo JWT_ACCESS_SECRET=${{ secrets.JWT_ACCESS_SECRET }} >> .env | |
echo JWT_REFRESH_SECRET=${{ secrets.JWT_REFRESH_SECRET }} >> .env | |
echo JWT_ACCESS_EXPIRE_TIME=15m >> .env | |
echo JWT_REFRESH_EXPIRE_TIME=7d >> .env | |
echo RT_JWT_EXPIRATION_TIME=604800 >> .env | |
# DATABASE | |
echo DB_PORT=5432 >> .env | |
echo DB_HOST=${{ secrets.DB_HOST }} >> .env | |
echo DB_USER=postgres >> .env | |
echo DB_PASSWORD=${{ secrets.DB_PASSWORD }} >> .env | |
echo DB_NAME=sjGraduate >> .env | |
# REDIS | |
echo REDIS_HOST=${{ secrets.REDIS_HOST }} >> .env | |
echo REDIS_PORT=6379 >> .env | |
echo REDIS_PASSWORD=${{ secrets.REDIS_PASSWORD }} >> .env | |
# GPT | |
echo FUNNY_MAN_ASSISTANT_ID=${{ secrets.FUNNY_MAN_ASSISTANT_ID }} >> .env | |
echo FEEDBACK_MAN_ASSISTANT_ID=${{ secrets.FEEDBACK_MAN_ASSISTANT_ID }} >> .env | |
echo KIND_MAN_ASSISTANT_ID=${{ secrets.KIND_MAN_ASSISTANT_ID }} >> .env | |
echo DEFAULT_MAN_ASSISTANT_ID=${{ secrets.DEFAULT_MAN_ASSISTANT_ID }} >> .env | |
echo ORGANIZATION_ID=${{ secrets.ORGANIZATION_ID }} >> .env | |
echo GPT_API_KEY=${{ secrets.GPT_API_KEY }} >> .env | |
# AWS | |
echo AWS_IAM_ACCESS=${{ secrets.AWS_IAM_ACCESS }} >> .env | |
echo AWS_IAM_SECRET=${{ secrets.AWS_IAM_SECRET }} >> .env | |
echo AWS_ECR_BE=${{ secrets.AWS_ECR_BE }} >> .env | |
- name: Set permissions for .env file | |
run: chmod 600 .env | |
- name: Verify .env file contents | |
run: cat .env | |
- name: Pull image from Amazon ECR and restart Docker Container | |
run: | | |
docker pull ${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }} | |
docker stop sj-graduate || true && docker rm sj-graduate || true | |
docker run -d --name sj-graduate -p 8080:8080 --restart unless-stopped \ | |
--env-file .env \ | |
${{ env.ECR_REGISTRY }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }} | |
# - name: 기존 EC2에 저장되어있는 이미지 삭제 | |
# uses: appleboy/ssh-action@master | |
# with: | |
# host: ${{ secrets.EC2_IP }} | |
# username: ${{ secrets.EC2_USERNAME }} | |
# key: ${{ secrets.EC2_SSH_KEY }} | |
# script: | | |
# sudo docker images -q | xargs -r docker rmi |