시스템 상태: ✅ 정상 운영 중 | 컨테이너: 13/13 실행
🏗️ 시스템 개요
╔════════════════════════════════════════════════════════════════════════════╗
║ HAXK.SHOP 시스템 아키텍처 ║
╚════════════════════════════════════════════════════════════════════════════╝
┌─────────────────────────────────────────────────────────────────────────┐
│ 🌐 NGINX 리버스 프록시 │
│ (nginx-server: 0.0.0.0:80/443) │
│ HTTP/HTTPS → SSL 정리 → WAF(SQL인젝션,XSS,Path traversal) → 라우팅 │
└─────────────────────────────────────────────────────────────────────────┘
↓
┌────────┴───────────┬──────────────┬──────────────┬───────────┐
↓ ↓ ↓ ↓ ↓
┌─────────────┐ ┌───────────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐
│ haxk.shop │ │ monitor.* │ │ api.* │ │search.* │ │backup.*│
│ www.* │ │ │ │ │ │ │ │ │
│ │ │ Netdata 19999 │ │ API 5000 │ │ SearXNG │ │ (HTTP) │
│ HTML Files │ │ (모니터링) │ │ (Python) │ │ (엔진) │ │ │
└─────────────┘ └───────────────┘ └──────────┘ └──────────┘ └────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ 관리 및 대시보드 서브도메인 │
├─────────────────────────────────────────────────────────────────────────┤
│ portainer.haxk.shop → Portainer UI (9000) - Docker 관리 │
│ pgadmin.haxk.shop → pgAdmin (80) - PostgreSQL 관리 │
│ traefik.haxk.shop → Traefik (8080) - Reverse Proxy 대시보드 │
│ plane.haxk.shop → Plane (8000) - 프로젝트 관리 │
│ roadmap.haxk.shop → Roadmap (80) - 시스템 로드맵 │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ 📊 백엔드 서비스 │
├─────────────────────────────────────────────────────────────────────────┤
│
│ 데이터베이스:
│ ┌─────────────────────────────────────────────────────────────────┐
│ │ MySQL 8.0 (mysql-db) MySQL Backup Service │
│ │ - API, Backup 데이터 - 자동 백업 │
│ │ - 포트: 3306 - 포트: 3306 │
│ └─────────────────────────────────────────────────────────────────┘
│
│ 캐시 & 메시지 큐:
│ ┌─────────────────────────────────────────────────────────────────┐
│ │ Redis/Valkey (redis-cache) Plane-Redis (plane-cache) │
│ │ - 주요 캐시 레이어 - Plane 전용 캐시 │
│ │ - 포트: 6379 - 포트: 6379 │
│ └─────────────────────────────────────────────────────────────────┘
│
│ Plane 스택:
│ ┌─────────────────────────────────────────────────────────────────┐
│ │ Plane (plane-project-manager) PostgreSQL (plane-database) │
│ │ - 프로젝트 관리 앱 - Plane 데이터베이스 │
│ │ - 포트: 8000 - 포트: 5432 │
│ └─────────────────────────────────────────────────────────────────┘
└─────────────────────────────────────────────────────────────────────────┘
📋 서브도메인 현황
| Domain | Service | 포트 | 상태 | 설명 |
|---|---|---|---|---|
haxk.shop |
Static HTML | 80→443 | ✅ Up | 메인 사이트 |
www.haxk.shop |
Static HTML | 80→443 | ✅ Up | 메인 사이트 (www) |
monitor.haxk.shop |
Netdata | 19999 | ✅ Up | 시스템 모니터링 대시보드 |
api.haxk.shop |
Python API | 5000 | ✅ Up | REST API 서버 |
search.haxk.shop |
SearXNG | 8080 | ✅ Up | 프라이빗 검색 엔진 |
backup.haxk.shop |
HTTP 리다이렉트 | 80→443 | ✅ Up | 백업 정보 페이지 |
plane.haxk.shop |
Plane | 8000 | ✅ Up | 프로젝트 관리 도구 |
portainer.haxk.shop |
Portainer | 9000 | ✅ Up | Docker 관리 UI |
pgadmin.haxk.shop |
pgAdmin | 80 | ✅ Up | PostgreSQL 관리 UI |
traefik.haxk.shop |
Traefik | 8080 | ✅ Up | Reverse Proxy 대시보드 |
roadmap.haxk.shop |
Roadmap | 80 | ✅ Up | 시스템 아키텍처 로드맵 |
🐳 컨테이너 목록 (13개)
🌐 외부 접근 가능 (포트 바인딩)
- nginx-server: 0.0.0.0:80 / 0.0.0.0:443 (모든 HTTP/HTTPS)
- netdata-monitoring: 0.0.0.0:19999 (모니터링)
- portainer-ui: 0.0.0.0:8000 / 0.0.0.0:9000 (Docker 관리)
- pgadmin-ui: 0.0.0.0:5050 (PostgreSQL 관리)
- traefik-proxy: 0.0.0.0:8080 (Reverse Proxy 대시보드)
🔒 내부 네트워크만 (포트 바인딩 없음)
- mysql-db: 3306/tcp (MySQL 8.0)
- mysql-backup: 백업 서비스
- api-server: 5000/tcp (Python Flask)
- redis-cache: 6379/tcp (캐시 레이어)
- searxng-engine: 8080/tcp (검색 엔진)
- plane-db: 5432/tcp (PostgreSQL)
- plane-redis: 6379/tcp (Plane 전용 캐시)
- plane: 8000/tcp (프로젝트 관리)
🔐 보안 기능
NGINX WAF (Web Application Firewall)
├─ SQL Injection 방지
│ ├─ "union.*select" 차단
│ ├─ "insert.*into" 차단
│ ├─ "drop.*table" 차단
│ └─ 기타 SQL 명령어 차단
│
├─ XSS (Cross-Site Scripting) 방지
│ ├─ <script> 태그 차단
│ ├─ javascript: 프로토콜 차단
│ ├─ onerror= 속성 차단
│ └─ 기타 XSS 벡터 차단
│
└─ Path Traversal 방지
├─ ".." 시퀀스 차단
├─ "%2e%2e" 인코딩 차단
└─ 디렉토리 이동 공격 차단
SSL/TLS
- Let's Encrypt 자동 갱신 (공개 도메인)
- TLS 1.2 / TLS 1.3 지원
- HTTP → HTTPS 자동 리다이렉트
Fail2Ban
5+ 보안 감시 규칙 활성화:
- sshd (SSH 브루트포스 방지)
- nginx-http-auth (인증 실패)
- nginx-limit-req (속도 제한)
- nginx-noscript (의심 스크립트)
- nginx-badbots (악성 봇)
📊 데이터베이스 구조
MySQL 8.0
├─ API 데이터
│ ├─ 사용자 정보
│ ├─ 로그 데이터
│ └─ 기타 애플리케이션 데이터
│
└─ 자동 백업 (mysql-backup-service)
├─ 매일 자동 백업
├─ 버전 관리
└─ 복구 지점 유지
PostgreSQL (Plane 전용)
├─ Plane 프로젝트 데이터
│ ├─ 프로젝트 정보
│ ├─ 이슈 및 작업
│ └─ 팀 및 사용자
│
└─ 캐시: plane-redis (6379)
🔄 트래픽 흐름
1. 클라이언트 요청
↓
2. DNS → 127.0.0.1 (/etc/hosts)
↓
3. NGINX 수신 (포트 80/443)
↓
4. WAF 검사 (SQL, XSS, Path Traversal)
↓
5. SSL/TLS 처리 (HTTPS)
↓
6. 도메인별 라우팅
├─→ haxk.shop → Static HTML
├─→ monitor.* → Netdata (19999)
├─→ api.* → Python API (5000)
├─→ search.* → SearXNG (8080)
├─→ portainer.* → Portainer (9000)
├─→ pgadmin.* → pgAdmin (80)
├─→ traefik.* → Traefik (8080)
├─→ plane.* → Plane (8000)
├─→ roadmap.* → Roadmap (80)
└─→ 기타 → 메인 사이트 (HTML)
↓
7. 응답 반환
↓
8. 클라이언트 수신
🗂️ 네트워크 구조
네트워크 1: web (외부 통신)
- NGINX (포트 바인딩)
- 외부 도구들 (Portainer, Traefik, Netdata)
네트워크 2: internal (내부만)
└─ 모든 백엔드 서비스
├─ MySQL / PostgreSQL
├─ Redis
├─ API 서버
├─ Plane
└─ 기타 내부 서비스
🚀 배포 현황
| 항목 | 상태 | 세부 정보 |
|---|---|---|
| 컨테이너 수 | 13/13 | 모두 실행 중 ✅ |
| SSL 인증서 | 유효 | Let's Encrypt 자동 갱신 |
| 보안 필터 | 활성 | WAF + Fail2Ban |
| 데이터베이스 | 정상 | MySQL 8.0 + PostgreSQL 16 |
| 모니터링 | 활성 | Netdata 실시간 모니터링 |
| 캐싱 | 활성 | Redis + Valkey |
🗑️ 제거된 서비스 (2026-01-27)
다음 5개 서비스는 최적화를 위해 제거되었습니다:
files.haxk.shop(Nextcloud)gitea.haxk.shop(Gitea)vault.haxk.shop(Vaultwarden)grafana.haxk.shop(Grafana)prometheus.haxk.shop(Prometheus)
📈 성능 최적화
GZIP 압축
- CSS, JavaScript, JSON 자동 압축
- 대역폭 절약
- 로딩 속도 증대
캐싱 전략
- Redis/Valkey를 통한 세션/데이터 캐싱
- Plane 전용 Redis 인스턴스
- 응답 시간 단축
연결 관리
- keep-alive 활성화 (65초)
- TCP 최적화
- 동시 연결 허용 (worker_connections: 1024)
🔧 설정 파일
/home/dori/stack/
├── docker-compose.yml # Docker 서비스 정의
├── nginx.conf # NGINX 메인 설정
├── conf.d/
│ └── haxk.shop.conf # 가상 호스트 설정
├── html/
│ ├── index.html # 메인 사이트
│ ├── ROADMAP.md # Markdown 로드맵
│ ├── ROADMAP.html # HTML 로드맵 (이 파일)
│ └── [정적 파일들]
├── certbot/ # SSL 인증서
│ ├── conf/ # Let's Encrypt 설정
│ └── www/ # 인증 확인 파일
└── [기타 설정 파일]
📞 연락처 및 지원
- 메인 사이트: https://haxk.shop
- 모니터링: https://monitor.haxk.shop
- Docker 관리: https://portainer.haxk.shop
- 데이터베이스: https://pgadmin.haxk.shop
- 시스템 로드맵: https://roadmap.haxk.shop