From 319d51b3946b7b950b128347a9ad74df95b20b72 Mon Sep 17 00:00:00 2001 From: Yongbum Kim Date: Tue, 23 Dec 2025 20:20:29 +0900 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20tomcat=20metric=20=EC=88=98=EC=A7=91?= =?UTF-8?q?=ED=95=98=EC=A7=80=20=EB=AA=BB=ED=95=98=EB=8A=94=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - tomcat 관련 metric을 수집하지 못하는 오류를 발견했습니다. - application.yml 파일에 tomcat 관련 내용을 수집할 수 있도록, tomcat 수집을 허용함으로써 오류를 해결했습니다. issue #27 --- src/main/resources/application.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index dbf95f9..641094a 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -50,4 +50,8 @@ management: enabled: true server: - forward-headers-strategy: framework \ No newline at end of file + forward-headers-strategy: framework + # Tomcat Metric Setting + tomcat: + mbeanregistry: + enabled: true \ No newline at end of file From 71b0ecae0771efde8c09d3552d4b134c65e5ff54 Mon Sep 17 00:00:00 2001 From: Yongbum Kim Date: Tue, 23 Dec 2025 20:22:43 +0900 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=EC=83=88=EB=A1=9C=EC=9A=B4=20?= =?UTF-8?q?=EB=8F=84=EB=A9=94=EC=9D=B8=EC=97=90=20=EB=8C=80=ED=95=9C=20?= =?UTF-8?q?=EC=9D=B8=EC=A6=9D=EC=84=9C=20=EB=B0=9C=EA=B8=89=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 기존 인증서에서 새로운 도메인을 추가하는 로직이 빠져있어 해당 내용을 추가했습니다. issue #27 --- scripts/deploy.sh | 144 ++++++++++++++++++++-------------------------- 1 file changed, 63 insertions(+), 81 deletions(-) diff --git a/scripts/deploy.sh b/scripts/deploy.sh index de1ad21..6522f6e 100644 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -146,98 +146,80 @@ sudo mkdir -p $NGINX_CONF_DIR sudo mkdir -p ./data/certbot/conf sudo mkdir -p ./data/certbot/www -check_certificate() { - if sudo [ -f "$CERT_FILE_PATH" ]; then - echo "기존 SSL 인증서를 찾았습니다: $CERT_FILE_PATH" - - 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 인증서가 존재하지 않습니다." - return 1 +check_certificate_domains() { + local cert="$CERT_FILE_PATH" + + echo "🔍 인증서 SAN 검사 중..." + + local san_list + san_list=$(sudo openssl x509 -in "$cert" -noout -ext subjectAltName | tr ',' '\n') + + for domain in "${REQUIRED_DOMAINS[@]}"; do + if ! echo "$san_list" | grep -q "DNS:$domain"; then + echo "❌ SAN 누락: $domain" + return 1 fi + done + + echo "✅ 모든 도메인이 인증서에 포함되어 있습니다." + return 0 +} + +check_certificate_validity() { + if sudo openssl x509 -checkend 2592000 -noout -in "$CERT_FILE_PATH"; then + echo "✔ 인증서 유효 기간 정상 (30일 이상)" + return 0 + else + echo "⚠ 인증서 만료 임박" + return 1 + fi } renew_certificate() { - echo "인증서 갱신을 시도합니다..." - $DOCKER_COMPOSE run --rm certbot renew - - if [ $? -eq 0 ]; then - echo "인증서 갱신 성공!" - return 0 - else - echo "인증서 갱신 실패. 새로 발급을 시도합니다." - return 1 - fi + echo "🔄 인증서 갱신 시도" + $DOCKER_COMPOSE run --rm certbot renew } issue_new_certificate() { - echo "새로운 SSL 인증서 발급을 시작합니다." - - echo "인증서 발급을 위해 임시 Nginx 설정을 적용합니다." - sudo cp ./nginx-cert-setup.conf $NGINX_CONF_DIR/default.conf - - $DOCKER_COMPOSE up -d nginx - - echo "Nginx가 시작될 때까지 10초 대기합니다..." - sleep 10 - - echo "Certbot으로 SSL 인증서를 요청합니다..." - $DOCKER_COMPOSE run --rm certbot certonly \ - --webroot --webroot-path=/var/www/certbot \ - -d sspots.site \ - -d www.sspots.site \ - -d api.sspots.site \ - -d grafana.sspots.site \ - -d prometheus.sspots.site \ - --email $CERTBOT_EMAIL --agree-tos --no-eff-email - - if [ $? -ne 0 ]; then - echo "SSL 인증서 발급에 실패했습니다." - echo "Let's Encrypt 발급 제한에 걸렸을 가능성이 있습니다." - echo "다음 중 하나를 시도해보세요:" - echo "1. 기존 인증서 파일을 수동으로 복사" - echo "2. 발급 제한 해제까지 대기" - echo "3. 스테이징 환경에서 테스트" - - $DOCKER_COMPOSE logs nginx - return 1 - fi - - echo "SSL 인증서 발급 성공!" - $DOCKER_COMPOSE down - return 0 + echo "🆕 인증서 신규/재발급(certonly) 시작" + + echo "➡ 발급용 nginx 설정 적용" + cp ./nginx-cert-setup.conf "$NGINX_CONF_DIR/default.conf" + + $DOCKER_COMPOSE up -d nginx + sleep 8 + + $DOCKER_COMPOSE run --rm certbot certonly \ + --webroot -w /var/www/certbot \ + --force-renewal \ + -d sspots.site \ + -d www.sspots.site \ + -d api.sspots.site \ + -d grafana.sspots.site \ + -d prometheus.sspots.site \ + --email "$CERTBOT_EMAIL" \ + --agree-tos \ + --no-eff-email + + echo "✅ 인증서 발급 완료" } - -if check_certificate; then +if [ -f "$CERT_FILE_PATH" ]; then + echo "🔐 기존 SSL 인증서를 찾았습니다: $CERT_FILE_PATH" + + if ! check_certificate_domains; then + echo "🚨 SAN 누락 → 인증서 재발급 필요" + issue_new_certificate + elif ! check_certificate_validity; then + echo "⏰ 만료 임박 → 갱신 시도" + renew_certificate + else + echo "✅ 인증서 유효 + 도메인 구성 정상" echo "기존 인증서를 사용합니다." + fi else - echo "인증서 처리가 필요합니다." - - if [ -f "$CERT_FILE_PATH" ]; then - if ! renew_certificate; then - echo "갱신 실패. 새 인증서 발급을 건너뜁니다." - echo "기존 인증서를 그대로 사용합니다." - fi - else - if ! issue_new_certificate; then - echo "인증서 발급 실패. HTTP로 서비스를 시작합니다." - echo "수동으로 인증서를 설정한 후 다시 배포하세요." - fi - fi + echo "❌ 인증서 없음 → 신규 발급" + issue_new_certificate fi # =============================================================== From f4b2e498fc2fbbac5ed6d8b2ba3609164eb207b8 Mon Sep 17 00:00:00 2001 From: Yongbum Kim Date: Tue, 23 Dec 2025 20:23:24 +0900 Subject: [PATCH 3/3] =?UTF-8?q?refactor:=20nginx=20deprecated=20=EB=AC=B8?= =?UTF-8?q?=EB=B2=95=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - nginx 내용 중 deprecated 된 문법이 있어 해당 내용을 최신 버전으로 수정했습니다. issue #27 --- nginx/nginx-prod.conf | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/nginx/nginx-prod.conf b/nginx/nginx-prod.conf index f85cf30..e864df2 100644 --- a/nginx/nginx-prod.conf +++ b/nginx/nginx-prod.conf @@ -105,7 +105,8 @@ server { } server { - listen 443 ssl http2; + listen 443 ssl; + http2 on; server_name prometheus.sspots.site; ssl_certificate /etc/letsencrypt/live/sspots.site/fullchain.pem; @@ -133,7 +134,8 @@ server { } server { - listen 443 ssl http2; + listen 443 ssl; + http2 on; server_name grafana.sspots.site; ssl_certificate /etc/letsencrypt/live/sspots.site/fullchain.pem;