Skip to content

fix: 보안 설정

fix: 보안 설정 #16

Workflow file for this run

# .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