diff --git a/.github/workflows/cd_dev.yml b/.github/workflows/cd_dev.yml new file mode 100644 index 00000000..8d6b2b1b --- /dev/null +++ b/.github/workflows/cd_dev.yml @@ -0,0 +1,72 @@ +name: Dev Server Deploy + +on: + push: + branches: ["dev"] + +permissions: + contents: read + +jobs: + build-and-push-image: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: 자바 버전 설정 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + + - name: main 경로 application.yml 파일 생성 + run: | + mkdir -p ./src/main/resources + echo "${{ secrets.APPLICATION_YML_DEV }}" | base64 -d > ./src/main/resources/application.yml + + - name: gradle 권한 부여 + run: chmod +x ./gradlew + shell: bash + + - name: 빌드 시 캐시 적용 + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: 빌드 + run: ./gradlew build -x test + + - name: 도커 허브 로그인 + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME_DEV }} + password: ${{ secrets.DOCKERHUB_TOKEN_DEV }} + + - name: 도커 이미지 빌드 및 푸시 + run: | + docker build -f Dockerfile -t ${{ secrets.DOCKERHUB_USERNAME_DEV }}/${{ secrets.DOCKERHUB_APP_NAME }} . + docker push ${{ secrets.DOCKERHUB_USERNAME_DEV }}/${{ secrets.DOCKERHUB_APP_NAME }} + + deploy: + needs: build-and-push-image + runs-on: ubuntu-latest + steps: + - name: 이미지 pull 받아서 백그라운드 실행 + uses: appleboy/ssh-action@master + with: + host: ${{ secrets.EC2_HOST_DEV }} + username: ${{ secrets.EC2_USERNAME }} + key: ${{ secrets.EC2_KEY_DEV }} + port: ${{ secrets.EC2_PORT }} + script: | + cd compose + docker rm -f $(docker ps -qa) + docker pull ${{ secrets.DOCKERHUB_USERNAME_DEV }}/${{ secrets.DOCKERHUB_APP_NAME }} + docker-compose up -d + docker system prune -f \ No newline at end of file diff --git a/.github/workflows/cd.yml b/.github/workflows/cd_prod.yml similarity index 53% rename from .github/workflows/cd.yml rename to .github/workflows/cd_prod.yml index 06f171d2..62e0dc97 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd_prod.yml @@ -1,8 +1,8 @@ -name: CD Backend +name: Prod Server Deploy on: push: - branches: [ "main", "dev" ] + branches: ["prod"] permissions: contents: read @@ -14,26 +14,22 @@ jobs: - name: Checkout code uses: actions/checkout@v3 - # 자바 버전 설정 - - name: Set up JDK 17 + - name: 자바 버전 설정 uses: actions/setup-java@v3 with: java-version: '17' distribution: 'temurin' - # main 경로 application.yml 파일 생성 - - name: Generate application.yml + - name: main 경로 application.yml 파일 생성 run: | mkdir -p ./src/main/resources - echo "${{ secrets.MAIN_APPLICATION_YML }}" | base64 -d > ./src/main/resources/application.yml + echo "${{ secrets.APPLICATION_YML_PROD }}" | base64 -d > ./src/main/resources/application.yml - # gradle 권한 부여 - - name: Grant execute permission for gradlew + - name: gradle 권한 부여 run: chmod +x ./gradlew shell: bash - # 빌드 시 캐시 적용 - - name: Gradle Caching + - name: 빌드 시 캐시 적용 uses: actions/cache@v3 with: path: | @@ -43,38 +39,34 @@ jobs: restore-keys: | ${{ runner.os }}-gradle- - # 빌드 - - name: Build with Gradle + - name: 빌드 run: ./gradlew build -x test - # 도커 허브 로그인 - - name: Docker Hub Login + - name: 도커 허브 로그인 uses: docker/login-action@v2 with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} + username: ${{ secrets.DOCKERHUB_USERNAME_PROD }} + password: ${{ secrets.DOCKERHUB_TOKEN_PROD }} - # 도커 이미지 빌드 및 푸시 - - name: docker image build and push + - name: 도커 이미지 빌드 및 푸시 run: | - docker build -f Dockerfile -t ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_APP_NAME }} . - docker push ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_APP_NAME }} + docker build -f Dockerfile -t ${{ secrets.DOCKERHUB_USERNAME_PROD }}/${{ secrets.DOCKERHUB_APP_NAME }} . + docker push ${{ secrets.DOCKERHUB_USERNAME_PROD }}/${{ secrets.DOCKERHUB_APP_NAME }} deploy: needs: build-and-push-image runs-on: ubuntu-latest steps: - # 서버 백그라운드 실행 - - name: pull image and run container + - name: 이미지 pull 받아서 백그라운드 실행 uses: appleboy/ssh-action@master with: - host: ${{ secrets.EC2_HOST }} + host: ${{ secrets.EC2_HOST_PROD }} username: ${{ secrets.EC2_USERNAME }} - key: ${{ secrets.EC2_KEY }} + key: ${{ secrets.EC2_KEY_PROD }} port: ${{ secrets.EC2_PORT }} script: | cd compose docker rm -f $(docker ps -qa) - docker pull ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_APP_NAME }} + docker pull ${{ secrets.DOCKERHUB_USERNAME_PROD }}/${{ secrets.DOCKERHUB_APP_NAME }} docker-compose up -d docker system prune -f \ No newline at end of file diff --git a/.gitignore b/.gitignore index 15c92410..8eddcaf5 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,4 @@ out/ /src/main/generated/ /src/main/resources/application-local.yml /src/main/resources/application-prod.yml +/src/main/resources/application-dev.yml diff --git a/src/main/java/com/dnd/gongmuin/common/config/SwaggerConfig.java b/src/main/java/com/dnd/gongmuin/common/config/SwaggerConfig.java index b8f8a0b2..796b793a 100644 --- a/src/main/java/com/dnd/gongmuin/common/config/SwaggerConfig.java +++ b/src/main/java/com/dnd/gongmuin/common/config/SwaggerConfig.java @@ -12,11 +12,7 @@ info = @Info( title = "GongmuIn API", description = "공무인 API 명세서", - version = "v.1.0"), - servers = { - @Server(url = "https://gongmuin.site", description = "Deploy Server URL"), - @Server(url = "http://localhost:8080", description = "Local Host URL") - } + version = "v.1.0") ) @Configuration public class SwaggerConfig { diff --git a/src/main/java/com/dnd/gongmuin/security/config/SecurityConfig.java b/src/main/java/com/dnd/gongmuin/security/config/SecurityConfig.java index 8c4d30ba..9892e442 100644 --- a/src/main/java/com/dnd/gongmuin/security/config/SecurityConfig.java +++ b/src/main/java/com/dnd/gongmuin/security/config/SecurityConfig.java @@ -91,7 +91,7 @@ public CorsConfigurationSource corsConfigurationSource() { CorsConfiguration configuration = new CorsConfiguration(); configuration.setAllowedOrigins(Arrays.asList("http://localhost:3000", "https://gongmuin.netlify.app", - "https://gongmuin.site/", "http://localhost:8080", "/ws/**")); + "https://gongmuin.site", "https://gongmuin.shop", "http://localhost:8080", "/ws/**")); configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS")); configuration.setAllowedHeaders(Arrays.asList("*")); configuration.setExposedHeaders(Arrays.asList("Set-Cookie", "Authorization"));