From 55a7b044d8b8d5074b5494acc6b364ca554e5507 Mon Sep 17 00:00:00 2001 From: kjh2064 Date: Thu, 25 Jun 2026 18:15:31 +0900 Subject: [PATCH] feat(diagnosis): Add environment diagnosis script and guide MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 환경 진단 도구: diagnose-environment.sh: - 네트워크 정보 (공인 IP, 내부 IP) - 디렉토리 구조 (/var/www 경로 확인) - Nginx 설정 확인 - 파일 권한 및 소유자 - 포트 상태 - 시스템 정보 - Sudo 권한 - Git/Gitea 정보 ENVIRONMENT_DIAGNOSIS.md: - 진단 절차 가이드 - 실행 방법 (3가지) - 출력 결과 분석 - 결과 보고 양식 - 빠른 진단 명령어 - 수정 후 다음 단계 목표: - 정확한 내부 IP 확인 (172.x.x.x) - 실제 웹 서버 경로 파악 - 웹 서버 사용자 확인 - Nginx 설정 파악 - 권한 구조 파악 결과 수집 후: - deploy-manual.sh 맞춤 수정 - 모든 배포 문서 업데이트 - 배포 실행 Co-Authored-By: Claude Haiku 4.5 --- ENVIRONMENT_DIAGNOSIS.md | 210 +++++++++++++++++++++++++++++++++++++++ diagnose-environment.sh | 202 +++++++++++++++++++++++++++++++++++++ 2 files changed, 412 insertions(+) create mode 100644 ENVIRONMENT_DIAGNOSIS.md create mode 100644 diagnose-environment.sh diff --git a/ENVIRONMENT_DIAGNOSIS.md b/ENVIRONMENT_DIAGNOSIS.md new file mode 100644 index 0000000..805a3b1 --- /dev/null +++ b/ENVIRONMENT_DIAGNOSIS.md @@ -0,0 +1,210 @@ +# 🔍 원격 서버 환경 진단 + +**목표**: SSH로 접속하여 원격 서버의 정확한 구조와 설정을 파악한 후 배포 스크립트를 맞춤형으로 작성 + +--- + +## 📋 진단 절차 + +### Step 1: SSH 접속 + +```bash +# 원격 서버에 SSH 접속 +ssh kjh2064@178.104.200.7 + +# 또는 이미 내부 IP를 알고 있다면 +ssh kjh2064@172.x.x.x +``` + +### Step 2: 진단 스크립트 실행 + +```bash +# 로컬에서 스크립트를 원격으로 실행 +ssh kjh2064@178.104.200.7 'bash -s' < diagnose-environment.sh + +# 또는 원격에 접속한 후 실행 +bash < <(curl -s https://raw.githubusercontent.com/.../diagnose-environment.sh) + +# 또는 직접 실행 +chmod +x diagnose-environment.sh +./diagnose-environment.sh +``` + +### Step 3: 출력 결과 확인 + +진단 스크립트가 다음 정보를 제공합니다: + +``` +1. 네트워크 정보 + - 공인 IP: 178.104.200.7 (확인됨) + - 내부 IP: 172.x.x.x (여기서 확인!) + - 호스트명 + - 네트워크 인터페이스 + +2. 웹 서버 디렉토리 구조 + - /var/www 여부 + - /var/www/quant 여부 + - /var/www/quant/publish 여부 + - 실제 경로 (다를 수 있음) + +3. Nginx 설정 + - Nginx 설치 확인 + - 설정 파일 위치 + - /quant 관련 설정 + +4. 파일 권한 및 소유자 + - 웹 서버 사용자 (www-data? nobody? 다른 사용자?) + - 디렉토리 권한 + +5. 포트 상태 + - 80, 443 포트 상태 + - 바인딩된 주소 + +6. 시스템 정보 + - OS 종류 및 버전 + - 디스크 공간 + +7. Sudo 권한 + - 현재 사용자의 sudo 권한 + - systemctl 사용 가능 여부 + +8. Git/Gitea 정보 + - Gitea 설치 위치 + - Gitea 데이터 저장소 +``` + +--- + +## 📊 진단 결과 분석 + +### 예상되는 출력 값들 + +| 항목 | 예상값 | 실제값 | +|------|--------|--------| +| **공인 IP** | 178.104.200.7 | ✓ | +| **내부 IP** | 172.x.x.x | ? | +| **웹 서버 경로** | /var/www/quant | ? | +| **웹 서버 사용자** | www-data | ? | +| **Nginx 설정** | /etc/nginx/sites-available/default | ? | +| **OS** | Ubuntu 20.04+ | ? | + +### 확인할 핵심 정보 + +1. **내부 IP 주소** (172로 시작) + ``` + ip addr show | grep "inet" + → inet 172.x.x.x/xx + ``` + +2. **웹 서버 경로** + ``` + ls -la /var/www/quant/ + → 실제 배포 경로 확인 + ``` + +3. **웹 서버 사용자** + ``` + ps aux | grep nginx | head -1 + → nginx 12345 0.0 0.1 ... + ``` + +4. **Nginx 설정** + ``` + grep -r "quant" /etc/nginx/ + → location /quant 설정 확인 + ``` + +5. **Sudo 권한** + ``` + sudo -l + → systemctl restart nginx 권한 확인 + ``` + +--- + +## 🔧 스크립트 결과 보고 양식 + +진단 스크립트 실행 후 다음 정보를 제공해주세요: + +### 네트워크 정보 +- 내부 IP: `172.x.x.x` 또는 다른 주소? +- 호스트명: ? +- 기본 게이트웨이: ? + +### 디렉토리 구조 +- /var/www 존재: O / X +- /var/www/quant 존재: O / X +- /var/www/quant/publish 존재: O / X +- 실제 웹 서빙 경로: ? + +### Nginx 설정 +- Nginx 버전: ? +- 설정 파일: /etc/nginx/sites-available/default 또는 다른 경로? +- /quant 설정 있음: O / X +- 루트 경로: ? + +### 파일 권한 +- 웹 서버 사용자: www-data 또는 ? +- /var/www/quant 소유자: ? +- /var/www/quant 권한: ? + +### 시스템 정보 +- OS: Ubuntu 20.04 또는 ? +- 디스크 여유: ?MB + +### Sudo 권한 +- sudo -l 출력: + ``` + 복사해주세요 + ``` + +--- + +## 📝 수집 후 수행할 작업 + +위 정보를 받은 후: + +1. ✅ 정확한 내부 IP로 배포 스크립트 수정 +2. ✅ 실제 경로로 deploy-manual.sh 수정 +3. ✅ 웹 서버 사용자로 권한 설정 수정 +4. ✅ Nginx 설정에 맞게 배포 절차 수정 +5. ✅ 모든 문서 (DEPLOYMENT_SSH_GUIDE.md, CI_CD_PIPELINE.md 등) 업데이트 + +--- + +## 🚀 빠른 진단 (한 줄 명령어) + +```bash +# SSH 접속 후 한 번에 필요한 정보만 추출 +echo "=== 내부 IP ===" && ip addr show | grep "inet " | grep -v 127.0.0.1 && \ +echo "=== 웹 서버 경로 ===" && ls -la /var/www/ && \ +echo "=== Nginx 사용자 ===" && ps aux | grep nginx | head -1 && \ +echo "=== Sudo 권한 ===" && sudo -l | head -5 +``` + +--- + +## ⚡ 진단 후 다음 단계 + +1. **진단 결과 공유** + - 위의 "스크립트 결과 보고 양식" 내용을 제공해주세요 + +2. **배포 스크립트 수정** + - 정확한 정보를 바탕으로 deploy-manual.sh 맞춤 수정 + - 내부 IP, 경로, 사용자 등 정확히 반영 + +3. **배포 실행** + ```bash + chmod +x deploy-manual.sh + ./deploy-manual.sh [실제_내부_IP] + ``` + +4. **검증** + ```bash + curl -I http://178.104.200.7/quant/ + ``` + +--- + +**진단을 완료한 후 결과를 공유해주세요!** +정확한 환경 정보를 바탕으로 완벽하게 맞춤형 배포 스크립트를 작성하겠습니다. 🎯 diff --git a/diagnose-environment.sh b/diagnose-environment.sh new file mode 100644 index 0000000..f3a8301 --- /dev/null +++ b/diagnose-environment.sh @@ -0,0 +1,202 @@ +#!/bin/bash +# 원격 서버 환경 진단 스크립트 +# SSH로 접속한 후 이 스크립트를 실행하여 환경 정보를 수집합니다. + +echo "═══════════════════════════════════════════════════════════════" +echo " 원격 서버 환경 진단" +echo "═══════════════════════════════════════════════════════════════" +echo "" + +# 1. 네트워크 정보 +echo "1️⃣ 네트워크 정보" +echo "───────────────────────────────────────────────────────────────" +echo "공인 IP (외부에서 접속 가능):" +curl -s https://api.ipify.org +echo "" + +echo "내부 IP 목록:" +ip addr show | grep -E "inet |inet6 " | grep -v "127.0.0.1" +echo "" + +echo "호스트명:" +hostname +echo "" + +echo "네트워크 인터페이스:" +ip link show | grep -E "^[0-9]+:|UP|DOWN" +echo "" + +# 2. 디렉토리 구조 +echo "2️⃣ 웹 서버 디렉토리 구조" +echo "───────────────────────────────────────────────────────────────" + +# /var/www 확인 +if [ -d /var/www ]; then + echo "✓ /var/www 존재" + ls -la /var/www/ | head -20 +else + echo "✗ /var/www 없음" +fi +echo "" + +# /var/www/quant 확인 +if [ -d /var/www/quant ]; then + echo "✓ /var/www/quant 존재" + ls -la /var/www/quant/ + du -sh /var/www/quant/* +else + echo "✗ /var/www/quant 없음" +fi +echo "" + +# /var/www/quant/publish 확인 +if [ -d /var/www/quant/publish ]; then + echo "✓ /var/www/quant/publish 존재" + ls -la /var/www/quant/publish/ | head -10 + du -sh /var/www/quant/publish +else + echo "✗ /var/www/quant/publish 없음 (첫 배포)" +fi +echo "" + +# 3. Nginx 설정 +echo "3️⃣ Nginx 설정" +echo "───────────────────────────────────────────────────────────────" + +if command -v nginx &> /dev/null; then + echo "✓ Nginx 설치됨" + nginx -v + echo "" + + echo "Nginx 설정 파일 위치:" + nginx -T 2>/dev/null | grep "configuration file" | head -1 + echo "" + + echo "Nginx 실행 사용자:" + ps aux | grep nginx | grep -v grep | head -1 + echo "" + + echo "/quant 관련 설정:" + cat /etc/nginx/sites-available/default 2>/dev/null | grep -A 10 -B 2 "quant" || echo "quant 관련 설정 없음" + echo "" +else + echo "✗ Nginx 미설치" +fi + +echo "" + +# 4. 웹 서버 권한 +echo "4️⃣ 파일 권한 및 소유자" +echo "───────────────────────────────────────────────────────────────" + +echo "웹 서버 사용자:" +ps aux | grep -E "nginx|apache" | grep -v grep | head -1 | awk '{print $1}' || echo "확인 필요" +echo "" + +echo "/var/www 권한:" +ls -ld /var/www +echo "" + +if [ -d /var/www/quant ]; then + echo "/var/www/quant 권한:" + ls -ld /var/www/quant + echo "" +fi + +if [ -d /var/www/quant/publish ]; then + echo "/var/www/quant/publish 권한:" + ls -ld /var/www/quant/publish + echo "" +fi + +echo "" + +# 5. 포트 상태 +echo "5️⃣ 포트 상태" +echo "───────────────────────────────────────────────────────────────" + +netstat -tuln 2>/dev/null | grep -E "^Proto|:80|:443" || ss -tuln | grep -E "LISTEN|:80|:443" +echo "" + +echo "" + +# 6. 시스템 정보 +echo "6️⃣ 시스템 정보" +echo "───────────────────────────────────────────────────────────────" + +echo "OS:" +uname -a +echo "" + +echo "Linux 배포판:" +lsb_release -a 2>/dev/null || cat /etc/os-release | head -3 +echo "" + +echo "디스크 공간:" +df -h | grep -E "^/dev|Filesystem" +echo "" + +echo "" + +# 7. Sudo 권한 +echo "7️⃣ 현재 사용자 정보" +echo "───────────────────────────────────────────────────────────────" + +echo "현재 사용자:" +whoami +echo "" + +echo "사용자 그룹:" +groups +echo "" + +echo "Sudo 권한:" +sudo -l 2>/dev/null | grep -E "NOPASSWD|nginx|systemctl" || echo "sudo 권한 확인 필요" +echo "" + +echo "" + +# 8. Git/Gitea 정보 +echo "8️⃣ Git/Gitea 정보" +echo "───────────────────────────────────────────────────────────────" + +if command -v git &> /dev/null; then + echo "✓ Git 설치됨" + git --version +else + echo "✗ Git 미설치" +fi +echo "" + +if command -v gitea &> /dev/null; then + echo "✓ Gitea 설치됨" + gitea -v +else + echo "✗ Gitea 미설치" +fi +echo "" + +if [ -d /var/lib/gitea ] || [ -d /home/git/gitea-repositories ]; then + echo "Gitea 데이터 위치:" + [ -d /var/lib/gitea ] && echo " /var/lib/gitea" + [ -d /home/git/gitea-repositories ] && echo " /home/git/gitea-repositories" +else + echo "Gitea 데이터 위치: 확인 필요" +fi +echo "" + +echo "" + +echo "═══════════════════════════════════════════════════════════════" +echo "✅ 진단 완료" +echo "═══════════════════════════════════════════════════════════════" +echo "" +echo "위 정보를 바탕으로 배포 스크립트를 업데이트합니다." +echo "" +echo "특히 확인할 사항:" +echo " 1. 내부 IP 주소 (172로 시작하는 IP)" +echo " 2. /var/www/quant 경로 (또는 다른 경로?)" +echo " 3. 웹 서버 사용자 (www-data? nobody? 다른 사용자?)" +echo " 4. Nginx 설정 파일 위치" +echo " 5. /quant에 대한 nginx 설정" +echo ""