solorpower/docs/system_infrastructure_guide.md
haneulai a716dbef96
Some checks are pending
CI / Crawler (Python ${{ matrix.python-version }}) (3.10) (push) Waiting to run
CI / Crawler (Python ${{ matrix.python-version }}) (3.11) (push) Waiting to run
CI / API (Python 3.11) (push) Waiting to run
CI / Database migration (push) Waiting to run
CI / App web build (Node 20) (push) Waiting to run
feat: harden solar monitoring through stage 7
2026-08-07 14:07:22 +09:00

80 lines
3.3 KiB
Markdown

# SolarPower 시스템 인프라 및 구조 가이드
이 문서는 SolarPower 시스템의 실제 서버 인프라 정보와 로컬/원격 디렉토리 구조를 정리한 가이드입니다.
## 1. 서버 접속 정보 (Oracle Cloud)
현재 시스템의 메인 로직(Crawler 및 API)이 구동되고 있는 서버 정보입니다.
* **서버 이름:** `holdem-server`
* **공인 IP (Public):** `140.245.73.212`
* **테일스케일 IP:** `100.116.0.32`
* **접속 계정:** `ubuntu`
* **SSH 키 경로:** `C:\Users\haneu\.ssh\holdem_server.key`
### 💻 SSH 접속 명령어
```powershell
# 공인 IP로 접속
ssh -i "C:\Users\haneu\.ssh\holdem_server.key" ubuntu@140.245.73.212
# Tailscale 연결 시 접속
ssh -i "C:\Users\haneu\.ssh\holdem_server.key" ubuntu@100.116.0.32
```
---
## 2. 서버 디렉토리 구조 (Remote)
서버 내 주요 서비스 설치 경로입니다.
* **`~/solorpower/`**: 모노레포 통합 경로
* `~/solorpower/crawler/`: 실시간 데이터 수집기(Crawler) 및 역추적 백필 프로그램 경로
* `main.py`: 10분마다 실행되는 실시간 수집 엔트리
* `backward_backfill.py`: 과거 백필 스케줄러
* `crawler_manager.db`: SQLite 백필 및 스케줄 상태 DB
* `crawler.log`: 실시간 크롤링 실행 로그
* `backfill_cron.log`: 백필 실행 로그
* `~/solorpower/api_server/`: FastAPI 기반의 백엔드 API 서버 경로
### ⏰ 자동화 스케줄 (Crontab)
서버에서 `crontab -l` 명령어로 확인된 자동화 설정입니다.
* `*/10 * * * *`: 10분마다 실시간 데이터 수집 실행 (`main.py`)
* `10 0 * * *`: 매일 0시 10분에 일일 통계 요약 및 하이브리드 보정 실행 (`daily_summary.py`)
* `30 * * * *`: 매시간 30분마다 과거 5일치 백필 실행 (`backward_backfill.py --days 5 --delay 2.0`)
---
## 3. 로컬 프로젝트 구조 (Local)
개발 PC(`d:\dev\etc\SolorPower`)의 구성입니다.
* **`crawler/`**: Python 기반 데이터 수집기 소스 코드
* **`api_server/`**: FastAPI 기반 백엔드 소스 코드
* **`app/`**: React Native (Expo) 모바일 애플리케이션 소스 코드
* **`sql/`**: 데이터베이스 스키마 및 히스토리 관리
* **`docs/`**: 시스템 설계 및 분석 리포트 (현재 이 문서가 포함된 위치)
---
## 4. 데이터 흐름 (Data Flow)
1. **수집:** Crawler(Oracle Cloud) → 각 발전소 사이트 (나스 프록시 경유)
2. **저장:** Crawler → Supabase (PostgreSQL)
3. **알림:** Crawler → Telegram Bot (이상 감지 시 즉시 발송)
4. **제공:** API Server(Oracle Cloud) → Supabase 데이터 가공 후 JSON 제공
5. **표시:** Mobile App (Expo) → API 호출 후 차트 및 현황 표시
---
## 5. 주요 점검 및 대응 가이드
### 발전량이 0으로 표시될 때 (오늘 발생 사례)
1. **서버 접속:** `ssh oracle-fishingmap`이 아닌 `140.245.73.212`로 접속 확인
2. **로그 확인:** `tail -n 20 ~/solorpower_crawler/crawler.log`
3. **코드 패치:** `git pull origin main` (최신 보호 로직 반영 여부 확인)
4. **DB 확인:** Supabase `solar_logs` 테이블에서 해당 시간대 `status` 확인
---
*마지막 업데이트: 2026-06-18 (백필 크론 확인, 인프라 및 DB 경로 동기화)*