From d479f3db6af9c23d2e95823a5612b530331bcbbe Mon Sep 17 00:00:00 2001 From: Yongbum Kim Date: Tue, 23 Dec 2025 19:05:27 +0900 Subject: [PATCH 1/4] =?UTF-8?q?fix:=20prometheus.yml=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=20=EC=A0=84=EC=86=A1=20=EC=84=A4=EC=A0=95=20=EC=98=A4=EB=A5=98?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - prometheus.yml 파일이 디렉토리로 인식되는 오류가 있었습니다. - 파일을 직접 전송해주는 방법을 통해서 해당 오류를 해결했습니다. issue #27 --- .github/workflows/CD.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/CD.yml b/.github/workflows/CD.yml index cc6819b..a7908eb 100644 --- a/.github/workflows/CD.yml +++ b/.github/workflows/CD.yml @@ -28,6 +28,7 @@ jobs: cp nginx/nginx-prod.conf deploy-files/ cp nginx/nginx-cert-setup.conf deploy-files/ cp docker-compose.yml deploy-files/ + cp src/main/resources/prometheus.yml deploy-files/ cp .env deploy-files/ - name: 필요한 파일들을 EC2 서버로 전송 From ee97edf9f7431ae3ae56d254230e782e7fda6c2e Mon Sep 17 00:00:00 2001 From: Yongbum Kim Date: Tue, 23 Dec 2025 19:07:05 +0900 Subject: [PATCH 2/4] =?UTF-8?q?fix:=20=EC=9D=B8=EC=A6=9D=EC=84=9C=20?= =?UTF-8?q?=EB=B0=9C=EA=B8=89=20=EC=98=A4=EB=A5=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 기존 인증서가 이미 있으면 새롭게 발급을 안하는 로직이 인증 주소가 추가했음에도 갱신되지 않는 오류가 있었습니다. - 해당 문제를 해결하기 위해서 지정한 주소가 인증서에 없다면, 추가하는 방향으로 설정을 추가하여 오류를 해결했습니다. issue #27 --- scripts/deploy.sh | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/scripts/deploy.sh b/scripts/deploy.sh index faa3ef5..de1ad21 100644 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -25,6 +25,14 @@ WHITELIST_FILE="$NGINX_CONF_DIR/allowed_ips.rules" DISK_WARN_THRESHOLD=80 DISK_CLEAN_THRESHOLD=90 +REQUIRED_DOMAINS=( + sspots.site + www.sspots.site + api.sspots.site + grafana.sspots.site + prometheus.sspots.site +) + send_discord() { local TITLE="$1" local BODY="$2" @@ -139,20 +147,25 @@ sudo mkdir -p ./data/certbot/conf sudo mkdir -p ./data/certbot/www check_certificate() { - # sudo 권한으로 파일 존재 확인 if sudo [ -f "$CERT_FILE_PATH" ]; then echo "기존 SSL 인증서를 찾았습니다: $CERT_FILE_PATH" - # sudo 권한으로 openssl 실행 - if sudo openssl x509 -checkend 2592000 -noout -in "$CERT_FILE_PATH" > /dev/null 2>&1; then - echo "인증서가 유효합니다. (30일 이상 남음)" - return 0 - else - echo "인증서가 30일 이내에 만료됩니다. 갱신이 필요합니다." + if ! sudo openssl x509 -checkend 2592000 -noout -in "$CERT_FILE_PATH" > /dev/null 2>&1; then + echo "❌ 인증서가 30일 이내에 만료됩니다." return 1 fi + + echo "✔ 인증서 유효 기간 정상" + + if ! check_certificate_domains; then + echo "❌ 인증서에 필요한 도메인이 모두 포함되어 있지 않습니다." + return 1 + fi + + echo "✅ 인증서 유효 + 도메인 구성 정상" + return 0 else - echo "SSL 인증서가 존재하지 않습니다." + echo "❌ SSL 인증서가 존재하지 않습니다." return 1 fi } From 2fe648e5001c0dc5fcc5d760f967677b8e109d52 Mon Sep 17 00:00:00 2001 From: Yongbum Kim Date: Tue, 23 Dec 2025 19:09:38 +0900 Subject: [PATCH 3/4] =?UTF-8?q?fix:=20docker-compose=20nginx=20depends=5Fo?= =?UTF-8?q?n=20=EC=84=A4=EC=A0=95=20=EC=98=A4=EB=A5=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - docker compose 과정에서 prometheus, grafana보다 먼저 띄어져서 생기는 오류가 있었습니다. - 이를 해결하기 위해서 nginx depends_on 옵션에 prometheus, grafana를 추가하여 해결했습니다. - 더불어, volumes에 grafana-storage 저장소를 추가했습니다. issue #27 --- docker-compose.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 2b7204a..c796d14 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -45,6 +45,8 @@ services: - ./data/certbot/www:/var/www/certbot depends_on: - spots-app + - prometheus + - grafana networks: - spots-net restart: always @@ -99,6 +101,7 @@ services: volumes: dbdata: + grafana-storage: certbot_data: networks: From ac35d342de26d57ada2d62133256212a8e36147c Mon Sep 17 00:00:00 2001 From: Yongbum Kim Date: Tue, 23 Dec 2025 19:10:53 +0900 Subject: [PATCH 4/4] =?UTF-8?q?fix:=20nginx=20=EC=9D=B8=EC=A6=9D=EC=84=9C?= =?UTF-8?q?=20=EB=94=94=EB=A0=89=ED=86=A0=EB=A6=AC=20=EC=9C=84=EC=B9=98=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - SSL 인증서 발급에 있어 여러 도메인 주소를 하나의 인증서로 발급받았습니다. - 그 과정에서 경로를 잘못 지정하여 발생하는 오류가 있었습니다. - 인증서가 존재하는 위치를 수정하여 해당 오류를 해결했습니다. issue #27 --- nginx/nginx-prod.conf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nginx/nginx-prod.conf b/nginx/nginx-prod.conf index 51c42a9..f85cf30 100644 --- a/nginx/nginx-prod.conf +++ b/nginx/nginx-prod.conf @@ -108,8 +108,8 @@ server { listen 443 ssl http2; server_name prometheus.sspots.site; - ssl_certificate /etc/letsencrypt/live/prometheus.sspots.site/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/prometheus.sspots.site/privkey.pem; + ssl_certificate /etc/letsencrypt/live/sspots.site/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/sspots.site/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384; @@ -136,8 +136,8 @@ server { listen 443 ssl http2; server_name grafana.sspots.site; - ssl_certificate /etc/letsencrypt/live/grafana.sspots.site/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/grafana.sspots.site/privkey.pem; + ssl_certificate /etc/letsencrypt/live/sspots.site/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/sspots.site/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384;