From 0406336372f26789563251082f9b750e1dbac827 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=9B=90=EC=A4=80?= Date: Thu, 6 Nov 2025 16:08:38 +0900 Subject: [PATCH 1/7] =?UTF-8?q?feat:=20docker=20compose=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docker-compose.monitoring.yml | 40 +++++++++++++++++++ Monitoring-Jenkins/grafana/.gitignore | 1 + .../provisioning/datasources/prometheus.yml | 7 ++++ Monitoring-Jenkins/nginx/nginx.conf | 31 ++++++++++++++ Monitoring-Jenkins/prometheus/prometheus.yml | 18 +++++++++ 5 files changed, 97 insertions(+) create mode 100644 Monitoring-Jenkins/docker-compose.monitoring.yml create mode 100644 Monitoring-Jenkins/grafana/.gitignore create mode 100644 Monitoring-Jenkins/grafana/provisioning/datasources/prometheus.yml create mode 100644 Monitoring-Jenkins/nginx/nginx.conf create mode 100644 Monitoring-Jenkins/prometheus/prometheus.yml diff --git a/Monitoring-Jenkins/docker-compose.monitoring.yml b/Monitoring-Jenkins/docker-compose.monitoring.yml new file mode 100644 index 0000000..f362691 --- /dev/null +++ b/Monitoring-Jenkins/docker-compose.monitoring.yml @@ -0,0 +1,40 @@ +version: "3.8" + +services: + prometheus: + image: prom/prometheus:latest + container_name: prometheus + ports: + - "9090:9090" + volumes: + - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro + restart: always + + grafana: + image: grafana/grafana:latest + container_name: grafana + ports: + - "3000:3000" + volumes: + - ./grafana/data:/var/lib/grafana + - ./grafana/provisioning:/etc/grafana/provisioning + depends_on: + - prometheus + restart: always + + nginx: + image: nginx:latest + container_name: monitoring-nginx + ports: + - "80:80" + - "443:443" + volumes: + - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro + - /etc/letsencrypt:/etc/letsencrypt:ro # certbot 인증서 마운트 + depends_on: + - grafana + - prometheus + restart: always + +volumes: + grafana-data: diff --git a/Monitoring-Jenkins/grafana/.gitignore b/Monitoring-Jenkins/grafana/.gitignore new file mode 100644 index 0000000..adbb97d --- /dev/null +++ b/Monitoring-Jenkins/grafana/.gitignore @@ -0,0 +1 @@ +data/ \ No newline at end of file diff --git a/Monitoring-Jenkins/grafana/provisioning/datasources/prometheus.yml b/Monitoring-Jenkins/grafana/provisioning/datasources/prometheus.yml new file mode 100644 index 0000000..0eddf26 --- /dev/null +++ b/Monitoring-Jenkins/grafana/provisioning/datasources/prometheus.yml @@ -0,0 +1,7 @@ +apiVersion: 1 +datasources: + - name: Prometheus + type: prometheus + access: proxy + url: http://prometheus:9090 + isDefault: true diff --git a/Monitoring-Jenkins/nginx/nginx.conf b/Monitoring-Jenkins/nginx/nginx.conf new file mode 100644 index 0000000..3645e30 --- /dev/null +++ b/Monitoring-Jenkins/nginx/nginx.conf @@ -0,0 +1,31 @@ +events {} + +http { + server { + listen 80; + server_name k13d106.p.ssafy.io; + + # HTTP 요청은 HTTPS로 리다이렉트 + return 301 https://$host$request_uri; + } + + server { + listen 443 ssl; + server_name k13d106.p.ssafy.io; + + ssl_certificate /etc/letsencrypt/live/k13d106.p.ssafy.io/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/k13d106.p.ssafy.io/privkey.pem; + + location /grafana/ { + proxy_pass http://grafana:3000/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + + location /prometheus/ { + proxy_pass http://prometheus:9090/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + } +} diff --git a/Monitoring-Jenkins/prometheus/prometheus.yml b/Monitoring-Jenkins/prometheus/prometheus.yml new file mode 100644 index 0000000..1536fa6 --- /dev/null +++ b/Monitoring-Jenkins/prometheus/prometheus.yml @@ -0,0 +1,18 @@ +global: + scrape_interval: 5s + +scrape_configs: + # Prometheus 자체 메트릭 + - job_name: "prometheus" + static_configs: + - targets: ["prometheus:9090"] + + # 백엔드 서버 Node Exporter + - job_name: "goodgamefinder-node" + static_configs: + - targets: ["goodgamefinder.xyz:9100"] + + # 백엔드 서버 cAdvisor + - job_name: "goodgamefinder-cadvisor" + static_configs: + - targets: ["goodgamefinder.xyz:8082"] From b5e557225665320822b1b5aec2951e9c2f60cb7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=9B=90=EC=A4=80?= Date: Fri, 7 Nov 2025 10:02:08 +0900 Subject: [PATCH 2/7] =?UTF-8?q?feat:=20nginx=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Monitoring-Jenkins/docker-compose.monitoring.yml | 3 +++ Monitoring-Jenkins/nginx/nginx.conf | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Monitoring-Jenkins/docker-compose.monitoring.yml b/Monitoring-Jenkins/docker-compose.monitoring.yml index f362691..f4e3edc 100644 --- a/Monitoring-Jenkins/docker-compose.monitoring.yml +++ b/Monitoring-Jenkins/docker-compose.monitoring.yml @@ -15,6 +15,9 @@ services: container_name: grafana ports: - "3000:3000" + environment: + - GF_SERVER_ROOT_URL=https://k13d106.p.ssafy.io/grafana/ + - GF_SERVER_SERVE_FROM_SUB_PATH=true volumes: - ./grafana/data:/var/lib/grafana - ./grafana/provisioning:/etc/grafana/provisioning diff --git a/Monitoring-Jenkins/nginx/nginx.conf b/Monitoring-Jenkins/nginx/nginx.conf index 3645e30..1a5bfdc 100644 --- a/Monitoring-Jenkins/nginx/nginx.conf +++ b/Monitoring-Jenkins/nginx/nginx.conf @@ -13,13 +13,15 @@ http { listen 443 ssl; server_name k13d106.p.ssafy.io; - ssl_certificate /etc/letsencrypt/live/k13d106.p.ssafy.io/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/k13d106.p.ssafy.io/privkey.pem; + ssl_certificate /etc/letsencrypt/live/p.ssafy.io/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/p.ssafy.io/privkey.pem; location /grafana/ { proxy_pass http://grafana:3000/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; } location /prometheus/ { From f320ba83f7a7e78d249cdcb8681a0b5c1fbed3e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=9B=90=EC=A4=80?= Date: Fri, 7 Nov 2025 10:11:29 +0900 Subject: [PATCH 3/7] =?UTF-8?q?chore:=20ssl=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Monitoring-Jenkins/nginx/nginx.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Monitoring-Jenkins/nginx/nginx.conf b/Monitoring-Jenkins/nginx/nginx.conf index 1a5bfdc..30a83bd 100644 --- a/Monitoring-Jenkins/nginx/nginx.conf +++ b/Monitoring-Jenkins/nginx/nginx.conf @@ -13,8 +13,8 @@ http { listen 443 ssl; server_name k13d106.p.ssafy.io; - ssl_certificate /etc/letsencrypt/live/p.ssafy.io/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/p.ssafy.io/privkey.pem; + ssl_certificate /etc/letsencrypt/live/k13d106.p.ssafy.io/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/k13d106.p.ssafy.io/privkey.pem; location /grafana/ { proxy_pass http://grafana:3000/; From 6448e25b15f0a693be0d92f7a891f199679d8604 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=9B=90=EC=A4=80?= Date: Fri, 7 Nov 2025 12:36:26 +0900 Subject: [PATCH 4/7] =?UTF-8?q?chore:=20docker=20compose=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docker-compose.monitoring.yml | 38 +++++++++---------- Monitoring-Jenkins/nginx/nginx.conf | 4 +- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/Monitoring-Jenkins/docker-compose.monitoring.yml b/Monitoring-Jenkins/docker-compose.monitoring.yml index f4e3edc..314f62f 100644 --- a/Monitoring-Jenkins/docker-compose.monitoring.yml +++ b/Monitoring-Jenkins/docker-compose.monitoring.yml @@ -1,43 +1,41 @@ -version: "3.8" +version: '3' services: prometheus: image: prom/prometheus:latest container_name: prometheus + restart: always ports: - "9090:9090" + networks: + - monitoring volumes: - - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro - restart: always + - ./prometheus.yml:/etc/prometheus/prometheus.yml grafana: image: grafana/grafana:latest container_name: grafana + restart: always ports: - "3000:3000" + networks: + - monitoring environment: - - GF_SERVER_ROOT_URL=https://k13d106.p.ssafy.io/grafana/ - - GF_SERVER_SERVE_FROM_SUB_PATH=true - volumes: - - ./grafana/data:/var/lib/grafana - - ./grafana/provisioning:/etc/grafana/provisioning - depends_on: - - prometheus - restart: always + - GF_SECURITY_ADMIN_PASSWORD=admin - nginx: + monitoring-nginx: image: nginx:latest container_name: monitoring-nginx + restart: always ports: - "80:80" - "443:443" + networks: + - monitoring volumes: - - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - - /etc/letsencrypt:/etc/letsencrypt:ro # certbot 인증서 마운트 - depends_on: - - grafana - - prometheus - restart: always + - ./nginx.conf:/etc/nginx/nginx.conf + - ./certs:/etc/letsencrypt -volumes: - grafana-data: +networks: + monitoring: + driver: bridge diff --git a/Monitoring-Jenkins/nginx/nginx.conf b/Monitoring-Jenkins/nginx/nginx.conf index 30a83bd..64db2d9 100644 --- a/Monitoring-Jenkins/nginx/nginx.conf +++ b/Monitoring-Jenkins/nginx/nginx.conf @@ -17,7 +17,7 @@ http { ssl_certificate_key /etc/letsencrypt/live/k13d106.p.ssafy.io/privkey.pem; location /grafana/ { - proxy_pass http://grafana:3000/; + proxy_pass http://grafana:3000/; # 경로 뒤에 슬래시 추가 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -25,7 +25,7 @@ http { } location /prometheus/ { - proxy_pass http://prometheus:9090/; + proxy_pass http://prometheus:9090/; # 경로 뒤에 슬래시 추가 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } From a5fb45c2ae7aa8ab44f6e36fa25a36b984b8c854 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=9B=90=EC=A4=80?= Date: Fri, 7 Nov 2025 13:39:06 +0900 Subject: [PATCH 5/7] =?UTF-8?q?chore:=20nginx=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docker-compose.monitoring.yml | 29 +++++----------- .../provisioning/datasources/prometheus.yml | 7 ---- Monitoring-Jenkins/nginx/nginx.conf | 33 ------------------- Monitoring-Jenkins/prometheus/prometheus.yml | 20 +++++------ 4 files changed, 19 insertions(+), 70 deletions(-) delete mode 100644 Monitoring-Jenkins/grafana/provisioning/datasources/prometheus.yml delete mode 100644 Monitoring-Jenkins/nginx/nginx.conf diff --git a/Monitoring-Jenkins/docker-compose.monitoring.yml b/Monitoring-Jenkins/docker-compose.monitoring.yml index 314f62f..5e563f7 100644 --- a/Monitoring-Jenkins/docker-compose.monitoring.yml +++ b/Monitoring-Jenkins/docker-compose.monitoring.yml @@ -1,40 +1,29 @@ version: '3' services: + # Prometheus 설정 prometheus: image: prom/prometheus:latest container_name: prometheus - restart: always ports: - - "9090:9090" + - "9090:9090" # Prometheus 웹 인터페이스 + volumes: + - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml # Prometheus 설정 파일 networks: - monitoring - volumes: - - ./prometheus.yml:/etc/prometheus/prometheus.yml + # Grafana 설정 grafana: image: grafana/grafana:latest container_name: grafana - restart: always ports: - - "3000:3000" - networks: - - monitoring + - "3000:3000" # Grafana 대시보드 environment: - - GF_SECURITY_ADMIN_PASSWORD=admin - - monitoring-nginx: - image: nginx:latest - container_name: monitoring-nginx - restart: always - ports: - - "80:80" - - "443:443" + - GF_SECURITY_ADMIN_PASSWORD=admin # 기본 관리자 비밀번호 + depends_on: + - prometheus networks: - monitoring - volumes: - - ./nginx.conf:/etc/nginx/nginx.conf - - ./certs:/etc/letsencrypt networks: monitoring: diff --git a/Monitoring-Jenkins/grafana/provisioning/datasources/prometheus.yml b/Monitoring-Jenkins/grafana/provisioning/datasources/prometheus.yml deleted file mode 100644 index 0eddf26..0000000 --- a/Monitoring-Jenkins/grafana/provisioning/datasources/prometheus.yml +++ /dev/null @@ -1,7 +0,0 @@ -apiVersion: 1 -datasources: - - name: Prometheus - type: prometheus - access: proxy - url: http://prometheus:9090 - isDefault: true diff --git a/Monitoring-Jenkins/nginx/nginx.conf b/Monitoring-Jenkins/nginx/nginx.conf deleted file mode 100644 index 64db2d9..0000000 --- a/Monitoring-Jenkins/nginx/nginx.conf +++ /dev/null @@ -1,33 +0,0 @@ -events {} - -http { - server { - listen 80; - server_name k13d106.p.ssafy.io; - - # HTTP 요청은 HTTPS로 리다이렉트 - return 301 https://$host$request_uri; - } - - server { - listen 443 ssl; - server_name k13d106.p.ssafy.io; - - ssl_certificate /etc/letsencrypt/live/k13d106.p.ssafy.io/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/k13d106.p.ssafy.io/privkey.pem; - - location /grafana/ { - proxy_pass http://grafana:3000/; # 경로 뒤에 슬래시 추가 - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - } - - location /prometheus/ { - proxy_pass http://prometheus:9090/; # 경로 뒤에 슬래시 추가 - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - } - } -} diff --git a/Monitoring-Jenkins/prometheus/prometheus.yml b/Monitoring-Jenkins/prometheus/prometheus.yml index 1536fa6..3f1e459 100644 --- a/Monitoring-Jenkins/prometheus/prometheus.yml +++ b/Monitoring-Jenkins/prometheus/prometheus.yml @@ -1,18 +1,18 @@ global: - scrape_interval: 5s + scrape_interval: 15s # 메트릭 수집 주기 scrape_configs: - # Prometheus 자체 메트릭 - - job_name: "prometheus" + # 백엔드 서비스 메트릭 수집 (백엔드 서버의 메트릭을 수집) + - job_name: 'backend' static_configs: - - targets: ["prometheus:9090"] + - targets: ['goodgamefinder.xyz:8080/actuator/prometheus'] - # 백엔드 서버 Node Exporter - - job_name: "goodgamefinder-node" + # 프론트엔드 서비스 메트릭 수집 (프론트엔드 서버의 메트릭을 수집) + - job_name: 'web' static_configs: - - targets: ["goodgamefinder.xyz:9100"] + - targets: ['goodgamefinder.xyz:3000/metrics'] - # 백엔드 서버 cAdvisor - - job_name: "goodgamefinder-cadvisor" + # PostgreSQL Exporter 메트릭 수집 (Postgres Exporter가 설정되어 있다면) + - job_name: 'postgres' static_configs: - - targets: ["goodgamefinder.xyz:8082"] + - targets: ['goodgamefinder.xyz:9187'] From 458bea252c5e9f53204f447be773db136df595d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=9B=90=EC=A4=80?= Date: Fri, 7 Nov 2025 17:04:37 +0900 Subject: [PATCH 6/7] =?UTF-8?q?feat:=20=EB=AA=A8=EB=8B=88=ED=84=B0?= =?UTF-8?q?=EB=A7=81=20=ED=88=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docker-compose.monitoring.yml | 4 +--- Monitoring-Jenkins/prometheus/prometheus.yml | 19 ++++++++++++------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/Monitoring-Jenkins/docker-compose.monitoring.yml b/Monitoring-Jenkins/docker-compose.monitoring.yml index 5e563f7..c4a90c1 100644 --- a/Monitoring-Jenkins/docker-compose.monitoring.yml +++ b/Monitoring-Jenkins/docker-compose.monitoring.yml @@ -1,5 +1,3 @@ -version: '3' - services: # Prometheus 설정 prometheus: @@ -27,4 +25,4 @@ services: networks: monitoring: - driver: bridge + driver: bridge \ No newline at end of file diff --git a/Monitoring-Jenkins/prometheus/prometheus.yml b/Monitoring-Jenkins/prometheus/prometheus.yml index 3f1e459..7fc9b29 100644 --- a/Monitoring-Jenkins/prometheus/prometheus.yml +++ b/Monitoring-Jenkins/prometheus/prometheus.yml @@ -4,15 +4,20 @@ global: scrape_configs: # 백엔드 서비스 메트릭 수집 (백엔드 서버의 메트릭을 수집) - job_name: 'backend' + scheme: https + metrics_path: '/metrics/back' static_configs: - - targets: ['goodgamefinder.xyz:8080/actuator/prometheus'] - - # 프론트엔드 서비스 메트릭 수집 (프론트엔드 서버의 메트릭을 수집) - - job_name: 'web' - static_configs: - - targets: ['goodgamefinder.xyz:3000/metrics'] + - targets: ['goodgamefinder.xyz'] # PostgreSQL Exporter 메트릭 수집 (Postgres Exporter가 설정되어 있다면) - job_name: 'postgres' + scheme: https + metrics_path: '/metrics/db' + static_configs: + - targets: ['goodgamefinder.xyz'] + + - job_name: 'node_exporter' + metrics_path: '/metrics/system' + scheme: https static_configs: - - targets: ['goodgamefinder.xyz:9187'] + - targets: ['goodgamefinder.xyz'] \ No newline at end of file From 3ba10c9aec5045837c7c4771d7815258a5de4720 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=9B=90=EC=A4=80?= Date: Mon, 10 Nov 2025 11:52:57 +0900 Subject: [PATCH 7/7] =?UTF-8?q?feat:=20jenkins=20docker=20compose=20yml?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jenkins/docker-compose.jenkins.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Monitoring-Jenkins/jenkins/docker-compose.jenkins.yml diff --git a/Monitoring-Jenkins/jenkins/docker-compose.jenkins.yml b/Monitoring-Jenkins/jenkins/docker-compose.jenkins.yml new file mode 100644 index 0000000..df1f15f --- /dev/null +++ b/Monitoring-Jenkins/jenkins/docker-compose.jenkins.yml @@ -0,0 +1,16 @@ +version: "3.8" + +services: + jenkins: + image: jenkins/jenkins:lts + container_name: jenkins + restart: unless-stopped + user: root + ports: + - "8081:8080" + - "50000:50000" + volumes: + - /var/jenkins_home:/var/jenkins_home + - /var/run/docker.sock:/var/run/docker.sock + environment: + - TZ=Asia/Seoul