From 77c461e0da8216ec44a362dbe462cfa9fc1df69a Mon Sep 17 00:00:00 2001 From: leesanghuu Date: Sat, 15 Nov 2025 00:22:53 +0900 Subject: [PATCH 01/12] =?UTF-8?q?chore:=20GitHub=20Actions=20=EA=B8=B0?= =?UTF-8?q?=EB=B0=98=20EC2=20=EC=9E=90=EB=8F=99=20=EB=B0=B0=ED=8F=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 71 ++++++++++++++++++++++++++++++++++++ build.gradle | 2 +- 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/deploy.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..9b83d7d --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,71 @@ +name: Deploy to EC2 + +on: + push: + branches: + - main + - chore/#4 +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + # 1) 코드 가져오기 + - name: Checkout + uses: actions/checkout@v4 + + # 2) JDK 설정 + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '21' + cache: gradle + + # 3) Gradle 빌드 + - name: Build with Gradle + run: chmod +x ./gradlew && ./gradlew clean bootjar + + # 5) JAR를 EC2로 복사 + - name: Copy jar to EC2 + uses: appleboy/scp-action@v0.1.7 + with: + host: ${{ secrets.EC2_HOST }} + username: ${{ secrets.EC2_USER }} + key: ${{ secrets.EC2_SSH_KEY }} + source: "build/libs/*.jar" + target: "/home/ubuntu/app" + overwrite: true + + # 6) EC2에서 앱 재시작 + - name: Restart Spring Boot app on EC2 + uses: appleboy/ssh-action@v1.0.3 + with: + host: ${{ secrets.EC2_HOST }} + username: ${{ secrets.EC2_USER }} + key: ${{ secrets.EC2_SSH_KEY }} + script: | + echo "Stopping existing application if running..." + if pgrep -f "java -jar"; then + pkill -f "java -jar" + sleep 5 + fi + + echo "Finding latest JAR..." + JAR_PATH=$(ls -t /home/ubuntu/app/*.jar | head -n 1) + echo "Using JAR: $JAR_PATH" + + echo "Export DB environment variable..." + export DB_PASSWORD='${{ secrets.DB_PASSWORD }}' + + echo "Starting application..." + nohup java -jar "$JAR_PATH" \ + > /home/ubuntu/app/app.log 2>&1 & + + sleep 3 + if pgrep -f "java -jar"; then + echo "Application started successfully." + else + echo "Application failed to start." + exit 1 + fi \ No newline at end of file diff --git a/build.gradle b/build.gradle index f3e0eda..825498a 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ description = 'Demo project for Spring Boot' java { toolchain { - languageVersion = JavaLanguageVersion.of(25) + languageVersion = JavaLanguageVersion.of(21) } } From 7d02df0e61f495d3f0ac685f6b7793ad2f01be64 Mon Sep 17 00:00:00 2001 From: leesanghuu Date: Sat, 15 Nov 2025 00:35:46 +0900 Subject: [PATCH 02/12] =?UTF-8?q?chore:=20EC2=20jar=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=20=EA=B2=BD=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 9b83d7d..7eee8bb 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -52,7 +52,7 @@ jobs: fi echo "Finding latest JAR..." - JAR_PATH=$(ls -t /home/ubuntu/app/*.jar | head -n 1) + JAR_PATH=$(ls -t /home/ubuntu/app/build/libs/*.jar | head -n 1) echo "Using JAR: $JAR_PATH" echo "Export DB environment variable..." From 5b85dcb9abef4250a4b401da9699d32f687bf08d Mon Sep 17 00:00:00 2001 From: leesanghuu Date: Sat, 15 Nov 2025 01:19:08 +0900 Subject: [PATCH 03/12] =?UTF-8?q?chore:=20=EC=8A=A4=ED=81=AC=EB=A6=BD?= =?UTF-8?q?=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/deploy.yml | 28 ++++++---------------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 7eee8bb..18022eb 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -45,27 +45,11 @@ jobs: username: ${{ secrets.EC2_USER }} key: ${{ secrets.EC2_SSH_KEY }} script: | - echo "Stopping existing application if running..." - if pgrep -f "java -jar"; then - pkill -f "java -jar" - sleep 5 - fi - - echo "Finding latest JAR..." - JAR_PATH=$(ls -t /home/ubuntu/app/build/libs/*.jar | head -n 1) - echo "Using JAR: $JAR_PATH" - - echo "Export DB environment variable..." - export DB_PASSWORD='${{ secrets.DB_PASSWORD }}' + cd /home/ubuntu/app - echo "Starting application..." - nohup java -jar "$JAR_PATH" \ - > /home/ubuntu/app/app.log 2>&1 & + pkill -f "java -jar" || true - sleep 3 - if pgrep -f "java -jar"; then - echo "Application started successfully." - else - echo "Application failed to start." - exit 1 - fi \ No newline at end of file + JAR_PATH=$(ls -t build/libs/*.jar | head -n 1) + + nohup DB_PASSWORD='${{ secrets.DB_PASSWORD }}' \ + java -jar "$JAR_PATH" > app.log 2>&1 & \ No newline at end of file From 4baf888b51a6272309ec5cb6ec47829786e4fef5 Mon Sep 17 00:00:00 2001 From: leesanghuu Date: Sat, 15 Nov 2025 01:31:10 +0900 Subject: [PATCH 04/12] =?UTF-8?q?chore:=20=EC=8A=A4=ED=81=AC=EB=A6=BD?= =?UTF-8?q?=ED=8A=B8=20=EC=88=98=EC=A0=952?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 18022eb..644cecd 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -51,5 +51,6 @@ jobs: JAR_PATH=$(ls -t build/libs/*.jar | head -n 1) - nohup DB_PASSWORD='${{ secrets.DB_PASSWORD }}' \ - java -jar "$JAR_PATH" > app.log 2>&1 & \ No newline at end of file + export DB_PASSWORD='${{ secrets.DB_PASSWORD }}' + + nohup java -jar "$JAR_PATH" > app.log 2>&1 & \ No newline at end of file From e2a0b7254b64e649a6d7f7b4581be85b3cd7dc89 Mon Sep 17 00:00:00 2001 From: leesanghuu Date: Sat, 15 Nov 2025 01:48:07 +0900 Subject: [PATCH 05/12] =?UTF-8?q?chore:=20jar=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EA=B2=BD=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 644cecd..616e96c 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -24,7 +24,12 @@ jobs: # 3) Gradle 빌드 - name: Build with Gradle - run: chmod +x ./gradlew && ./gradlew clean bootjar + run: chmod +x ./gradlew && ./gradlew bootjar + + # 4) JAR 파일 이름 변경 + - name: Rename JAR file + run: | + mv build/libs/*-SNAPSHOT.jar build/libs/app.jar # 5) JAR를 EC2로 복사 - name: Copy jar to EC2 @@ -33,7 +38,7 @@ jobs: host: ${{ secrets.EC2_HOST }} username: ${{ secrets.EC2_USER }} key: ${{ secrets.EC2_SSH_KEY }} - source: "build/libs/*.jar" + source: "build/libs/app.jar" target: "/home/ubuntu/app" overwrite: true @@ -47,10 +52,9 @@ jobs: script: | cd /home/ubuntu/app - pkill -f "java -jar" || true - - JAR_PATH=$(ls -t build/libs/*.jar | head -n 1) + pkill -f "java -jar app.jar" || true + sleep 5 export DB_PASSWORD='${{ secrets.DB_PASSWORD }}' - nohup java -jar "$JAR_PATH" > app.log 2>&1 & \ No newline at end of file + nohup java -jar app.jar > app.log 2>&1 & \ No newline at end of file From 14a3f5ae09e48c9ae29b6620218c47982460f0ee Mon Sep 17 00:00:00 2001 From: leesanghuu Date: Sat, 15 Nov 2025 01:55:11 +0900 Subject: [PATCH 06/12] =?UTF-8?q?chore:=20jar=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EA=B2=BD=EB=A1=9C=20=EC=88=98=EC=A0=952?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 616e96c..5da7cb3 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -26,23 +26,18 @@ jobs: - name: Build with Gradle run: chmod +x ./gradlew && ./gradlew bootjar - # 4) JAR 파일 이름 변경 - - name: Rename JAR file - run: | - mv build/libs/*-SNAPSHOT.jar build/libs/app.jar - - # 5) JAR를 EC2로 복사 + # 4) JAR를 EC2로 복사 - name: Copy jar to EC2 uses: appleboy/scp-action@v0.1.7 with: host: ${{ secrets.EC2_HOST }} username: ${{ secrets.EC2_USER }} key: ${{ secrets.EC2_SSH_KEY }} - source: "build/libs/app.jar" - target: "/home/ubuntu/app" + source: "build/libs/*.jar" + target: "/home/ubuntu/app/app.jar" overwrite: true - # 6) EC2에서 앱 재시작 + # 5) EC2에서 앱 재시작 - name: Restart Spring Boot app on EC2 uses: appleboy/ssh-action@v1.0.3 with: From 258c562670782c8e309926d7d7ec1f3e42c48d30 Mon Sep 17 00:00:00 2001 From: leesanghuu Date: Sat, 15 Nov 2025 02:07:35 +0900 Subject: [PATCH 07/12] =?UTF-8?q?chore:=20jar=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EA=B2=BD=EB=A1=9C=20=EC=88=98=EC=A0=953?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 5da7cb3..6409bcf 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -33,8 +33,8 @@ jobs: host: ${{ secrets.EC2_HOST }} username: ${{ secrets.EC2_USER }} key: ${{ secrets.EC2_SSH_KEY }} - source: "build/libs/*.jar" - target: "/home/ubuntu/app/app.jar" + source: "build/libs/*-SNAPSHOT.jar" + target: "/home/ubuntu/app" overwrite: true # 5) EC2에서 앱 재시작 @@ -46,10 +46,18 @@ jobs: key: ${{ secrets.EC2_SSH_KEY }} script: | cd /home/ubuntu/app - - pkill -f "java -jar app.jar" || true + + pkill -f "java -jar" || true sleep 5 + JAR_PATH=$(ls -t build/libs/*-SNAPSHOT.jar | head -n 1) + echo "Using JAR: $JAR_PATH" + + if [ -z "$JAR_PATH" ]; then + echo "No JAR found under build/libs" + exit 1 + fi + export DB_PASSWORD='${{ secrets.DB_PASSWORD }}' - - nohup java -jar app.jar > app.log 2>&1 & \ No newline at end of file + + nohup java -jar "$JAR_PATH" > app.log 2>&1 & \ No newline at end of file From cbff2bdefb15a8f55bb34c0f44504b6afcfc8c2e Mon Sep 17 00:00:00 2001 From: leesanghuu Date: Sat, 15 Nov 2025 02:49:10 +0900 Subject: [PATCH 08/12] =?UTF-8?q?chore:=20db=20password=20=EA=B0=92=20?= =?UTF-8?q?=ED=99=95=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 6409bcf..369d5b5 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -58,6 +58,7 @@ jobs: exit 1 fi - export DB_PASSWORD='${{ secrets.DB_PASSWORD }}' + DB_PASSWORD='${{ secrets.DB_PASSWORD }}' + echo "DB_PASSWORD length in action: ${#DB_PASSWORD}" nohup java -jar "$JAR_PATH" > app.log 2>&1 & \ No newline at end of file From 2c82f524d59bb1726c6b35a26f97de5dcda58c45 Mon Sep 17 00:00:00 2001 From: leesanghuu Date: Sat, 15 Nov 2025 02:55:14 +0900 Subject: [PATCH 09/12] =?UTF-8?q?chore:=20=EC=8B=9C=ED=81=AC=EB=A6=BF=20?= =?UTF-8?q?=EA=B0=92=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 369d5b5..28e17e6 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -58,7 +58,6 @@ jobs: exit 1 fi - DB_PASSWORD='${{ secrets.DB_PASSWORD }}' - echo "DB_PASSWORD length in action: ${#DB_PASSWORD}" + export DB_PASSWORD=${{ secrets.DB_PASSWORD }} nohup java -jar "$JAR_PATH" > app.log 2>&1 & \ No newline at end of file From 75d6d8516af0c52d23bc8bcf3e54454922b8fec9 Mon Sep 17 00:00:00 2001 From: leesanghuu Date: Sat, 15 Nov 2025 03:03:20 +0900 Subject: [PATCH 10/12] =?UTF-8?q?chore:=20=EC=8A=A4=ED=81=AC=EB=A6=BD?= =?UTF-8?q?=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/deploy.yml | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 28e17e6..d89f731 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -46,18 +46,6 @@ jobs: key: ${{ secrets.EC2_SSH_KEY }} script: | cd /home/ubuntu/app - - pkill -f "java -jar" || true - sleep 5 - JAR_PATH=$(ls -t build/libs/*-SNAPSHOT.jar | head -n 1) - echo "Using JAR: $JAR_PATH" - - if [ -z "$JAR_PATH" ]; then - echo "No JAR found under build/libs" - exit 1 - fi - - export DB_PASSWORD=${{ secrets.DB_PASSWORD }} - - nohup java -jar "$JAR_PATH" > app.log 2>&1 & \ No newline at end of file + DB_PASSWORD=${{ secrets.DB_PASSWORD }} \ + java -jar build/libs/*-SNAPSHOT.jar \ No newline at end of file From 1c3d72e8def0085bf88042c4f59f4147c971a548 Mon Sep 17 00:00:00 2001 From: leesanghuu Date: Sat, 15 Nov 2025 03:14:32 +0900 Subject: [PATCH 11/12] =?UTF-8?q?chore:=20=EC=8A=A4=ED=81=AC=EB=A6=BD?= =?UTF-8?q?=ED=8A=B8=20=EC=88=98=EC=A0=952?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index d89f731..b54bd0d 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -47,5 +47,31 @@ jobs: script: | cd /home/ubuntu/app + echo "[deploy] kill old app if exists" + pkill -f "java -jar" || true + sleep 5 + + echo "[deploy] list jars" + ls -al build/libs + + JAR_PATH=$(ls -t build/libs/*.jar | head -n 1) + echo "[deploy] Using JAR: $JAR_PATH" + + if [ -z "$JAR_PATH" ]; then + echo "[deploy] No JAR found under build/libs" + exit 1 + fi + + echo "[deploy] start app with nohup in background" DB_PASSWORD=${{ secrets.DB_PASSWORD }} \ - java -jar build/libs/*-SNAPSHOT.jar \ No newline at end of file + nohup java -jar "$JAR_PATH" > app.log 2>&1 & + + sleep 5 + + if pgrep -f "java -jar" > /dev/null; then + echo "[deploy] Application is running." + exit 0 + else + echo "[deploy] Application failed to start." + exit 1 + fi \ No newline at end of file From 5923b84cc6239de17716920bc7befcb32eb128d8 Mon Sep 17 00:00:00 2001 From: leesanghuu Date: Sat, 15 Nov 2025 03:29:48 +0900 Subject: [PATCH 12/12] =?UTF-8?q?chore:=20=EC=8A=A4=ED=81=AC=EB=A6=BD?= =?UTF-8?q?=ED=8A=B8=20=EC=88=98=EC=A0=953?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 40 ++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index b54bd0d..750188c 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -47,31 +47,27 @@ jobs: script: | cd /home/ubuntu/app - echo "[deploy] kill old app if exists" - pkill -f "java -jar" || true - sleep 5 - - echo "[deploy] list jars" - ls -al build/libs - - JAR_PATH=$(ls -t build/libs/*.jar | head -n 1) - echo "[deploy] Using JAR: $JAR_PATH" - - if [ -z "$JAR_PATH" ]; then - echo "[deploy] No JAR found under build/libs" - exit 1 + echo "[deploy] stop old app" + if [ -f app.pid ]; then + PID=$(cat app.pid) + if ps -p "$PID" > /dev/null 2>&1; then + kill "$PID" || true + sleep 5 + fi + rm app.pid fi - - echo "[deploy] start app with nohup in background" + + echo "[deploy] start new app" DB_PASSWORD=${{ secrets.DB_PASSWORD }} \ - nohup java -jar "$JAR_PATH" > app.log 2>&1 & - + nohup java -jar build/libs/workingdead-0.0.1-SNAPSHOT.jar > app.log 2>&1 & + + echo $! > app.pid + sleep 5 - - if pgrep -f "java -jar" > /dev/null; then - echo "[deploy] Application is running." - exit 0 + if ps -p "$(cat app.pid)" > /dev/null 2>&1; then + echo "[deploy] Application started successfully" else - echo "[deploy] Application failed to start." + echo "[deploy] Application failed to start" + tail -n 80 app.log || true exit 1 fi \ No newline at end of file