From 384765f238595391893e58161a6273c75f5f97ac Mon Sep 17 00:00:00 2001 From: Cheol-Won <76567238+Ryan-Dia@users.noreply.github.com> Date: Wed, 25 Sep 2024 20:46:47 +0900 Subject: [PATCH 1/8] =?UTF-8?q?[ATR-611]=20chore:=20=EC=8A=A4=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EC=A7=95=20=EC=84=9C=EB=B2=84=20ci/cd=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20(#295)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/dev.yml | 96 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 .github/workflows/dev.yml diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml new file mode 100644 index 00000000..761e304b --- /dev/null +++ b/.github/workflows/dev.yml @@ -0,0 +1,96 @@ +name: Deploy to Staging + +on: + push: + branches: + - dev + +jobs: + Deploy: + runs-on: ubuntu-latest + + permissions: + deployments: write + + steps: + - name: Github Repository 파일 불러오기 + uses: actions/checkout@v4 + + - name: JDK v21 설치 + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: 21 + + - name: application-dev.yml 파일 만들기 + run: echo '${{ secrets.APPLICATION_DEV_PROPERTIES }}' > ./src/main/resources/application.yml + + - name: application-test.yml 파일 만들기 + run: echo '${{ secrets.APPLICATION_TEST_PROPERTIES }}' > ./src/main/resources/application-test.yml + + - name: credentials.json 파일 만들기 + run: echo '${{ secrets.CREDENTIAL_JSON }}' > ./src/main/resources/credentials.json + + - name: log4j2.xml 파일 만들기 + run: echo '${{ secrets.LOG4J2_XML }}' > ./src/main/resources/log4j2.xml + + - name: 테스트 및 빌드하기 + run: ./gradlew clean build + + - name: Docker hub 로그인 + uses: docker/login-action@v3 + with: + username: ${{secrets.DOCKERHUB_USERNAME}} + password: ${{secrets.DOCKERHUB_TOKEN}} + + - name: build and release to DockerHub + env: + NAME: ${{ secrets.DOCKERHUB_USERNAME }} + REPO: attraction-api-server + run: | + docker build -t $REPO . + docker tag $REPO:latest $NAME/$REPO:latest + docker push $NAME/$REPO:latest + + - name: 배포 작업 생성 + uses: chrnorm/deployment-action@v2 + id: deployment + with: + token: ${{ secrets.GITHUB_TOKEN }} + environment-url: https://attraction.run + environment: dev + ref: ${{ github.ref }} + + - name: SSH로 EC2에 접속하기 + uses: appleboy/ssh-action@v1.0.3 + with: + host: ${{ secrets.DEV_EC2_HOST }} + username: ${{ secrets.DEV_EC2_USERNAME }} + key: ${{ secrets.DEV_EC2_PRIVATE_KEY }} + script_stop: true + script: | + docker stop attraction-api-server || true + docker rm attraction-api-server || true + docker pull ${{ secrets.DOCKERHUB_USERNAME }}/attraction-api-server:latest + + # Redis 컨테이너 실행 + docker stop redis-server || true + docker rm redis-server || true + docker run -d --name redis-server -p 6379:6379 redis:latest + + # Spring Boot 애플리케이션 컨테이너 실행 + docker run -d --name attraction-api-server --link redis-server:redis -e TZ=Asia/Seoul -p 8080:8080 -v /home/ec2-user/workspace/logs:/logs ${{ steps.ecr-login.outputs.registry }}/attraction-api-server:latest + + # filebeat 실행 + docker stop filebeat || true + docker rm filebeat || true + docker run -d --name filebeat -v "$HOME/workspace/logs:/usr/share/filebeat/logs" -v "$HOME/workspace/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml" docker.elastic.co/beats/filebeat:8.14.1 + + - name: 슬랙 알림 + uses: 8398a7/action-slack@v3 + with: + status: ${{ job.status }} + fields: repo,message,commit,author,action,eventName,ref,workflow,job,took,pullRequest + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + if: always() \ No newline at end of file From 74e326529800a10687ac4a68e63e723bcb100261 Mon Sep 17 00:00:00 2001 From: Cheol-Won <76567238+Ryan-Dia@users.noreply.github.com> Date: Wed, 25 Sep 2024 22:48:44 +0900 Subject: [PATCH 2/8] =?UTF-8?q?[ATR-612]=20style:=20=EC=98=A4=ED=83=80=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20(#296)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/dev.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 761e304b..0c6b11da 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -79,7 +79,7 @@ jobs: docker run -d --name redis-server -p 6379:6379 redis:latest # Spring Boot 애플리케이션 컨테이너 실행 - docker run -d --name attraction-api-server --link redis-server:redis -e TZ=Asia/Seoul -p 8080:8080 -v /home/ec2-user/workspace/logs:/logs ${{ steps.ecr-login.outputs.registry }}/attraction-api-server:latest + docker run -d --name attraction-api-server --link redis-server:redis -e TZ=Asia/Seoul -p 8080:8080 -v /home/ec2-user/workspace/logs:/logs ${{ secrets.DOCKERHUB_USERNAME }}/attraction-api-server:latest # filebeat 실행 docker stop filebeat || true @@ -93,4 +93,4 @@ jobs: fields: repo,message,commit,author,action,eventName,ref,workflow,job,took,pullRequest env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} - if: always() \ No newline at end of file + if: always() From 7d00f4e04bee3c1661f78f0e9b92e4014ac15272 Mon Sep 17 00:00:00 2001 From: Cheol-Won <76567238+Ryan-Dia@users.noreply.github.com> Date: Wed, 25 Sep 2024 23:00:06 +0900 Subject: [PATCH 3/8] =?UTF-8?q?[ATR-613]=20chore:=20=EC=8A=A4=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EC=A7=95=20=EC=84=9C=EB=B2=84=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8A=94=20fil?= =?UTF-8?q?ebeat=20=EC=8B=A4=ED=96=89=20=EB=AA=85=EB=A0=B9=EC=96=B4=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20(#297)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/dev.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 0c6b11da..f3b70105 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -80,11 +80,6 @@ jobs: # Spring Boot 애플리케이션 컨테이너 실행 docker run -d --name attraction-api-server --link redis-server:redis -e TZ=Asia/Seoul -p 8080:8080 -v /home/ec2-user/workspace/logs:/logs ${{ secrets.DOCKERHUB_USERNAME }}/attraction-api-server:latest - - # filebeat 실행 - docker stop filebeat || true - docker rm filebeat || true - docker run -d --name filebeat -v "$HOME/workspace/logs:/usr/share/filebeat/logs" -v "$HOME/workspace/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml" docker.elastic.co/beats/filebeat:8.14.1 - name: 슬랙 알림 uses: 8398a7/action-slack@v3 From 350cb47b0f808bedf9bc37fcfaf1f139cded258f Mon Sep 17 00:00:00 2001 From: Cheol-Won <76567238+Ryan-Dia@users.noreply.github.com> Date: Sat, 12 Oct 2024 22:39:54 +0900 Subject: [PATCH 4/8] =?UTF-8?q?[ATR-615]=20chore:=20=EC=8A=A4=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EC=A7=95=20=EC=84=9C=EB=B2=84=20=EB=B0=B0=ED=8F=AC=20?= =?UTF-8?q?=EB=B0=A9=EC=8B=9D=EC=9D=84=20docker=20compose=EB=A1=9C=20?= =?UTF-8?q?=EB=A7=88=EC=9D=B4=EA=B7=B8=EB=A0=88=EC=9D=B4=EC=85=98=20(#298)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/dev.yml | 14 +++----------- docker-compose.yml | 28 ++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 11 deletions(-) create mode 100644 docker-compose.yml diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index f3b70105..a6ca58be 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -69,17 +69,9 @@ jobs: key: ${{ secrets.DEV_EC2_PRIVATE_KEY }} script_stop: true script: | - docker stop attraction-api-server || true - docker rm attraction-api-server || true - docker pull ${{ secrets.DOCKERHUB_USERNAME }}/attraction-api-server:latest - - # Redis 컨테이너 실행 - docker stop redis-server || true - docker rm redis-server || true - docker run -d --name redis-server -p 6379:6379 redis:latest - - # Spring Boot 애플리케이션 컨테이너 실행 - docker run -d --name attraction-api-server --link redis-server:redis -e TZ=Asia/Seoul -p 8080:8080 -v /home/ec2-user/workspace/logs:/logs ${{ secrets.DOCKERHUB_USERNAME }}/attraction-api-server:latest + docker-compose down || true # 기존 컨테이너 중지 및 제거 + docker-compose pull # 최신 이미지를 가져옴 + docker-compose up -d - name: 슬랙 알림 uses: 8398a7/action-slack@v3 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..081bb472 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,28 @@ +version: '3.8' + +services: + redis-server: + image: redis:latest + container_name: redis-server + ports: + - "6379:6379" + networks: + - app-network + + attraction-api-server: + image: ${DOCKERHUB_USERNAME}/attraction-api-server:latest + container_name: attraction-api-server + ports: + - "8080:8080" + environment: + - TZ=Asia/Seoul + volumes: + - /home/ec2-user/workspace/logs:/logs + depends_on: + - redis-server + networks: + - app-network + +networks: + app-network: + driver: bridge From f4da7365374b7ff694c580d46b5e030270ba0633 Mon Sep 17 00:00:00 2001 From: Cheol-Won <76567238+Ryan-Dia@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:38:31 +0900 Subject: [PATCH 5/8] =?UTF-8?q?[ATR-615]=20chore:=20docker-compose.yml=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=A7=81=EC=A0=91=20=EA=B0=80=EC=A0=B8?= =?UTF-8?q?=EC=98=A4=EB=8F=84=EB=A1=9D=20=EC=84=A4=EC=A0=95=20(#299)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [ATR-615] chore: 스테이징 서버 배포 방식을 docker compose로 마이그레이션 * [ATR-615] chore: docker-compose.yml 파일 직접 가져오도록 설 --- .github/workflows/dev.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index a6ca58be..92e0151d 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -69,9 +69,11 @@ jobs: key: ${{ secrets.DEV_EC2_PRIVATE_KEY }} script_stop: true script: | - docker-compose down || true # 기존 컨테이너 중지 및 제거 - docker-compose pull # 최신 이미지를 가져옴 - docker-compose up -d + cd /home/ec2-user/app + wget https://raw.githubusercontent.com/Atractorrr/Attraction-Server/dev/docker-compose.yml + # docker-compose 명령 실행 + docker-compose down || true + docker-compose pull - name: 슬랙 알림 uses: 8398a7/action-slack@v3 From a0a2df30f7ccd926212616da6adcbee38992217b Mon Sep 17 00:00:00 2001 From: Cheol-Won <76567238+Ryan-Dia@users.noreply.github.com> Date: Sun, 13 Oct 2024 00:55:44 +0900 Subject: [PATCH 6/8] =?UTF-8?q?hotfix:=20=ED=99=98=EA=B2=BD=20=EB=B3=80?= =?UTF-8?q?=EC=88=98=20=EC=84=A4=EC=A0=95=20(#300)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/dev.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index 92e0151d..b9d79ea7 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -70,7 +70,8 @@ jobs: script_stop: true script: | cd /home/ec2-user/app - wget https://raw.githubusercontent.com/Atractorrr/Attraction-Server/dev/docker-compose.yml + wget -O docker-compose.yml https://raw.githubusercontent.com/Atractorrr/Attraction-Server/dev/docker-compose.yml + export DOCKERHUB_USERNAME=${{ secrets.DOCKERHUB_USERNAME }} # docker-compose 명령 실행 docker-compose down || true docker-compose pull From 99ad8c62cd7cd9987930a6a8fa5a81468fd8bb85 Mon Sep 17 00:00:00 2001 From: Cheol-Won <76567238+Ryan-Dia@users.noreply.github.com> Date: Sun, 13 Oct 2024 01:11:23 +0900 Subject: [PATCH 7/8] =?UTF-8?q?hotfix:=20githubaction=20=EC=8A=A4=ED=81=AC?= =?UTF-8?q?=EB=A6=BD=20=EB=AA=85=EB=A0=B9=EC=96=B4=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EB=B0=8F=20=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20=EB=AC=B8?= =?UTF-8?q?=EB=B2=95=20=EC=82=AD=EC=A0=9C=20(#301)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/dev.yml | 3 ++- docker-compose.yml | 2 -- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/dev.yml b/.github/workflows/dev.yml index b9d79ea7..3233f5a8 100644 --- a/.github/workflows/dev.yml +++ b/.github/workflows/dev.yml @@ -74,7 +74,8 @@ jobs: export DOCKERHUB_USERNAME=${{ secrets.DOCKERHUB_USERNAME }} # docker-compose 명령 실행 docker-compose down || true - docker-compose pull + docker-compose pull + docker-compose up -d - name: 슬랙 알림 uses: 8398a7/action-slack@v3 diff --git a/docker-compose.yml b/docker-compose.yml index 081bb472..967c801a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,3 @@ -version: '3.8' - services: redis-server: image: redis:latest From 9253fdac43fe2866545dd905e2f8cd81d0c454f3 Mon Sep 17 00:00:00 2001 From: Cheol-Won <76567238+Ryan-Dia@users.noreply.github.com> Date: Mon, 14 Oct 2024 23:53:26 +0900 Subject: [PATCH 8/8] =?UTF-8?q?[ATR-616]=20feat:=20homepageUrl/prevArticle?= =?UTF-8?q?ListUrl=20=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80=20(#302)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [ATR-616] feat: homepageUrl/prevArticleListUrl 필드 추가 - newsletter에 prevArticleListUrl 추가 - newsletter에서 mainLink를 homepageUrl로 받을 수 있는 메서드 추가 - newsletterDTO에 homepageUrl, prevArticleListUrl 추가 * [ATR-616] feat: 테스트 sql더미에 prevArticleListURl 필드 추가 --- .../attraction/api/v1/archive/dto/NewsletterDTO.java | 12 +++++++++--- .../api/v1/archive/repository/ArticleRepository.java | 2 +- .../attraction/api/v1/introduction/Newsletter.java | 7 +++++++ src/test/resources/sql/data-h2.sql | 1 + 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/main/java/run/attraction/api/v1/archive/dto/NewsletterDTO.java b/src/main/java/run/attraction/api/v1/archive/dto/NewsletterDTO.java index 8023d46e..4386b567 100644 --- a/src/main/java/run/attraction/api/v1/archive/dto/NewsletterDTO.java +++ b/src/main/java/run/attraction/api/v1/archive/dto/NewsletterDTO.java @@ -9,7 +9,9 @@ public record NewsletterDTO( Long id, String name, Category category, - String thumbnailUrl + String thumbnailUrl, + String homepageUrl, + String prevArticleListUrl ) { @QueryProjection public NewsletterDTO(Newsletter newsletter) { @@ -17,7 +19,9 @@ public NewsletterDTO(Newsletter newsletter) { newsletter.getId(), newsletter.getName(), newsletter.getCategory(), - newsletter.getThumbnailUrl() + newsletter.getThumbnailUrl(), + newsletter.getHomepageUrl(), + newsletter.getPrevArticleListUrl() ); } @@ -26,7 +30,9 @@ public static NewsletterDTO from(Newsletter newsletter) { newsletter.getId(), newsletter.getName(), newsletter.getCategory(), - newsletter.getThumbnailUrl() + newsletter.getThumbnailUrl(), + newsletter.getHomepageUrl(), + newsletter.getPrevArticleListUrl() ); } } diff --git a/src/main/java/run/attraction/api/v1/archive/repository/ArticleRepository.java b/src/main/java/run/attraction/api/v1/archive/repository/ArticleRepository.java index 06e39cb0..ddb95b46 100644 --- a/src/main/java/run/attraction/api/v1/archive/repository/ArticleRepository.java +++ b/src/main/java/run/attraction/api/v1/archive/repository/ArticleRepository.java @@ -14,7 +14,7 @@ public interface ArticleRepository extends JpaRepository, Article @Query(""" SELECT DISTINCT new run.attraction.api.v1.home.service.dto.search.ArticleSearchDto( a.id, a.title, a.thumbnailUrl, a.contentSummary, a.readingTime, a.receivedAt, - new run.attraction.api.v1.archive.dto.NewsletterDTO(n.id, n.name, n.category, n.thumbnailUrl) + new run.attraction.api.v1.archive.dto.NewsletterDTO(n.id, n.name, n.category, n.thumbnailUrl, n.mainLink, n.prevArticleListUrl) ) FROM Article a JOIN Newsletter n ON a.newsletterEmail = n.email WHERE (a.title LIKE %:search%) diff --git a/src/main/java/run/attraction/api/v1/introduction/Newsletter.java b/src/main/java/run/attraction/api/v1/introduction/Newsletter.java index 026bae2d..346413b7 100644 --- a/src/main/java/run/attraction/api/v1/introduction/Newsletter.java +++ b/src/main/java/run/attraction/api/v1/introduction/Newsletter.java @@ -47,6 +47,9 @@ public class Newsletter extends AuditableEntity { @Column(nullable = false) private String subscribeLink; + @Column + private String prevArticleListUrl; + @Column(nullable = false) private String thumbnailUrl; @@ -71,4 +74,8 @@ public class Newsletter extends AuditableEntity { @Default @Column(nullable = false, columnDefinition = "BOOLEAN DEFAULT FALSE") private boolean isDeleted = false; + + public String getHomepageUrl() { + return this.mainLink; + } } diff --git a/src/test/resources/sql/data-h2.sql b/src/test/resources/sql/data-h2.sql index 01182afd..d8071ff1 100644 --- a/src/test/resources/sql/data-h2.sql +++ b/src/test/resources/sql/data-h2.sql @@ -31,6 +31,7 @@ CREATE TABLE IF NOT EXISTS newsletter nickname VARCHAR(255), subscribe_link VARCHAR(255), thumbnail_url VARCHAR(255), + prev_article_list_url VARCHAR(255), upload_days VARCHAR(255), has_confirmation_email BOOLEAN, is_auto_subscribe_enabled BOOLEAN,