From fe9ad0fb68c15531d4b463c0eab979503a3fba41 Mon Sep 17 00:00:00 2001 From: ay-eonii Date: Tue, 29 Oct 2024 15:47:56 +0900 Subject: [PATCH 1/9] =?UTF-8?q?chore:=20=EB=B0=B0=ED=8F=AC=20=ED=9B=84=20?= =?UTF-8?q?=ED=97=AC=EC=8A=A4=EC=B2=B4=ED=81=AC=203=EB=B2=88=EA=B9=8C?= =?UTF-8?q?=EC=A7=80=20=EC=8B=9C=EB=8F=84=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/be-rolling-deploy.yml | 40 +++++++++++++++++-------- 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/.github/workflows/be-rolling-deploy.yml b/.github/workflows/be-rolling-deploy.yml index ea6c9c6f..fb9e0217 100644 --- a/.github/workflows/be-rolling-deploy.yml +++ b/.github/workflows/be-rolling-deploy.yml @@ -29,12 +29,20 @@ jobs: - name: Health check for Prod1 instance run: | - RESPONSE=$(curl --write-out '%{http_code}' --silent --output /dev/null http://localhost:8080/health) - if [ $RESPONSE -ne 200 ]; then - echo "Prod1 instance deployment failed." - exit 1 - fi - echo "Prod1 instance is healthy." + ATTEMPTS=0 + MAX_ATTEMPTS=3 + until [ $ATTEMPTS -ge $MAX_ATTEMPTS ]; do + RESPONSE=$(curl --write-out '%{http_code}' --silent --output /dev/null http://localhost:8080/health) + if [ $RESPONSE -eq 200 ]; then + echo "Prod1 instance is healthy." + exit 0 + fi + echo "Health check failed, attempt $((ATTEMPTS+1))/$MAX_ATTEMPTS. Retrying in 5 seconds..." + ATTEMPTS=$((ATTEMPTS+1)) + sleep 5 + done + echo "Prod1 instance deployment failed after $MAX_ATTEMPTS attempts." + exit 1 deploy-prod2: name: Deploy to Prod2 Instance @@ -60,9 +68,17 @@ jobs: - name: Health check for Prod2 instance run: | - RESPONSE=$(curl --write-out '%{http_code}' --silent --output /dev/null http://localhost:8080/health) - if [ $RESPONSE -ne 200 ]; then - echo "Prod2 instance deployment failed." - exit 1 - fi - echo "Prod2 instance is healthy." + ATTEMPTS=0 + MAX_ATTEMPTS=3 + until [ $ATTEMPTS -ge $MAX_ATTEMPTS ]; do + RESPONSE=$(curl --write-out '%{http_code}' --silent --output /dev/null http://localhost:8080/health) + if [ $RESPONSE -eq 200 ]; then + echo "Prod2 instance is healthy." + exit 0 + fi + echo "Health check failed, attempt $((ATTEMPTS+1))/$MAX_ATTEMPTS. Retrying in 5 seconds..." + ATTEMPTS=$((ATTEMPTS+1)) + sleep 5 + done + echo "Prod2 instance deployment failed after $MAX_ATTEMPTS attempts." + exit 1 From 4f5c9d32b5eb0f2ec3e3358e0acb3d3d9564f037 Mon Sep 17 00:00:00 2001 From: ay-eonii Date: Tue, 29 Oct 2024 15:59:38 +0900 Subject: [PATCH 2/9] =?UTF-8?q?chore:=20graceful=20shutdown=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/main/resources/application-prod.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/src/main/resources/application-prod.yml b/backend/src/main/resources/application-prod.yml index 8ac4cbe4..fd731d49 100644 --- a/backend/src/main/resources/application-prod.yml +++ b/backend/src/main/resources/application-prod.yml @@ -64,3 +64,4 @@ server: tomcat: mbeanregistry: enabled: true + shutdown: graceful From 936134c9c5b2d87354a94e2f00a4e4b8b039a3c7 Mon Sep 17 00:00:00 2001 From: ay-eonii Date: Tue, 29 Oct 2024 16:05:55 +0900 Subject: [PATCH 3/9] =?UTF-8?q?chore:=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=9A=A9=20=EB=B8=8C=EB=9E=9C=EC=B9=98=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/be-rolling-deploy.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/be-rolling-deploy.yml b/.github/workflows/be-rolling-deploy.yml index fb9e0217..ce5bdf9b 100644 --- a/.github/workflows/be-rolling-deploy.yml +++ b/.github/workflows/be-rolling-deploy.yml @@ -3,7 +3,7 @@ name: Rolling Deployment on: push: branches: - - main + - chore/#793 jobs: deploy-prod1: @@ -25,7 +25,7 @@ jobs: steps: - name: Wait for Prod1 instance to be ready - run: sleep 30 + run: sleep 25 - name: Health check for Prod1 instance run: | @@ -64,7 +64,7 @@ jobs: steps: - name: Wait for Prod2 instance to be ready - run: sleep 30 + run: sleep 25 - name: Health check for Prod2 instance run: | From 515108a73803b1ebf1e9e58061cbfcd7b250728b Mon Sep 17 00:00:00 2001 From: ay-eonii Date: Tue, 29 Oct 2024 21:26:49 +0900 Subject: [PATCH 4/9] =?UTF-8?q?chore:=20=EB=B0=B0=ED=8F=AC=20=EC=A4=80?= =?UTF-8?q?=EB=B9=84=20=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=8B=A4?= =?UTF-8?q?=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/be-rolling-deploy.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/be-rolling-deploy.yml b/.github/workflows/be-rolling-deploy.yml index ce5bdf9b..76c4b69d 100644 --- a/.github/workflows/be-rolling-deploy.yml +++ b/.github/workflows/be-rolling-deploy.yml @@ -14,6 +14,10 @@ jobs: - name: Checkout code uses: actions/checkout@v2 + - name: Prepare Deploy + run: | + cd ~/deploy && ./prepare-deploy.sh + - name: Run Prod1 instance deploy script run: | cd ~/deploy && ./deploy.sh @@ -53,6 +57,10 @@ jobs: - name: Checkout code uses: actions/checkout@v2 + - name: Prepare Deploy + run: | + cd ~/deploy && ./prepare-deploy.sh + - name: Run Prod2 instance deploy script run: | cd ~/deploy && ./deploy.sh From dd82b186eca0e319ad89b035feae2a69df58e5ed Mon Sep 17 00:00:00 2001 From: ay-eonii Date: Tue, 29 Oct 2024 21:28:37 +0900 Subject: [PATCH 5/9] =?UTF-8?q?feat:=20=ED=8A=B8=EB=9E=98=ED=94=BD=20?= =?UTF-8?q?=EC=A4=91=EB=8B=A8=EC=9D=84=20=EC=9C=84=ED=95=9C=20=ED=97=AC?= =?UTF-8?q?=EC=8A=A4=EC=B2=B4=ED=81=AC=20=EB=B3=80=EA=B2=BD=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/common/HealthCheckController.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/backend/src/main/java/mouda/backend/common/HealthCheckController.java b/backend/src/main/java/mouda/backend/common/HealthCheckController.java index 3a800fbd..3bbf2c1d 100644 --- a/backend/src/main/java/mouda/backend/common/HealthCheckController.java +++ b/backend/src/main/java/mouda/backend/common/HealthCheckController.java @@ -1,14 +1,38 @@ package mouda.backend.common; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; +import jakarta.servlet.http.HttpServletRequest; + @RestController public class HealthCheckController { + private static final String HOST_IP = "127.0.0.1"; + private static final String HOST_NAME = "localhost"; + + private final AtomicBoolean isTerminating = new AtomicBoolean(false); + @GetMapping("/health") public ResponseEntity checkHealth() { + if (isTerminating.get()) { + return ResponseEntity.status(HttpStatus.BAD_GATEWAY).build(); + } return ResponseEntity.ok().build(); } + + @PostMapping("/termination") + public ResponseEntity terminate(HttpServletRequest request) { + String remoteAddr = request.getRemoteAddr(); + + if (HOST_IP.equals(remoteAddr) || HOST_NAME.equals(remoteAddr)) { + return ResponseEntity.ok().build(); + } + return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); + } } From 037bffad28d3f4471b62c020c6be32dc806b0a91 Mon Sep 17 00:00:00 2001 From: ay-eonii Date: Tue, 29 Oct 2024 21:50:27 +0900 Subject: [PATCH 6/9] =?UTF-8?q?fix:=20=ED=8A=B8=EB=9E=98=ED=94=BD=20?= =?UTF-8?q?=EC=A4=91=EB=8B=A8=EC=9D=84=20=EC=9C=84=ED=95=9C=20=ED=97=AC?= =?UTF-8?q?=EC=8A=A4=EC=B2=B4=ED=81=AC=20=EB=B3=80=EA=B2=BD=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/common/HealthCheckController.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/backend/src/main/java/mouda/backend/common/HealthCheckController.java b/backend/src/main/java/mouda/backend/common/HealthCheckController.java index 3a800fbd..03c668c1 100644 --- a/backend/src/main/java/mouda/backend/common/HealthCheckController.java +++ b/backend/src/main/java/mouda/backend/common/HealthCheckController.java @@ -1,14 +1,39 @@ package mouda.backend.common; +import java.util.concurrent.atomic.AtomicBoolean; + +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; +import jakarta.servlet.http.HttpServletRequest; + @RestController public class HealthCheckController { + private static final String HOST_IP = "127.0.0.1"; + private static final String HOST_NAME = "localhost"; + + private final AtomicBoolean isTerminating = new AtomicBoolean(false); + @GetMapping("/health") public ResponseEntity checkHealth() { + if (isTerminating.get()) { + return ResponseEntity.status(HttpStatus.BAD_GATEWAY).build(); + } return ResponseEntity.ok().build(); } + + @PostMapping("/termination") + public ResponseEntity terminate(HttpServletRequest request) { + isTerminating.set(true); + return ResponseEntity.ok().build(); + // String remoteAddr = request.getRemoteAddr(); + + // if (HOST_IP.equals(remoteAddr) || HOST_NAME.equals(remoteAddr)) { + // } + // return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); + } } From c7a13f4c10e834b3cab8d5cdbe0625e5eb0543b4 Mon Sep 17 00:00:00 2001 From: ay-eonii Date: Tue, 29 Oct 2024 22:17:27 +0900 Subject: [PATCH 7/9] =?UTF-8?q?fix:=20=ED=8A=B8=EB=9E=98=ED=94=BD=20?= =?UTF-8?q?=EC=A4=91=EB=8B=A8=EC=9D=84=20=EC=9C=84=ED=95=9C=20=ED=97=AC?= =?UTF-8?q?=EC=8A=A4=EC=B2=B4=ED=81=AC=20=ED=98=B8=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../backend/common/HealthCheckController.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/backend/src/main/java/mouda/backend/common/HealthCheckController.java b/backend/src/main/java/mouda/backend/common/HealthCheckController.java index 03c668c1..3f6c1717 100644 --- a/backend/src/main/java/mouda/backend/common/HealthCheckController.java +++ b/backend/src/main/java/mouda/backend/common/HealthCheckController.java @@ -13,7 +13,8 @@ @RestController public class HealthCheckController { - private static final String HOST_IP = "127.0.0.1"; + private static final String HOST_IPV4 = "127.0.0.1"; + private static final String HOST_IPV6 = "0:0:0:0:0:0:0:1"; private static final String HOST_NAME = "localhost"; private final AtomicBoolean isTerminating = new AtomicBoolean(false); @@ -28,12 +29,12 @@ public ResponseEntity checkHealth() { @PostMapping("/termination") public ResponseEntity terminate(HttpServletRequest request) { - isTerminating.set(true); - return ResponseEntity.ok().build(); - // String remoteAddr = request.getRemoteAddr(); - - // if (HOST_IP.equals(remoteAddr) || HOST_NAME.equals(remoteAddr)) { - // } - // return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); + String remoteHost = request.getRemoteHost(); + System.out.println(remoteHost); + if (HOST_IPV6.equals(remoteHost) || HOST_IPV4.equals(remoteHost) || HOST_NAME.equals(remoteHost)) { + isTerminating.set(true); + return ResponseEntity.ok().build(); + } + return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); } } From 84aebc66e8f963639328c73709506c7b32379dbd Mon Sep 17 00:00:00 2001 From: ay-eonii Date: Wed, 30 Oct 2024 09:31:37 +0900 Subject: [PATCH 8/9] =?UTF-8?q?fix:=20=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C?= =?UTF-8?q?=20=EC=B6=9C=EB=A0=A5=EB=AC=B8=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/mouda/backend/common/HealthCheckController.java | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/src/main/java/mouda/backend/common/HealthCheckController.java b/backend/src/main/java/mouda/backend/common/HealthCheckController.java index 3f6c1717..513e8c8e 100644 --- a/backend/src/main/java/mouda/backend/common/HealthCheckController.java +++ b/backend/src/main/java/mouda/backend/common/HealthCheckController.java @@ -30,7 +30,6 @@ public ResponseEntity checkHealth() { @PostMapping("/termination") public ResponseEntity terminate(HttpServletRequest request) { String remoteHost = request.getRemoteHost(); - System.out.println(remoteHost); if (HOST_IPV6.equals(remoteHost) || HOST_IPV4.equals(remoteHost) || HOST_NAME.equals(remoteHost)) { isTerminating.set(true); return ResponseEntity.ok().build(); From 514ddc76b55f1abcb201850e32475c92694e9baa Mon Sep 17 00:00:00 2001 From: ay-eonii Date: Wed, 30 Oct 2024 09:31:48 +0900 Subject: [PATCH 9/9] =?UTF-8?q?fix:=20=EB=B0=B0=ED=8F=AC=20=EB=B8=8C?= =?UTF-8?q?=EB=9E=9C=EC=B9=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/be-rolling-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/be-rolling-deploy.yml b/.github/workflows/be-rolling-deploy.yml index 76c4b69d..ea776827 100644 --- a/.github/workflows/be-rolling-deploy.yml +++ b/.github/workflows/be-rolling-deploy.yml @@ -3,7 +3,7 @@ name: Rolling Deployment on: push: branches: - - chore/#793 + - main jobs: deploy-prod1: