fix: 보안 설정 #16
This file contains hidden or 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
| # .github/workflows/ci-cd.yml | |
| # 사용자에게 Docker 그룹 권한 부여 (sudo 써야 되는거) | |
| # github secrets .yml파일에 cors부분 "*" 잘 감싸져있는지 확인 | |
| # prod.yml 파일에서 cors설정 삭제 ("*" 파싱문제) | |
| # 삭제 후에도 ec2에서 로그가 똑같이 떠서 컨테이너 삭제 후 다시 진행 | |
| # 매번 application-prod.yml 파일이 secrets.APPLICATION_PROD_YML 값으로 덮어쓰기 되는지 확인 | |
| # application-test.yml로 바꿔서 테스트 | |
| # .yml 파일 이름 바꾸며 테스트 | |
| # deploy 과정에 이미지 pull 코드 추가 | |
| # EC2 용량 수정 | |
| name: CI/CD Pipeline | |
| on: | |
| push: | |
| branches: | |
| - dev | |
| env: | |
| IMAGE_NAME: ${{ secrets.DOCKERHUB_USERNAME }}/driving-coach-be | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Java 17 | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: temurin | |
| java-version: '17' | |
| cache: gradle | |
| - name: Grant Gradle wrapper exec permission | |
| run: chmod +x ./gradlew | |
| - name: Create application-prod.yml | |
| # secrets.APPLICATION_PROD_YML 에 와일드카드를 실제 개행문자로 포함한 YAML 문자열을 넣어두세요. | |
| run: | | |
| echo "Creating application-prod.yml from secrets..." | |
| echo "${{ secrets.APPLICATION_PROD_YML }}" > src/main/resources/application-prod.yml | |
| - name: Build JAR | |
| run: ./gradlew clean bootJar -x test -Dspring.profiles.active=prod | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Log in to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| - name: Build & push Docker image | |
| uses: docker/build-push-action@v5 | |
| with: | |
| context: . | |
| file: ./Dockerfile | |
| push: true | |
| tags: | | |
| ${{ secrets.IMAGE_NAME }}:dev | |
| ${{ secrets.IMAGE_NAME }}:latest | |
| deploy: | |
| needs: build | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Deploy to EC2 via SSH | |
| uses: appleboy/ssh-action@v1.0.3 | |
| with: | |
| host: ${{ secrets.SERVER_HOST }} | |
| username: ${{ secrets.SERVER_USER }} | |
| key: ${{ secrets.SERVER_SSH_KEY }} | |
| port: ${{ secrets.SERVER_PORT }} | |
| script: | | |
| set -e | |
| IMAGE=${{ secrets.DOCKERHUB_USERNAME }}/driving-coach-be | |
| CONTAINER=driving-coach-be-dev | |
| PORT=8080 | |
| # 공간이 많이 부족한 환경이라면 사전 청소 (선택) | |
| docker system prune -af --volumes || true | |
| echo "Pulling ${IMAGE}:dev..." | |
| # EC2에서 docker를 sudo 없이 못 쓰면 앞에 sudo 붙이세요: | |
| docker pull ${IMAGE}:dev | |
| # 0) 8080 포트로 바인딩된 모든 컨테이너 제거 | |
| docker ps -q --filter "publish=8080" \ | |
| | xargs --no-run-if-empty docker rm -f | |
| # 1) my-spring-app-dev 컨테이너도 혹시 남아있다면 제거 | |
| docker rm -f driving-coach-be-dev || true | |
| # 2) 새 컨테이너 실행 | |
| docker run -d \ | |
| --name driving-coach-be-dev \ | |
| -p 8080:8080 \ | |
| -e SPRING_PROFILES_ACTIVE=prod \ | |
| -v /etc/localtime:/etc/localtime:ro \ | |
| ${{ secrets.IMAGE_NAME }}:dev | |
| # 3) dangling images 정리 | |
| docker image prune -f |