diff --git a/.github/workflows/CI-CD_Pipeline.yml b/.github/workflows/CI-CD_Pipeline.yml index 5c9e863a..abdd710b 100644 --- a/.github/workflows/CI-CD_Pipeline.yml +++ b/.github/workflows/CI-CD_Pipeline.yml @@ -250,8 +250,10 @@ jobs: echo "===== 기존 컨테이너 종료 & 제거 =====" docker stop app1 2>/dev/null || true docker rm app1 2>/dev/null || true - # EC2 내부에서 prod.env 파일 생성 - cat > /home/ec2-user/prod.env << 'EOF' + + # EC2 내부에서 prod.env 파일 생성 (기존 파일 있으면 덮어쓰기) + mkdir -p /home/ec2-user/configs + cat > /home/ec2-user/configs/prod.env << 'EOF' SPRING_PROFILES_ACTIVE=prod CUSTOM_JWT_SECRET_KEY=${{ secrets.JWT_SECRET_KEY }} @@ -261,7 +263,8 @@ jobs: PROD_DATASOURCE_DRIVER=com.mysql.cj.jdbc.Driver PROD_DATASOURCE_USERNAME=root PROD_DATASOURCE_PASSWORD=${{ secrets.DB_PASSWORD }} - PROD_JPA_HIBERNATE_DDL_AUTO=update + # 추후 validate 변경 + PROD_JPA_HIBERNATE_DDL_AUTO=update PROD_REDIS_HOST=redis_1 PROD_REDIS_PORT=6379 @@ -272,16 +275,20 @@ jobs: send_email_password=${{ secrets.EMAIL_PASSWORD }} EOF + # 파일 권한 최소화 + chmod 600 /home/ec2-user/configs/prod.env + # EC2에서 GHCR 로그인 echo "${{ secrets.GHCR_PAT }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin # 최신 이미지 pull & 컨테이너 실행 docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/${{ env.DOCKER_IMAGE_NAME }}:latest - docker stop app1 2>/dev/null || true - docker rm app1 2>/dev/null || true - docker run --env-file /home/ec2-user/prod.env \ + + echo "===== 새로운 컨테이너 실행 =====" + docker run --env-file /home/ec2-user/configs/prod.env \ -d --name app1 \ --network common \ + --restart unless-stopped \ -p 8080:8080 \ ${{ env.REGISTRY }}/${{ env.IMAGE_PREFIX }}/${{ env.DOCKER_IMAGE_NAME }}:latest echo "===== 새 컨테이너 로그 출력 =====" @@ -289,6 +296,5 @@ jobs: docker logs --tail=100 app1 || true echo "===== 배포 완료 =====" - # dangling image 정리 + .env 삭제 + # dangling image 정리 docker rmi $(docker images -f "dangling=true" -q) || true - rm -f /home/ec2-user/prod.env \ No newline at end of file